在某些狀況下,同源策略就顯得太過嚴格了,下面是三種不嚴格的同源策略跨域
同源策略給那些使用多個子域的大站點帶來了一些問題,例如,來自home.example.com的文檔裏的腳本想要合法的讀取從developer.example.com載入的文檔的屬性,或者來自orders.example.com的腳本可能須要讀catalog.example.com上文檔的屬性。爲了支持這種類型的多域名站點,可使用Document對象的domain屬性。在默認狀況下,屬性domain存放的是載入文檔的服務器的主機名。能夠設置這一屬性,不過使用的字符串必須具備有效的域前綴或它自己。所以若是一個domain屬性的初始值是字符串「home.exaple.com」 ,就能夠把他設置爲字符串「example.com」,但不能設置爲「home.example」。另外。domain值中必須有一個點號,不能把它設置爲「com」或其餘頂級域名。瀏覽器
若是兩個窗口(或窗體)包含的腳本把domain設置爲相同的值,那麼這兩窗口就再也不受同源策略的約束,它們能夠相互讀取對方的屬性。例如,從order.example.com和catalog.example.com載入的文檔中的腳本能夠把它們的document.domain屬性設置爲「example.com」,這樣一來這些文檔就有了同源性,能夠互相讀取屬性。安全
跨域資源共享(Cross-Origin Resource Sharing,參見http://www.w3.org/TR/cors)。這個標準草案用新的「Origin:」請求頭和新的Access-Control-Allow-Origin響應頭來擴展http。它容許服務器用頭信息顯式的列出源,或使用通配符來匹配全部的源並容許由任意地址請求文件。相似Firefox和Safari的瀏覽器可使用這種新的頭信息來容許跨越http請求,這樣XMLHttpRequest就不會被同源策略限制了。服務器
跨文檔消息(cross-document messaging),容許來自一個文檔的腳本能夠傳遞文本消息到另外一個文檔裏的腳本,而無論腳本的來源是否不一樣。調用Window對象上的postMessage()方法,能夠異步傳遞消息事件(能夠用onmessage事件句處理程序函數來處理它)到窗口的文檔裏,一個文檔裏的腳本仍是不能調用在其餘文檔裏的方法和讀取屬性,但他們能夠用這種消息傳遞技術實現安全的通訊。cors