[英]Safari seems to bundle identical requests when they are dispatched almost at the same time
我们应用程序中的上传过程是这样构建的,为了上传文件,您首先使用 GET 获取 url(这始终是相同的端点,没有任何参数),然后将文件本身放在 url 上. 我正在使用 angular 和 rxjs。 要上传多个文件,我使用 rxjs 的 forkJoin。
在 chrome 中它可以正常工作。 当我 select 4 个文件时,我看到 4 个 GET 和 4 个 PUT。 但在 safari 上,我只看到一个 GET 和 4 个 PUT。
经过一番调查,在我看来 safari 能够将 GET 捆绑在一起,缓存或重用 - 真的不知道。 但是代码没有注意到它。 我在每个请求之后放置日志,尽管只有一个 GET,但我看到 4 个日志具有相同的响应但文件名不同。
服务器也有可能正在做一些缓存。 但这并不能解释为什么在 safari 的网络流量中我只看到一个请求。 当我在 GET 的 header 中添加随机字符串时,所有工作都按预期和在 chrome 上工作。
我想了解它是如何以及为什么这样工作的 - 为什么 chaching 以及为什么 safari 只显示一个请求。
代码大致如下:
const requestQueue = files.map(file => this.makeGetRequest().pipe(
map(extractUrlAndAppendFileName(file.name))
));
return forkJoin(requestQueue).pipe(
defaultIfEmpty([]),
tap(c => console.log(c)),
)
响应标头
Response
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
Access-Control-Allow-Origin: http://localhost:4200
X-XSS-Protection: 1; mode=block
Set-Cookie: ...
Transfer-Encoding: Identity
Access-Control-Expose-Headers: X-Request-Id, X-Redirect-Location
Cache-Control: no-cache, private
Date: Sat, 05 Feb 2022 14:15:52 GMT
X-Content-Type-Options: nosniff
Vary: Origin
X-Frame-Options: SAMEORIGIN
X-Powered-By: PHP/7.4.27
Server: nginx/1.14.2
X-Request-Id: ...8db
X-RateLimit-Remaining: 872
X-RateLimit-Limit: 900
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.