在 Safari 10.1
上尝试在包含查询参数(例如 https://example.com/api?v=1 )的 URL 上发出 CORS 请求
时,Safari 会显示
XMLHttpRequest cannot load due to access control checks
Chrome/Firefox 工作正常。
对于来自没有 ?v=1
的页面的请求,Safari 也可以正常工作。
我尝试更改服务器响应 header
Access-Control-Allow-Origin: https://example.com
至
Access-Control-Allow-Origin: https://example.com/api?v=1
但这会破坏 Chrome。
有什么建议吗?
最佳答案
您遇到了 CORS 问题。
一些可能的原因:
- header
Access-Control-Allow-Origin
只能在服务器端设置,不能在客户端脚本中设置。 (您没有明确表示您这样做是正确的。) - 您确定协议(protocol)(
http
与https
甚至file
)完全相同吗? - 如果您可能有多个子域,则需要使用诸如
"^http(s)?://(.+\.)?test\.com$ 之类的内容设置您的配置(例如 Apache)
.
^
标记行的开头,以防止此 url 前面出现任何内容。您需要一个协议(protocol)并允许两者都在这里。子域是可选的。$
标记行尾(您不需要设置子页面,因为 origin 仅基于主机)。 - 如上所述here将
Access-Control-Allow-Headers: Origin
添加到服务器配置中也可能是一个解决方案。尝试将我的 Safari 发出的实际请求与 Firefox 或 Chrome 完成的成功请求进行比较,以发现可能丢失的 header (也可以将它们与您的服务器配置进行比较)。
关于javascript - Safari 10.1 : XMLHttpRequest with query parameters cannot load due to access control checks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43517254/