【发布时间】:2019-02-25 06:57:44
【问题描述】:
我正在尝试更好地理解 COR,因为我们的网络应用程序的几个用户都在抱怨,因为他们升级到 iOS 12 后收到了预检错误。
来自网络检查器的错误
[Error] Preflight response is not successful
[Error] Fetch API cannot load https://www.api.com due to access control checks.
[Error] Failed to load resource: Preflight response is not successful (v4, line 0)
客户端应用是带有 Apollo 的 React 应用。它使用 Apache HTTPD 和 Express JS 通过 HTTPS 调用服务器。
在所有其他浏览器上一切正常,这与 iOS 12 隔离。
奇怪的是,当我查看 HTTPD 访问日志时,我看不到任何预检调用。当我尝试直接访问服务器(在 iOS 12 上)时,我在日志中看到了预检 OPTIONS 请求和 POST。但是当通过 Web 应用调用服务器时,COR 预检失败。
在快递应用中,我也注销了所有请求,也没有出现。
在 HTTPD 中我有
的设置Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS
在快递我也有同样的事情。
有什么想法吗?!
【问题讨论】:
-
发生故障时浏览器在 devtools 控制台中报告的确切错误是什么?
-
@sideshowbarker 我将它添加到问题中。欢呼
-
好的,接下来您可能想要做的是使用 Web 检查器检查请求和响应。打开网络选项卡并重新加载,单击
https://www.api.comOPTIONS 请求。查看 Access-Control-Request-Method 和 Access-Control-Request-Headers 请求标头的确切值是什么,然后检查响应以查看 HTTP 响应代码是什么,以及 Access- Control-Allow-Methods 和 Access-Control-Allow-Headers 响应标头,以及它们与请求标头的比较。 -
在请求的前端代码中,您是否设置了 Accept、Accept-Language 或 Content-Language 标头?
-
这看起来更像是 iOS 的一个错误 - 我已经用他们创建了一个错误 bugreport.apple.com/web/?problemID=44621834
标签: ios express cors apollo ios12