使用Google Chrome或Firefox,如果我尝试加载以下HTML:
<script crossorigin='anonymous' src='https://stackoverflow.com/foo.js'></script>
Run Code Online (Sandbox Code Playgroud)
我得到这样的CORS错误:
从' https://stackoverflow.com ' 访问' https://stackoverflow.com/foo.js '中的脚本已被CORS策略阻止:没有'Access-Control-Allow-Origin'标题出现在要求的资源......
但是,没有该crossorigin='anonymous'
属性的相同标记工作正常(当然会生成404错误,因为foo.js不存在).
这是令人惊讶的,因为anonymous
它只是为了防止发送任何凭据,并且脚本标签不应该要求CORS.造成这种情况的原因是什么,我该怎么办?
crossorigin
属性只有两个可能的值:anonymous
或use-credentials
.anonymous
包括空值在内的任何值都将被翻译为anonymous
.
所以这三个标签具有相同的含义:
<script src="https://stackoverflow.com/foo.js" crossorigin="anonymous">
<script src="https://stackoverflow.com/foo.js" crossorigin="">
<script src="https://stackoverflow.com/foo.js" crossorigin="IamCrazy">
Run Code Online (Sandbox Code Playgroud)
但有趣的是,如果跳过属性,则完全禁用 CORS行为crossorigin
.例如:
<script src="https://stackoverflow.com/foo.js">
Run Code Online (Sandbox Code Playgroud)
此标记将运行脚本而不进行任何与CORS相关的检查.实际上,没有crossorigin
属性使浏览器Origin
完全跳过HTTP头.
无论你crossorigin
是,anonymous
或者use-credentials
,请求Origin
仍然必须匹配响应Access-Control-Allow-Origin
.否则没有运气 - 脚本永远不会被解雇.
来源:Mozilla Developer Network上的HTTP访问控制(CORS)
这是一个有点旧的线程,但这是我最近碰巧遇到的事情。除了crossorigin之外,您还应该确保从中加载脚本的服务器(在您的示例中 - stackoverflow.com)返回特定的 header。
'Access-Control-Allow-Origin' '*';
Run Code Online (Sandbox Code Playgroud)
只有这样您才能收到有关脚本中发生的错误的完整信息。
当然,如果您确定允许使用哪个网址,则应该使用它而不是星号'*'。
归档时间: |
|
查看次数: |
26508 次 |
最近记录: |