2016-07-22 115 views
1

我無法從我的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)

所以我的疑問是:

  1. 在哪臺服務器應該在訪問控制允許來源頭是設置爲適當的值(爲簡單起見,可以說'*')以使其工作:在我的本地linux服務器或託管外部內容的服務器上,還是兩者兼有?

  2. 是否有任何設置/配置/代碼的變化,我需要在我的瀏覽器/ JavaScript或HTML代碼做這個工作?

  3. 作爲一般查詢,客戶端是否可以/應該爲CORS工作或者純粹是服務器需求/配置?
  4. '訪問控制 - 允許來源'在HTTP響應中是強制性的嗎?如果不是,那麼它的缺席意味着什麼 - 這是否意味着只有來自同一個域的資源可以訪問,或者是否意味着所有的域都可訪問(相當於*)?有任何客戶端可以強制服務器添加此標頭的方式嗎?

回答

2

On which server should the Access-Control-Allow-Origin header be set

託管要與XHR閱讀內容的服務器。該錯誤消息確實說明了這一點,它會告訴您正在請求的資源的URL,然後表示該資源上不存在標題。

Is there any setting/configuration/code change which I need to do in my browser/javascript or HTML code for this to work?

否瀏覽器透明地處理CORS。

As a general query, is there anything the client can/should do for CORS to work or is it purely a server requirement/configuration?

客戶端必須支持CORS。所有現代瀏覽器都可以。

Is the 'Access-Control-Allow-Origin' mandatory in HTTP responses?

沒有

If not then what does its absence mean - Does it mean only resources from same domain can be accessed or does it mean all domains are accessible(equivalent to *) ?

如果服務器沒有指定訪問控制允許來源則它不准許任何其他來源讀取其數據。否(儘管瀏覽器擴展可攔截響應並添加標頭,這對於測試目的可能很有用)。

+0

感謝您的詳細回覆。 因此,如果我理解正確,在這種特定情況下,我無法播放外部內容(除了安裝攔截和修改響應的瀏覽器插件外),因爲我無法控制外部服務器? 稍有不同的是,這是大多數服務器不允許從其他域訪問的常見/典型行爲。我的意思是這似乎嚴重限制訪問任何JavaScript代碼? –

+0

是的,這是正常的。嚴格限制訪問JavaScript是一件好事。您不希望您訪問過的任何網站能夠向您發送Gmail請求並閱讀您的電子郵件?或者你的網上銀行?跨原產地請求要求數據供應商主動表示它是安全和可取的。 – Quentin