我無法從我的javascript文件使用XMLHttpRequest()訪問跨域資源。 我知道有幾個類似的問題,我經歷了其中的一些問題,但對於某些細節我有點困惑。 我會提到我的確切設置和我的具體疑惑。如何/在哪裏啓用CORS(跨源資源共享)?
設置:
我有我的HTML和JS文件出現在我的本地局域網網絡中的Ubuntu的機器上運行的Apache服務器上。該應用程序基本上是hs插件video.js。 從我的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)
所以我的疑問是:
在哪臺服務器應該在訪問控制允許來源頭是設置爲適當的值(爲簡單起見,可以說'*')以使其工作:在我的本地linux服務器或託管外部內容的服務器上,還是兩者兼有?
是否有任何設置/配置/代碼的變化,我需要在我的瀏覽器/ JavaScript或HTML代碼做這個工作?
- 作爲一般查詢,客戶端是否可以/應該爲CORS工作或者純粹是服務器需求/配置?
- '訪問控制 - 允許來源'在HTTP響應中是強制性的嗎?如果不是,那麼它的缺席意味着什麼 - 這是否意味着只有來自同一個域的資源可以訪問,或者是否意味着所有的域都可訪問(相當於*)?有任何客戶端可以強制服務器添加此標頭的方式嗎?
感謝您的詳細回覆。 因此,如果我理解正確,在這種特定情況下,我無法播放外部內容(除了安裝攔截和修改響應的瀏覽器插件外),因爲我無法控制外部服務器? 稍有不同的是,這是大多數服務器不允許從其他域訪問的常見/典型行爲。我的意思是這似乎嚴重限制訪問任何JavaScript代碼? –
是的,這是正常的。嚴格限制訪問JavaScript是一件好事。您不希望您訪問過的任何網站能夠向您發送Gmail請求並閱讀您的電子郵件?或者你的網上銀行?跨原產地請求要求數據供應商主動表示它是安全和可取的。 – Quentin