【发布时间】:2020-10-28 13:15:24
【问题描述】:
情况:
每当您在 Safari https://nvm.samengroen.com/plan/basic/497 中访问此 URL 并在控制台中查看有关 XMLHttpRequest 和 access control checks 的错误。
奇怪的是,当我打开开发者工具并重新加载页面时,它工作正常。
有人可以澄清为什么它在打开开发者工具的情况下工作。以及可能导致此问题的原因。
信息:
这个项目由一个Angular 前端(nvm.samengroen.com) 和一个API-Platform Symfony 后端(broker-api.samengroen.com) 组成>。它们都在同一个通配符 SSL 证书上,我发现这可能是答案,但登录并查看从 API 获取数据的其他页面没有任何问题。
我们也在.env文件中试过这个,没有任何结果:
###> nelmio/cors-bundle ###
CORS_ALLOW_ORIGIN=^https?://.*?$
###< nelmio/cors-bundle ###
到目前为止我的发现:
我一直在谷歌上搜索解决方案,但找不到明确的答案。
谷歌告诉我这可能是因为
- 支持 HTTP/2 的浏览器
- 多域证书(可能是通配符证书)
- 在某些时候,apache 想要重新协商 http/2 的客户端实现中不支持的 TLS
Safari 10.1: XMLHttpRequest with query parameters cannot load due to access control checks
您的服务器需要回复 OPTIONS http 方法。不仅是 GET/POST/PUT/DELETE。 Safari 默默地请求这个隐藏在后台。您可以通过对连接的 MITM 攻击来发现这一点
编辑#1
所以在翻遍服务器日志后,我发现了以下内容:
AH02032: Hostname nvm.samengroen.com provided via SNI and hostname broker-api.samengroen.com provided via HTTP have no compatible SSL setup, referer: https://nvm.samengroen.com/plan/basic/497
似乎它确实与 SSL 证书和可能的通配符有关。
【问题讨论】:
-
无法在 Firefox/chrome 中以注销状态重现您的错误消息。 (ff 带有被阻止的谷歌标签管理器)
-
不对,错误只出现在
safari。 -
因为您的 cors_allow_origin 正则表达式根本没有限制,请改用
*。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 表示,如果您指定*以外的任何内容,则可能需要添加更多标题。您还检查过手动定制的OPTIONS请求以查看返回的标头吗? -
是的,我们之前有
*,但那没有用。我觉得问起来很愚蠢,但是你怎么能手动发出OPTIONS请求呢? -
你可以使用curl,虽然链接的脚本应该修改很多,更多的资源:@987654326@ 通常预检请求失败(甚至可能不会出现在网络中控制台)
标签: symfony ssl safari xmlhttprequest api-platform.com