【问题标题】:How/where to enable CORS(cross origin resource sharing)?如何/在哪里启用 CORS(跨源资源共享)?
【发布时间】:2016-11-26 03:42:49
【问题描述】:

我无法使用 XMLHttpRequest() 从我的 javascript 文件中访问跨域资源。 我知道有一些类似的问题,我经历了其中一些,但我对一些细节有点困惑。 我会提到我的确切设置和我的具体疑问。

设置:

我的 HTML 和 JS 文件位于本地 LAN 网络中的 ubuntu 机器上运行的 apache 服务器上。该应用程序基本上是 video.js 的 hls 插件。 在同一本地 LAN 中的 Windows PC 上,我打开 hls 播放器的 index.html 文件。只要我选择 linux 机器上存在的视频内容,它就可以按预期工作,但是在给它一个外部内容(例如http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8)时,它会失败并给出错误:

XMLHttpRequest 无法加载 http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://172.20.33.49' 因此不允许访问。

(这里172.20.33.49是linux机器的IP)

所以我的查询是:

  1. Access-Control-Allow-Origin 标头应在哪个服务器上设置为适当的值(为简单起见,我们说“*”)以使其工作:在我的本地 linux 服务器上还是托管外部内容的服务器,或两者兼有?

  2. 是否需要在浏览器/javascript 或 HTML 代码中进行任何设置/配置/代码更改才能使其正常工作?

  3. 作为一般查询,客户端可以/应该做些什么才能使 CORS 工作,还是纯粹是服务器要求/配置?
  4. 'Access-Control-Allow-Origin' 在 HTTP 响应中是强制性的吗?如果不是,那么它的缺失意味着什么 - 这是否意味着只能访问来自同一域的资源,还是意味着所有域都可以访问(相当于 *)?客户端有什么方法可以强制服务器添加此标头?

【问题讨论】:

    标签: javascript cors cross-domain


    【解决方案1】:

    应该在哪个服务器上设置 Access-Control-Allow-Origin 标头

    托管您要使用 XHR 阅读的内容的服务器。错误消息确实说明了这一点,它告诉您所请求资源的 URL,然后说该资源上不存在标头。

    我需要在浏览器/javascript 或 HTML 代码中进行任何设置/配置/代码更改才能使其正常工作吗?

    没有。浏览器透明地处理 CORS。

    作为一般查询,客户端可以/应该做什么才能使 CORS 正常工作,还是纯粹是服务器要求/配置?

    客户端必须支持 CORS。所有现代浏览器都可以。

    “Access-Control-Allow-Origin”在 HTTP 响应中是强制性的吗?

    没有

    如果不是,那么它的缺失是什么意思 - 这是否意味着只能访问来自同一域的资源,还是意味着所有域都可以访问(相当于 *)?

    如果服务器未指定 Access-Control-Allow-Origin,则它不会授予任何其他源读取其数据的权限。

    客户端有什么方法可以强制服务器添加此标头?

    否(虽然浏览器扩展可以拦截响应并添加标头,但这对于测试目的很有用)。

    【讨论】:

    • 感谢您的详细回复。因此,如果我理解正确,在这种特定情况下,我无法播放外部内容(除了安装会拦截和修改响应的浏览器插件),因为我无法控制外部服务器?稍微不同的是,这是大多数服务器不允许从其他域访问的常见/典型行为。我的意思是这似乎会严重限制对任何 javascript 代码的访问?
    • 是的,这很正常。严格限制对 JavaScript 的访问是一件好事。您不希望您访问过的任何网站都能够像您一样向 Gmail 发出请求并阅读您的电子邮件?还是您的网上银行?跨源请求要求数据的提供者主动表示它是安全且可取的。
    猜你喜欢
    • 2013-01-12
    • 2016-02-06
    • 2016-03-03
    • 2016-05-01
    • 2014-01-18
    • 2014-10-08
    • 2014-03-20
    • 2018-05-04
    相关资源
    最近更新 更多