同源策略:为什么 JS 代码不能向其域发出 HTTP 请求?
Same Origin Policy: Why can't JS code make an HTTP request to its domain?
例子
我有一个站点 http://example.com
。
本站使用第三方JS代码:<script src="http://third.party/script.js"></script>
http://third.party/script.js
包含以下代码:
console.log("self.origin", self.origin);
fetch("http://third.party/api");
当我打开 http://example.com
时,我在开发控制台中得到以下输出:
self.origin http://example.com
Access to fetch at 'http://third.party/api' from origin 'http://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
第三方脚本试图从第三方API加载数据,但失败了。
为什么失败了?
第三方脚本与API具有相同的域名(来源)。
同源策略应该允许吗?
来源是由 JavaScript 加载的网页的 URL 决定的,而不是由 JS 文件本身的 URL 决定的。
例子
我有一个站点 http://example.com
。
本站使用第三方JS代码:<script src="http://third.party/script.js"></script>
http://third.party/script.js
包含以下代码:
console.log("self.origin", self.origin);
fetch("http://third.party/api");
当我打开 http://example.com
时,我在开发控制台中得到以下输出:
self.origin http://example.com
Access to fetch at 'http://third.party/api' from origin 'http://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
第三方脚本试图从第三方API加载数据,但失败了。 为什么失败了?
第三方脚本与API具有相同的域名(来源)。 同源策略应该允许吗?
来源是由 JavaScript 加载的网页的 URL 决定的,而不是由 JS 文件本身的 URL 决定的。