我尝试访问此 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 协议的核心部分是浏览器在处理前端代码发起的跨域请求时发送的
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。
检查您的请求标头,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