【发布时间】:2018-01-24 19:15:32
【问题描述】:
我正在尝试了解整个 CORS 政策的运作方式。为了解释我的困惑,让我举个例子:
$.get("https://www.google.com", function(response) { alert(response) });
上述请求将返回以下错误:
XMLHttpRequest 无法加载 https://www.google.com/。从“https://www.google.com/”重定向到“https://www.google.ca/?gfe_rd=cr&ei=TlqUWeGEH5HRXqW6utgI”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://fiddle.jshell.net' 因此不允许访问。
现在,为了让它发挥作用,谷歌必须将 https://fiddle.jshell.net 列入白名单。
现在,如果我要在一个安静的 API 页面上尝试同样的事情,那将是可行的。我的问题很简单,为什么?
为了分析这一点,我尝试点击一个 API 并分析它的响应:
回复:
HTTP/1.1 200
Date:
Wed, 16 Aug 2017 14:31:32 GMT
Content-Length: 266
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Server: Apigee Router
X-Content-Type-Options: nosniff
我得出结论,它一定是标题。具体来说,我相信它是这个标题:Content-Type: application/json; 但我不确定,我正在努力理解这一点,希望这里有人可以向我解释。
【问题讨论】:
-
我不知道“在一个安静的 API 页面上尝试同样的事情”是什么意思,但它的要点是,默认情况下,浏览器会阻止您的前端 JavaScript 代码访问来自跨平台的响应。 origin 使用 XHR 或来自 Javascript 库的 Fetch API 或 Ajax 方法请求您发送 - 除非正在发送请求的服务器表明它选择接收此类请求。服务器表明选择加入的方式是在其响应中发送 Access-Control-Allow-Origin 响应标头。
-
如果您想了解 CORS 协议的工作原理,developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 是最好的起点
标签: javascript api xmlhttprequest cors httprequest