🎋 竹子日誌

為什麼前端打不到資料?

有一句聽到爛的話,「我 postman 都會通,為什麼你打不到?」。相信很多前端對於這件事已經習以為常,這就是傳說中的 CORS 問題。

平常在瀏覽器上有一個獨特的機制,就是當對象host與發出的host不一致時,瀏覽器就會檢查 headers 中的 access-control-allow-origin,如果對象並不是允許的 host,瀏覽器就會強制阻擋回應。這其實是一個安全的保護機制,以防瀏覽器有不安全的回應行為,防止跨站攻擊。

然而,如果網路基礎知識不足的情況,不知道這個保護機制,開了api 給前端請求,卻奇怪為什麼怎麼都不會通,那十之八九就是這個問題。所以要確定前端是否能夠正確取得回應除了看 response 之外,還要確認 headers 是否攜帶 access-control-allow-origin ,這樣才能正確判斷這件事。那基本上可以斷定,解決這件事要從後端解決,正確來說是從「伺服器」解決。

那這件事前端有沒有解?其實是有的。解法就是前端自己必須要起一個伺服器,負責 proxy 的工作,去代理所有本地請求,再轉傳出去請求後端回應資料,這樣就能繞過瀏覽器限制,因為這個條件下就是同域溝通了。但這樣其實架構就會有點複雜,同時要去管理伺服器和瀏覽器兩端的問題,這就會延伸更多的技術困難。

留言