我想使用字节范围请求使文件下载可恢复。
问题是我现有的下载操作是在POST方法上响应,我想保持这种方式。
但是,从我早期的测试中可以看出,当用户尝试恢复时,Chrome会将POST
文件下载请求中断为GET
个请求,因此恢复下载失败。
GET
请求恢复?更新
以下是请求/响应数据:
初始POST请求:
POST http://localhost:35547/Download?Guid=396b4697-e275-4396-818c-548bf8c0a281 HTTP/1.1
Host: localhost:35547
Connection: keep-alive
Content-Length: 0
Cache-Control: max-age=0
Origin: http://localhost:35547
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:35547/File/396b4697-e275-4396-818c-548bf8c0a281
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: __RequestVerificationToken=LuPgM05MHrsuyskgfhsrHVUs; ASP.NET_SessionId=gfiulghfuygisghkf; .ASPXAUTH=FGDJHGDHSDFB15AFDE6371CGJHDFGFBHD; fileDownload=true
初步回复(针对上述请求):
HTTP/1.1 200 OK
Cache-Control: private, s-maxage=0
Content-Type: application/zip
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 5.2
Content-Disposition: attachment; filename="FILE-396b4697e2754396818c548bf8c0a281.zip"
X-AspNet-Version: 4.0.30319
Set-Cookie: fileDownload=true; path=/
X-Powered-By: ASP.NET
Date: Wed, 09 Nov 2016 11:13:50 GMT
Content-Length: 1885473
PK.......... ZIP file data .............................................
中断后,这是浏览器恢复时的请求(注意使用的GET
方法):
GET http://localhost:35547/Download?Guid=396b4697-e275-4396-818c-548bf8c0a281 HTTP/1.1
Host: localhost:35547
Connection: keep-alive
Referer: http://localhost:35547/File/396b4697-e275-4396-818c-548bf8c0a281
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
Cookie: __RequestVerificationToken=.............
(安全相关cookie的一些数据已被缩短和更改)
答案 0 :(得分:1)
我错过了什么吗?
这取决于你如何分析谷歌浏览器的行为。理想的方法是使用任何代理或使用数据包嗅探器(如Wireshark)来查看chrome在后续请求中使用的请求方法。
这是否与仅允许GET的HTTP规范有关 要求恢复?
截至目前,HTTP协议的规范中没有提及只能恢复GET请求。
或者它只是Chrome中的一个设计缺陷(可能还有其他浏览器) 那么这会让它忘记使用的原始HTTP方法吗?
是的,这是Google Chrome的缺陷。请确保使用所有更新修补程序在最新版本的Google Chrome上进行检查。另请在其他浏览器上查看。
有关HTTP协议的更多信息,请参阅https://www.ietf.org/rfc/rfc2616.txt。 请参阅以下请求,以获取部分响应:https://en.wikipedia.org/wiki/Byte_serving
修改强> 有关HTTP信息的更多信息,请参阅: - https://tools.ietf.org/html/rfc7230