我尝试访问此API click here for more info
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,我该怎么做?
答案 0 :(得分:9)
CORS协议的核心部分是浏览器在处理从前端JavaScript代码发起的跨源请求时发送的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登录流程”的文档而言并不令人惊讶{{3 }}:
Web应用程序的LINE登录过程(Web登录)基于OAuth 2.0授权代码授予流程。您的应用程序必须能够在服务器端发出请求并从LINE平台接收数据。
也就是说,文档特别提到需要从“服务器端”发出请求,而这些文档中没有其他任何地方提到支持从运行浏览器的前端JavaScript代码发出的请求,也没有任何代码示例如何使用JavaScript发出请求。
通常,如果特定服务/ API启用了CORS并提供了有关如何向该服务/ API发出请求的文档,那么这些文档将提供有关如何从前端JavaScript执行此操作的示例/详细信息。
换句话说,如果特定服务/ API的文档没有提供如何从浏览器中运行的前端JavaScript向它发出请求的示例/详细信息,则它可能不支持CORS。