gpt4 book ai didi

javascript - Chrome 会发出两次请求的原因

转载 作者:行者123 更新时间:2023-12-01 15:18:15 25 4
gpt4 key购买 nike

我的 nginx 服务器日志中有以下内容(为了示例而更改了 IP 和一些路径):

101.101.101.101 - - [15/Apr/2020:14:46:03 +0000] "GET /item/download-file/ready/5e971e290107e HTTP/2.0" 200 142940 "https://example.com/referer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"

101.101.101.101 - - [15/Apr/2020:14:46:04 +0000] "GET /item/download-file/ready/5e971e290107e HTTP/1.1" 200 5 "https://example.com/referer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"



问题是访问的链接是针对非幂等资源的(只能访问一次),因此客户端会遇到错误。

这些链接用于文件下载,可通过涉及 window.location.href = "..." 的 JavaScript 片段访问。 .响应服务器 header 包括 Content-Disposition: attachment .

在什么情况下,Chrome 会先发送两个涉及 HTTP/2.0 的请求,稍后再发送 HTTP/1.1?也许有可能导致这种情况的扩展?

请注意,我无法在我拥有的任何浏览器中复制它。

更新 2:

我已经确定它不仅仅发生在 Chrome 中。 Edge 44 也出现在日志中。此外,对这个问题的其他实例的第二个请求没有切换到 HTTP/1.1。相反,它们是 HTTP/2.0。

更新:

我被要求提供典型请求的响应 header :
cache-control: no-store, no-cache, must-revalidate
content-disposition: attachment; filename=sources.zip
content-length: 8597357
content-transfer-encoding: Binary
content-type: application/octet-stream
date: Wed, 15 Apr 2020 17:23:44 GMT
expires: Thu, 19 Nov 1981 08:52:00 GMT
pragma: no-cache
server: nginx/1.16.1
status: 200

最佳答案

我不知道你为什么会收到多个请求(可能只是 HTTP 2/1.1 协商),但真正的答案是你应该使 GET 请求安全且幂等,并要求客户端发送单独的 DELETE 请求。我知道这可能不是你想要的答案。
如果您有一个不安全/非幂等的 GET 请求,那么如果客户端发出多个请求(它应该可以自由地做)或者诸如索引“蜘蛛”或预取缓存之类的东西曾经击中您的站点和决定访问它可以找到的每个 GET 端点。见 https://www.rfc-editor.org/rfc/rfc7231#section-8.1.3有关哪些 HTTP 方法应该和不应该是安全和幂等的详细信息。

关于javascript - Chrome 会发出两次请求的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61235322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com