開發與網路
CORS 跨來源資源共享是什麼?瀏覽器的門禁管制
CORS 跨來源資源共享是什麼?瀏覽器的門禁管制
你的網頁明明寫得好好的,一按下去卻整個卡死,主控台跳出一長串紅字,中間有 CORS 這四個字母。這是所有前後端分家的專案幾乎都會遇到的關卡。
它不是你的程式壞了,是瀏覽器在替使用者把關。搞懂規則,這一關就不會卡住你。
你將學到什麼
定義
瀏覽器的門禁規則,決定網頁可不可以呼叫另一個網域的 API。
白話比喻
門口有警衛,名單上沒有你的網域就不放行。
誰負責開門
由被呼叫的那台伺服器回應標頭決定,不是前端能自己解決的。
跟誰容易搞混
常被誤認成後端壞掉,其實請求根本沒送出去。
定義
CORS 的全名是 Cross-Origin Resource Sharing,中文叫跨來源資源共享。它是瀏覽器的門禁管制作法,決定一個網頁能不能去存取另一個來源的資源。
現代瀏覽器預設採用同源政策,也就是說,網頁原則上只能存取同一個來源的資源。要跨出去,得由對方伺服器明確點頭。
實際會發生什麼事
當你的網頁前端想去呼叫另一個網址的 API 後端時,如果對方伺服器沒有設定好允許跨網域存取,瀏覽器就會直接報錯,畫面卡死。
症狀很好認:主控台出現 CORS 錯誤訊息,而且請求根本送不出去。你去看後端日誌,通常會發現一行紀錄都沒有。
有設定跟沒設定差在哪
| 情境 | 瀏覽器怎麼做 | 結果 |
|---|---|---|
| 沒有設定 CORS | 判定不同來源,直接擋下 | 主控台出現錯誤,請求送不出去 |
| 有設定 CORS | 看到伺服器回應允許這個來源,放行請求 | 資料成功回來,畫面正常運作 |
伺服器要回的就是幾個標頭,告訴瀏覽器誰可以來、可以用哪些方法、可以帶哪些標頭。
Access-Control-Allow-Origin: https://a.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
為什麼要有這個規則
- 保護使用者,防止惡意網站偷偷拿你的身分去打別人的 API
- 控制權限,讓服務可以明確指定誰可以來存取
- 現代瀏覽器預設同源政策,跨來源是例外不是常態
- 在安全與開放之間維持平衡
實際用例
前後端分開部署時幾乎一定會遇到。做法上,開發階段可以先寬鬆設定讓自己走得動,上線前務必把允許的來源收緊到指定網域,不要留一個誰都能進的門。
另外記得放行預檢請求。瀏覽器在送出某些請求前,會先發一個詢問用的請求問伺服器能不能來,這一步沒放行,正式請求也走不到。
延伸學習
知識變現切割地圖(高清版下載及陪跑型教材)
《知識變現切割地圖》的完整陪跑版:地圖高清檔,加上五章 27 萬字的網頁版講義與200 張練習卡。從語感引流設計、互動與轉化、內容分層與產品路徑,到角色鏡像與心理設計、內容資源切割再利用,一層一層把「會做內容」變成「能賣內容」。每一節後面都接著可以直接動手填的練習卡。
NT$ 19,800
寫給升國一的你的筆記術
寫給剛升上國中的你:筆記不是寫給老師看的,是寫給考前的自己看的。18 章 85 課圖文,從「為什麼要寫」講到七科各自怎麼記,附 78 份可以印出來寫的練習單,以及 80 課家長專區與 34 張三年筆記養成路徑圖。沒有閱讀期限,國一買、國三還在。
NT$ 3,599

