It's much harder than what it looks like.
At first, I thought it could be done by HttpContext.Current.Response.Redirect(), however, this is supported only if the destination page is in in "Internet Zone" (for IE).
Then, I tried SPUtility.Redirect(), and got the same result.
What about the "Source" query string? It works, but if you want to jump to another site collection, this error message will pop up: "The following location is not accessible, because it is in a different site collection".
After hours of investigation, finally, I realized I was asking wrong question. The correct one is: How to utilize InfoPath web form in different site collection? That is easy!
(This sample code also shows how to pass query parameter to InfoPath form)
function getQuerystring(key, default_)
var search = unescape(location.search);
if (search == "")
search = search.substr(1);
var params = search.split("&");
for (var i = 0; i < params.length; i++)
var pairs = params[i].split("=");
if(pairs == key)
var options = SP.UI.$create_DialogOptions();
options.url = 'http://' + window.location.hostname + '/sites/IPForm/Site1/_layouts/FormServer.aspx?XsnLocation=/sites/IPForm/FormServerTemplates/IPForm1.xsn&DefaultItemOpen=1&accountname=' + getQuerystring('accountname');
options.allowMaximize = true;
options.autoSize = true;
options.showClose = true;