服务部分HTTP响应
我想使用字节范围请求恢复文件下载 问题是,我现有的下载操作是对POST方法的响应,我希望保持这种方式 但从我早期的测试来看,当用户尝试恢复时,Chrome会将中断的服务部分HTTP响应,http,httprequest,http-1.1,Http,Httprequest,Http 1.1,我想使用字节范围请求恢复文件下载 问题是,我现有的下载操作是对POST方法的响应,我希望保持这种方式 但从我早期的测试来看,当用户尝试恢复时,Chrome会将中断的POST文件下载请求转换为GET请求,从而导致下载的恢复失败 我错过什么了吗 这是否与只允许恢复GET请求的HTTP规范有关 或者仅仅是Chrome(可能还有其他浏览器)中的一个设计缺陷让它忘记了原来使用的HTTP方法 更新: 以下是请求/响应数据: 最初的员额要求: POST http://localhost:35547/Downl
POST
文件下载请求转换为GET
请求,从而导致下载的恢复失败
GET
请求的HTTP规范有关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
(对上述请求的)初步答复:
中断后,这是浏览器在恢复时执行的请求(请注意使用的GET
方法):
(来自安全相关cookie的一些数据已被缩短和更改)
我错过什么了吗
这取决于你如何分析谷歌浏览器的行为。理想的方法是使用任何代理或使用数据包嗅探器(如Wireshark)查看chrome在后续请求中使用的请求方法
这与只允许GET的HTTP规范有关吗
需要恢复的请求
到目前为止,规范中并没有提到HTTP协议,只有GET请求才能恢复
或者这仅仅是Chrome(或者其他浏览器)中的一个设计缺陷
那么)这会让它忘记原来使用的HTTP方法吗
是的,这是谷歌浏览器的缺陷。确保您在最新版本的Google chrome和所有更新补丁上检查它。也可以在其他浏览器上查看它
有关HTTP协议的更多信息,请参阅。
请参阅以下请求,以提供部分响应:
编辑
有关HTTP信息的更多更新信息,请参阅:-
我使用了Fiddler,以便看到它在尝试恢复时使用了GET请求。不确定它是否总是这样做,或者我的服务器响应(标题等)上是否有导致此行为的内容。但我会进一步调查,如果它不起作用,我可能会找到一个解决办法。谢谢你的回答。:)RFC 2616已在两年前被淘汰。@JulianReschke,答案现在可以了吗?如果您可以发布出现的确切请求/响应,这将非常有用。@JulianReschke我现在添加了这些,作为问题的更新。:)除了使用HTTP方法外,我也没有看到它使用范围头,这也很奇怪……用户如何尝试恢复下载?另外,除非有验证器(Last Modified或Etag),否则我不希望客户尝试恢复,甚至可能接受范围。@JulianReschke是的。它在恢复时没有使用字节范围标头的原因是缺少
Accept Ranges:bytes
标头。我还添加了一个Last Modified:Fri,1999年12月31日23:01:00 GMT
头,它现在发送一个字节范围头。但是,它仍然在恢复时使用GET请求。为了测试这一点,我使用Chrome的开发工具中的offline
复选框中断下载。然后,我单击Chrome内置下载管理器中失败下载的resume
选项(在我取消选中offline
复选框之后)。
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 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=.............