2011-11-18 62 views

回答

10

CORS適用於ajax請求或閃存通常不允許的閃存請求。例如,如果域x沒有跨域策略,並且您通過flash從其中檢索mp3文件進行播放,則flash將不會允許您讀取mp3文件的id3標籤。對於ajax,如果目標服務器沒有允許您的域發出請求的跨域策略,則無法發出請求。

跨域消息傳遞允許您與來自不同來源的文檔中的iframe進行通信。例如,如果您有YouTube視頻iframe,則可以將消息傳遞給該iframe以更改音量。通常情況下,由於iframe具有不同的來源,因此無法進行通信,因此您無法通過編程方式使用youtube iframe執行任何操作。

現在應該清楚使用這個或另一個的原因。當您想要與位於iframe中但不在同一個來源的應用進行通信時,CORS允許您從另一個來源請求數據,同時使用主窗口和iframe之間的消息傳遞。

一個實際的例子:

1.You都具有YouTube播放器的iframe。

2.您可以通過YouTube數據API(CORS,可能是JSONP,XHR或其他)來播放一些視頻。

3.You現在通過跨域消息的iframe開始播放任何你在步驟#請求視頻的2

1

首先,你應該知道,CORS由以下瀏覽器支持: Internet Explorer 8+,Firefox 3.5+,Safari 4+和Chrome。請注意,IE7和較早版本的Firefox和Safari根本不支持它。但事件IE8有一些限制 - 它不支持將證書和「預檢」請求發送到服務器。 另外,您的服務器應該準備好CORS請求,即服務器上的一些額外工作也應該執行。

使用JSONP或iFrame的跨域消息傳遞在瀏覽器支持方面更爲通用,有時甚至不需要額外的服務器端工作。

+0

對於舊版瀏覽器,您可以使用flash for CORS,例如:http://flxhr.flensed.com/。但是postMessage需要一個現代的瀏覽器。 – Esailija

+1

我們應該認定,與其他瀏覽器相比,Exporer 8/9中的CORS支持是非標準的。具體來說,jQuery支持標準的CORS,但不支持Explorer的等價物。儘管我被告知,Explorer 10確實支持標準的CORS。 – hippietrail