Safari 是不是正确处理临时重定向 (307) 到不同的域?

Posted

技术标签:

【中文标题】Safari 是不是正确处理临时重定向 (307) 到不同的域?【英文标题】:Does safari handle temporary redirects (307) to a different domain correctly?Safari 是否正确处理临时重定向 (307) 到不同的域? 【发布时间】:2020-05-30 07:30:06 【问题描述】:

当我重定向到不同的域时,Safari 不提供发布表单数据。

根据 临时重定向 307 上的https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307,浏览器不应更改发布请求。

Chrome , firefox 保留帖子数据,无论给定域如何。所以他们按照上面的链接正确行事。

但是https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 状态

用户代理不能自动重定向请求,除非它 可以被用户确认

所以我什至不确定哪些浏览器在这里正确处理临时重定向。

无论如何,我可以让 Safari 在 307 重定向上不丢失其发布数据吗?

【问题讨论】:

我认为更重要的是这里使用的 HTTP 服务器 :) 有时这个技巧是在服务器端完成的......所以 nginx 或 Apache......? 【参考方案1】:

这很可能是 CORS 问题,307 点所在的服务器是否启用了跨域资源共享?例如Access-Control-Allow-Origin: * 在响应头中。

如果没有,请尝试在该服务器上启用 CORS 并进行测试。

如果这不起作用,那么也许看看你是如何发出初始 POST 请求的,你是在使用 xhr (XMLHttpRequest) 还是其他东西?如果您使用的是 xhr,请尝试通过 Fetch API 进行 POST 以查看是否有效。

有一个webkit bug 被标记为已修复,但它与您所遇到的非常相似。可能您仍然遇到同样的问题。

【讨论】:

我认为这不是 CORS 问题,因为表单不是由 javascript 发送的。这只是一个表格帖子。但可以肯定的是,我也尝试将 Access-Control-Allow-Origin: * 放在接收服务器上,但没有任何区别。现在我认为 safari 将重定向 307 作为 302 处理。正确处理 307 取决于浏览器的实现者

以上是关于Safari 是不是正确处理临时重定向 (307) 到不同的域?的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFront 响应 307 临时重定向

使用 curl 将文件上传到 FastAPI 端点 - 307 临时重定向

302 和 307 重定向有啥区别?

对动态短网址使用 301/303/307 重定向

http状态吗307,303,302的区别

http状态吗307,303,302的区别