使用Javascript但不使用Python / PHP的CORS错误
我正在编写一个小脚本来访问外部API以进行工作。 我最初用Python做过这一切,一切正常。
然后我被要求尝试在Javascript中执行此操作。 现在,我真的不是程序员,但我知道(或者相信)Javascript主要用于客户端,而PHP或Python实际上是用于服务器端操作。 当我用Python编写脚本时,我没有遇到任何问题,但在Javascript中我得到了一个
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
错误。 从我在这里读到的CORS和Stack上的类似问题来看,这是有道理的,但我真的不明白为什么我在Python或PHP中没有得到类似的错误……
我对此很新,所以我可能错过了很多东西,但我真的很感激任何人都能给我的见解。 如果我遗漏了任何重要信息,请告诉我。
来自Mozilla的文档 :
出于安全原因,浏览器会限制从脚本中发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch遵循同源策略。 因此,使用XMLHttpRequest或Fetch的Web应用程序只能向其自己的域发出HTTP请求。
由于浏览器中的Javascript使用XMLHttpRequest
和fetch
来发出HTTP请求,因此它们受CORS策略实施的约束。
有关CORS原因的更多信息:
CORS旨在允许资源主机(通过HTTP提供其数据的任何服务)限制哪些网站可以访问该数据。
示例:您正在托管显示流量数据的网站,并且您正在使用网站上的AJAX请求。 如果没有SOP和CORS,任何其他网站都可以通过简单的AJAXing到您的终端来显示您的流量数据; 任何人都可以轻松“窃取”您的数据,从而“窃取”您的用户和您的资金。
您正在使用的外部API可能会故意实施CORS策略。 例如,如果API需要应用程序级密钥进行身份validation,则CORS策略将阻止在公共环境(即浏览器)中使用该密钥。 或者,API可能包含CORS可接受域名列表,但不包括您当前使用的域。
这只是几个例子; API可能有多种原因来实现CORS头。