2014-01-22 40 views
0

我有一个web应用程序工作得很好,直到有人在我们的服务器上实现了CSRF修复程序。现在我们不能在我们的http请求中不包含特定标头的情况下调用POST请求。这打破了文件下载,需要POST请求来获取数据而不是使用GET url参数。使用POST通过JavaScript下载CSRF头文件的Internet Explorer触发器文件

我有一个修复程序,它使用新的X-CSRF标头来执行ajax POST请求(包含发布数据)。这会起作用,并返回正确的内容处置响应头。问题是你无法让浏览器打开“另存为”对话框或自动下载。

在Chrome/Firefox中,我没有在其中添加一个虚拟锚标签与数据URI并点击一个黑客:

Internet Explorer不喜欢数据URI或点击该HREF与JavaScript。 我不能使用闪光灯作为选项,因为客户希望产品使用闪光灯。

Iframes不起作用,因为您不能发送带Iframe的自定义http标头。

您可以将Jquery添加到POST的表单,但它不会触发“另存为”或下载浏览器交互。

是否有任何解决方案,实际与IE 9或10的作品?

回答

0

好了,这部作品在IE10 http://msdn.microsoft.com/en-us/library/ie/hh779016(v=vs.85).aspx

假设你建立一个XHR与arraybuffer响应类型

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 ...

相关问题