【问题标题】:HTTP headers to make browser show "save as" dialog and save file使浏览器显示“另存为”对话框并保存文件的 HTTP 标头
【发布时间】:2014-05-05 11:10:38
【问题描述】:

在我的 FCGI 应用程序中,我想以某种方式进行服务器端响应,以使浏览器(希望使用其中的大多数)打开“另存为”对话框并将文件实际保存在用户硬盘上。 我失败了/这个( 这是从 Chrome 收到的请求/响应的转储:

Remote Address:192.168.1.69:80  
Request URL:http://192.168.1.69/sunprint/sunweb.fcgi?GETPCBSDATAASFILE2SAVE  
Request Method:GET  
Status Code:200 OK

Request Headers  
GET /sunprint/sunweb.fcgi?GETPCBSDATAASFILE2SAVE HTTP/1.1  
Host: 192.168.1.69  
Connection: keep-alive  
Accept: */*  
X-Requested-With: XMLHttpRequest  
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)   >Chrome/34.0.1847.116 Safari/537.36
Referer: http://192.168.1.69/sunprint/PCBsVersions.html  
Accept-Encoding: gzip,deflate,sdch  
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4  

Query String Parameters  
GETPCBSDATAASFILE2SAVE  

Response Headers  
HTTP/1.1 200 OK  
Date: Mon, 05 May 2014 10:21:23 GMT  
Server: Apache/2.2.22 (Ubuntu)  
Cache-Control: no-cache, must-revalidate  
Expires: Mon, 26 Jul 1997 05:00:00 GMT  
Content-Description: File Transfer  
Content-Disposition: attachment; filename="SunSerialNumbers.txt"  
Vary: Accept-Encoding  
Content-Encoding: gzip  
Content-Length: 227  
Keep-Alive: timeout=5, max=81  
Connection: Keep-Alive  
Content-Type: text/plain  

我的文件内容是一组可打印的 ASCII 符号。顺便说一句,我应该以某种方式对内容进行编码吗?

似乎所有需要的标题都存在,但浏览器仍然拒绝显示所需的对话框。是否存在错误的标题组合?

要发出请求,我使用以下代码:

函数 sendCommandGetFile(url1) {
$.ajax({
网址:url1,
类型:“获取”
});
}

sendCommandGetFile("sunweb.fcgi?GETPCBSDATAASFILE2SAVE", function(data){});

非常感谢您的帮助。

【问题讨论】:

    标签: javascript http https http-headers


    【解决方案1】:

    X-Requested-With: XMLHttpRequest

    没有一组 HTTP 标头会导致浏览器下载它获取的文件以响应使用 XHR 的请求。

    您有三个基本选项。

    1. 首先不要使用 XHR
    2. 将文件数据存储在某处,给它一个临时 URI,在响应中将 URI 传回,让客户端 JS 将 location 设置为该 URI
    3. 构造一个data:方案URI并让客户端JS将其分配给location

    除非您确实需要有时返回文件,有时返回数据供 JS 处理(例如错误消息),否则选项 1 是最好的。

    【讨论】:

    • 感谢您的更新,但如何在请求中跳过或禁用此标头?我是这方面的小伙伴,经常一些简单的事情让我陷入困境(
    • 这是一个请求头。无论如何它都不会出现在响应中。
    • 对不起。我在最初的问题中打错了字。当然是请求头。我怎么能跳过它?
    • 标题不是问题。使用 XMLHttpRequest 对象是个问题。标题只是告诉我你正在使用它。
    • 如何避免使用它?在 cluint 端有替代方案吗?
    猜你喜欢
    • 2010-12-12
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2017-08-15
    相关资源
    最近更新 更多