【发布时间】: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)
所以我的查询是:
Access-Control-Allow-Origin 标头应在哪个服务器上设置为适当的值(为简单起见,我们说“*”)以使其工作:在我的本地 linux 服务器上还是托管外部内容的服务器,或两者兼有?
是否需要在浏览器/javascript 或 HTML 代码中进行任何设置/配置/代码更改才能使其正常工作?
- 作为一般查询,客户端可以/应该做些什么才能使 CORS 工作,还是纯粹是服务器要求/配置?
- 'Access-Control-Allow-Origin' 在 HTTP 响应中是强制性的吗?如果不是,那么它的缺失意味着什么 - 这是否意味着只能访问来自同一域的资源,还是意味着所有域都可以访问(相当于 *)?客户端有什么方法可以强制服务器添加此标头?
【问题讨论】:
标签: javascript cors cross-domain