Web技術基礎
https://app.example.com 網頁的JavaScript,要使用fetch對 https://api.example.net/orders 送出附有Content-Type: application/json本文的POST請求。此時跨來源資源共用(CORS)的行為,下列何者正確?
- ACORS在瀏覽器以外也有作用,因此沒有伺服器的許可時,從命令列工具送出的POST也會在網路途中被擋下
- B瀏覽器先以OPTIONS方法送出事前確認(預檢),只有在伺服器以標頭回傳許可時,才送出原本的POST
- C對不同來源的請求一律不經確認就送出,即使伺服器在回應中什麼都不附加,網頁的JavaScript也能讀取回應
查看答案與解析
正確答案:B. 瀏覽器先以OPTIONS方法送出事前確認(預檢),只有在伺服器以標頭回傳許可時,才送出原本的POST
CORS是在伺服器許可的範圍內,允許受同源政策限制的、對其他來源的請求及讀取其回應的機制。Content-Type為application/json的POST,是單純的表單送出無法產生的請求,因此瀏覽器會先以OPTIONS告知要使用的方法與標頭,確認是否許可。若伺服器的回應中沒有Access-Control-Allow-Origin等許可,瀏覽器就不會送出原本的請求。CORS是瀏覽器遵守的規則,因此伺服器必須另外以身分驗證與權限確認保護自己。
- A. CORS是瀏覽器進行的確認,不會阻止瀏覽器以外之工具送出的請求。伺服器端另外需要身分驗證與權限確認。
- B. 正確。附有application/json本文的POST,會先以預檢確認許可後再送出。
- C. 只有在伺服器以Access-Control-Allow-Origin等方式許可時,指令碼才能讀取其他來源的回應。