如何检查域是否启用了CORS

问题描述 投票:0回答:2

我尝试访问此 API 单击此处获取更多信息

POST https://api.line.me/v2/oauth/accessToken

但总是出现错误:

XMLHttpRequest cannot load https://api.line.me/v2/oauth/accessToken.
No 'Access-Control-Allow-Origin' header is present on the requested resource

现在我想确保该域(以及其他域,例如:facebook、twitter 等...)启用 CORS,我该怎么做?

cors
2个回答
28
投票

CORS 协议的核心部分是浏览器在处理前端代码发起的跨域请求时发送的

Origin
请求标头。因此,如果您想从非浏览器客户端/工具模拟基于浏览器的请求,则需要发送
Origin
标头:

curl -i -H 'Origin: http://sample.com' \
  'https://access.line.me/dialog/oauth/weblogin?response_type=code&client_id=12345&redirect_uri=https%3A%2F%2Fsample.com%2Fauth&state=123abc'

要检查响应,您还需要告诉客户端/工具向您显示响应标头。在上面的

curl
示例中,这就是
-i
选项的作用。

最后,要确定发送响应的服务器是否在响应中启用了 CORS,您需要在那里查找

Access-Control-Allow-Origin
响应标头。

对于

https://access.line.me
API,在响应中找不到
Access-Control-Allow-Origin
标头 — 考虑到其“Web 登录流程”的文档,这并不奇怪 https://developers.line.me/web -api/integrating-web-login-v2#steps_web_login:

Web 应用程序的 LINE 登录流程(Web 登录)基于 OAuth 2.0 授权码授予流程。您的应用程序必须能够在服务器端发出请求并从 LINE 平台接收数据。

也就是说,文档明确指出需要从“服务器端”发出请求,并且这些文档中没有任何其他地方提到支持从运行浏览器的前端 JavaScript 代码发出的请求,也没有任何代码示例说明如何使用 JavaScript 发出请求。

一般来说,如果某个特定服务/API 支持 CORS,并且具有有关如何向该服务/API 发出请求的文档,这些文档会提供如何从前端代码执行此操作的示例/详细信息。

换句话说,如果特定服务/API 的文档没有提供如何从浏览器中运行的前端 JavaScript 向其发出请求的示例/详细信息,则它可能不支持 CORS。


0
投票

检查您的请求标头,Sec-Fetch-Mode:

有效条目是:

enter code here

Sec-Fetch-Mode: cors
Sec-Fetch-Mode: navigate
Sec-Fetch-Mode: no-cors
Sec-Fetch-Mode: same-origin
Sec-Fetch-Mode: websocket
© www.soinside.com 2019 - 2024. All rights reserved.