Javascript 为什么CORS在从浏览器而不是终端发送时阻止我的Http请求

Javascript 为什么CORS在从浏览器而不是终端发送时阻止我的Http请求,javascript,networking,xmlhttprequest,cors,network-security,Javascript,Networking,Xmlhttprequest,Cors,Network Security,我对CORS提供的安全性有点困惑。下面是两个几乎相同的HTTP请求,一个工作,另一个不工作,一个是通过curl,另一个是浏览器中的javascript 终点站 $ curl https://www.google.com/ --> Returns a page 浏览器: // Open the console in the browser (or spin put localhost) const xhr = new XMLHttpRequest(); xhr.open("GET

我对CORS提供的安全性有点困惑。下面是两个几乎相同的HTTP请求,一个工作,另一个不工作,一个是通过curl,另一个是浏览器中的javascript

终点站

$ curl https://www.google.com/
--> Returns a page
浏览器:

// Open the console in the browser (or spin put localhost)
const xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.google.com");
xhr.send();
--> CORS Error
请重试:

  const xhr = new XMLHttpRequest();
  xhr.open("GET", "https://www.google.com");
  xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
  xhr.setRequestHeader("Access-Control-Allow-Methods", 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
  xhr.setRequestHeader("Access-Control-Allow-Headers", 'Origin,Authorization,Content-Type,X-Auth-Token');
  xhr.setRequestHeader("Access-Control-Allow-Credentials", 'true') 
  
  xhr.send();
--> CORS Error still
所以我猜google.com服务器设置为只接受来自google域的请求。但是当我从我的终端卷曲时,它不是google域的一部分,我得到了一个200的HTML响应,等等

那么,为什么服务器会响应我的终端而没有域,但当我在浏览器中使用javascript时却不响应?


谢谢^。^

CORS是一种安全功能,最终由您的浏览器实现。这就是为什么从终端进行卷曲时,您永远不会看到CORS错误。另见:

上面说:

跨源资源共享(CORS(en-US))是一种机制,它使用额外的HTTP头通知浏览器,让在一个源(域)上运行的web应用程序有权从另一个源的服务器访问选定的资源


CORS是浏览器提供的一项功能。 CORS是一种机制,旨在允许代表您发出请求,同时阻止rogue JS发出的某些请求,并且在您向以下对象发出HTTP请求时触发:

  • 另一个域(例如example.com上的站点调用api.com)
  • 另一个子域(例如example.com上的站点调用api.example.com)
  • 另一个端口(例如example.com上的站点调用example.com:3001)
  • 不同的协议(如呼叫时的站点)
  • 请查看随附的文章-

    “询问堆栈溢出问题应该是找到答案过程中的最后一步”使用我的搜索引擎快速搜索“CORS”,在第一个结果的第一段中给出了答案。