提供部分HTTP响应

时间:2016-11-09 09:48:42

标签: http httprequest http-1.1

我想使用字节范围请求使文件下载可恢复。

问题是我现有的下载操作是在POST方法上响应,我想保持这种方式。

但是,从我早期的测试中可以看出,当用户尝试恢复时,Chrome会将POST文件下载请求中断为GET个请求,因此恢复下载失败。

  1. 我错过了什么吗?
  2. 这是否与HTTP规范相关,只允许GET请求恢复?
  3. 或者它只是Chrome中的一个设计缺陷(也可能是其他浏览器),这会让它忘记使用的原始HTTP方法?
  4. 更新

    以下是请求/响应数据:

    初始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的一些数据已被缩短和更改)

1 个答案:

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