我无法使用 XMLHttpRequest()从 javascript 文件访问跨域资源。 我知道有几个类似的问题,我经历了其中的一些问题,但我对一些细节有点混淆。 我会提到我的确切设置和我的具体疑虑。
设定:
我在我的本地LAN网络中存在的ubuntu机器上运行的apache服务器上有我的HTML和JS文件。该应用程序是video.js的基本hls插件。 从我在同一局域网中的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。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://172.20.33.49'因此不允许访问。
(这里172.20.33.49是linux机器的IP)
所以我的疑问是:
Access-Control-Allow-Origin 标头应设置在哪个服务器上的适当值(为简单起见,请说' *')为此工作:在我的本地Linux服务器或托管外部内容的服务器上,或两者兼而有之?
我是否需要在浏览器/ javascript或HTML代码中更改设置/配置/代码?
答案 0 :(得分:2)
应在哪个服务器上设置Access-Control-Allow-Origin标头
托管您要使用XHR阅读的内容的服务器。错误消息确实拼写出来,它告诉您要求的资源的URL,然后说该资源上没有标题。
我是否需要在浏览器/ javascript或HTML代码中更改设置/配置/代码才能实现此目的?
没有。浏览器透明地处理CORS。
作为一般性查询,客户端是否可以/应该为CORS工作做什么,或者纯粹是服务器要求/配置?
客户端必须支持CORS。所有现代浏览器都可以。
' Access-Control-Allow-Origin'在HTTP响应中是强制性的吗?
没有
如果没有,那么它的缺失是什么意思 - 它是否意味着只能访问来自同一域的资源,或者它是否意味着所有域都可访问(等同于*)?
如果服务器没有指定Access-Control-Allow-Origin,那么它不会授予任何其他来源读取其数据的权限。
客户端是否可以强制服务器添加此标头?
否(虽然浏览器扩展可以拦截响应并添加标头,但这对于测试目的非常有用)。