2017-05-10 117 views
1

我想編寫一個攔截器來添加一個令牌給所有使用Angular的HTTP請求。我大致使用這裏給出的配方 - https://thinkster.io/interceptors角攔截器和CORS

所以代碼使用http模塊工廠和tokenInterceptor()函數。我可以成功地將一個標記作爲頭添加到請求中 - 但現在,當它通過攔截器時,它會被某種CORS阻塞機制阻止。在Chrome控制檯中出現此錯誤 -

XMLHttpRequest無法加載http://127.0.0.1:/。 對預檢請求的響應未通過訪問控制檢查:否 請求的 資源上存在「訪問控制 - 允許來源」標頭。 Origin'http://127.0.0.1:/'爲 因此不允許訪問。響應有HTTP狀態代碼403

我想在我的攔截器設置訪問控制允許起源頭象下面無濟於事:

config.headers['Access-Control-Allow-Origin'] = '*'; 

我在網上嘗試了一些建議,但沒有幫助。客戶端是否需要做任何事情來解決CORS相關問題 - 或者這是否是服務器方面的問題?

+0

要獲得更多幫助,您應該發佈您用來發出請求的前端JavaScript片段 - 包括它正在添加的請求標頭。您應該也可以發佈服務器端攔截器代碼的片段。當你說*我已經在網上嘗試了一些建議*時,你應該明確列出到目前爲止您嘗試過的內容。您可以使用https://stackoverflow.com/posts/43902712/edit編輯/更新您的問題以添加所有這些詳細信息。 – sideshowbarker

回答

3

多數民衆贊成響應請求的服務器需要發送Access-Control-Allow-Origin響應頭爲OPTIONS請求,不只是爲GETPOST請求。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

迴應預檢要求未通過訪問控制檢查

究其原因,瀏覽器給你的錯誤是:之前它會嘗試你正在努力使實際的請求從您的前端JS代碼中,瀏覽器會發送一個OPTIONS請求,以查看服務器是否以某種方式進行響應,指示它正在選擇接收您嘗試創建的請求。

所以,你的服務器端代碼需要增加處理的OPTIONS請求與響應Access-Control-Allow-OriginAccess-Control-Allow-Headers & Access-Control-Allow-Methods

做什麼都需要在客戶端完成修復CORS相關問題 - 或者這是否都是服務器端問題?

在客戶端沒有什麼可以改變行爲或讓瀏覽器不發出錯誤。 CORS配置是所有服務器端問題。您的服務器必須處理OPTIONS

響應有HTTP狀態代碼403

這表明授權失敗。這可能只是因爲您的服務器未配置爲發送成功響應(200204OPTIONS請求 - 在這種情況下,您必須配置爲執行此操作(發送200204以及正確的Access-Control-Allow-*標題,並且不會響應正文) - 或者可能是因爲您嘗試發送需要授權並且授權失敗的請求。