Internet Explorer使用POST通过带有CSRF头的javascript下载触发器文件
我有一个web应用程序,在有人在我们的服务器上实施CSRF修复之前,它一直工作得很好。现在我们不能在http请求中不包含特定的头来调用POST请求。这破坏了文件下载,该文件下载需要POST请求来获取数据,而不是使用GET url参数 我有一个修复程序,使用新的X-CSRF头执行ajax POST请求(带有POST数据)。这将起作用,并返回正确的内容处置响应头。问题是您无法让浏览器打开“另存为”对话框或自动下载 在chrome/firefox中,我做了一个黑客攻击,你添加了一个带有数据URI的虚拟锚标记,然后点击它: Internet explorer不喜欢数据URI或使用javascript单击此href。 我不能使用flash作为选项,因为客户希望产品与flash配合使用 iFrame不起作用,因为无法使用iFrame发送自定义http头 您可以将Jquery添加到发布到url的表单中,但它不会触发“另存为”或下载浏览器交互 是否有任何解决方案可以与IE9或IE10一起使用?好的,这在IE10中也可以使用 假设您使用arraybuffer响应类型设置XHRInternet Explorer使用POST通过带有CSRF头的javascript下载触发器文件,javascript,internet-explorer,iframe,http-headers,csrf,Javascript,Internet Explorer,Iframe,Http Headers,Csrf,我有一个web应用程序,在有人在我们的服务器上实施CSRF修复之前,它一直工作得很好。现在我们不能在http请求中不包含特定的头来调用POST请求。这破坏了文件下载,该文件下载需要POST请求来获取数据,而不是使用GET url参数 我有一个修复程序,使用新的X-CSRF头执行ajax POST请求(带有POST数据)。这将起作用,并返回正确的内容处置响应头。问题是您无法让浏览器打开“另存为”对话框或自动下载 在chrome/firefox中,我做了一个黑客攻击,你添加了一个带有数据URI的虚拟
var xhr = new XMLHttpRequest();
xhr.open("POST", "/lamo_api", true);
xhr.responseType = "arraybuffer";
xhr.setRequestHeader('X-CSRF', getCSRFToken()); // getCSRFToken() returns a string
xhr.onload = function() {
var blob_builder = window.MSBlobBuilder();
builder.append(xhr.response);
var blob = new Blob(buffer, {'type': mimeType || 'application/octet-stream'});
window.navigator.msSaveBlob(blob, filename);
};
xhr.send(xml_post_data);
仍然在寻找IE9的答案