【问题标题】:How to check a domain has enable CORS or not如何检查域是否启用了 CORS
【发布时间】:2017-12-24 12:42:22
【问题描述】:

我尝试访问此 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,我该怎么做?

【问题讨论】:

    标签: cors


    【解决方案1】:

    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 登录流程”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 发出请求的文档,那么这些文档会给出如何从前端 JavaScript 进行请求的示例/详细信息。

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

    【讨论】:

    • 感谢您的回答。但我并不了解所有这些。我不知道“在服务器端发出请求”和“从前端 JavaScript 发出请求”是什么意思。我用angularjs的“$http”发送请求,这是什么?
    • 使用 angularjs "$http" 发送请求是“从前端 JavaScript 发出请求”的一种。另一种是“在服务器端发出请求”,例如,如果您在自己的服务器上运行一些基于 Java 或 Python 或任何框架,或者在服务器上运行 Node.js,也就是说,在后端,然后您使用来自该后端代码的一些 http 库而不是从您的角度“$http”调用发出请求。
    • stackoverflow.com/questions/32486949/… 不确定 -i 在 curl 中的作用?根据 curl 手册,它说明了您提到的内容。根据我分享的链接,它看起来像是在 CORS 中发出预检请求。请帮助我了解它的作用。
    • 当我实现 django-cors-headers 但前端开发人员在访问 Django 项目的媒体/静态文件时仍然遇到问题,这被证明是解决方案。谢谢@sideshowbarker
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多