Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internet Explorer使用POST通过带有CSRF头的javascript下载触发器文件_Javascript_Internet Explorer_Iframe_Http Headers_Csrf - Fatal编程技术网

Internet Explorer使用POST通过带有CSRF头的javascript下载触发器文件

Internet 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的虚拟

我有一个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响应类型设置XHR

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的答案