服务部分HTTP响应

服务部分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方法的响应,我希望保持这种方式

但从我早期的测试来看,当用户尝试恢复时,Chrome会将中断的
POST
文件下载请求转换为
GET
请求,从而导致下载的恢复失败

  • 我错过什么了吗
  • 这是否与只允许恢复
    GET
    请求的HTTP规范有关
  • 或者仅仅是Chrome(可能还有其他浏览器)中的一个设计缺陷让它忘记了原来使用的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=.............