2017-06-14 71 views
1

我有一個錯誤,有點在我頭上調試。 它從HTTP發生得到Angular2,看起來像這樣:這是一個跨域或跨協議請求?

constructor(private http: Http) {} 

... 

this.http.get('someApi.abc.com/stuff?params`) 

哪個失敗,看起來像這樣的錯誤:

的XMLHttpRequest無法加載http://someApi.abc.com/stuff?params「到 」 http://elsewhere.abc.com/「已被封鎖按CORS政策:否 「訪問控制 - 允許來源」標題出現在請求的 資源中。原因'http://local.abc.com'因此不允許 訪問。

我認爲有2個問題:我不明白的重定向(可能需要聯繫someApi所有者?)和CORS問題。

我的理解是,域名是:abc.com 且協議爲:http 所以應該會有不涉及CORS廢話。我顯然錯了,但不明白爲什麼:(

+0

您必須提供您r app backend – alehn96

回答

1

的同源策略是基於域需要精確匹配。local.abc.com不完全匹配someApi.abc.com。那麼http://local.abc.comhttp://someApi.abc.com是兩個完全不同的起源。因此,如果您的前端JavaScript代碼在源http://local.abc.com處運行,並且它向http://someApi.abc.com發出請求,那麼這是一個跨源請求,因此CORS會涉及;具體而言,瀏覽器不會允許您的前端JavaScript代碼訪問響應如果http://someApi.abc.com網站在其響應中未發送Access-Control-Allow-Origin響應標頭,則從這樣的請求中刪除。

+0

我明白了。我沒有意識到需要匹配的'someApi'。它必須是跨源的,並且在API上返回響應中的「Access-Control-Allow-Origin」標頭。我需要做什麼與我的結束頭文件,以確保這將工作? – user2759883

+0

就CORS協議而言,您不必對前端代碼的客戶端頭進行任何操作。從客戶端發送特殊CORS頭文件的唯一情況是訪問控制請求頭和訪問控制請求方法請求頭 - 但這些頭文件是由瀏覽器自動發送的,並且僅適用於CORS印前檢查OPTIONS請求瀏覽器自己做。 Origin請求頭也是CORS協議的一部分,並且始終爲來自前端JS的跨源請求發送& - 但這又是一個請求標頭瀏覽器自動添加他們自己的 – sideshowbarker