# [資訊安全] CORS ###### tags: `資訊安全` `CORS` 全稱 Cross-Origin Resource Sharing (CORS),藉由添加訊息(設定條件)在 HTTP Header,讓瀏覽器判斷 Client 請求的條件是否符合 server 的規範。此防禦方式必須仰賴瀏覽器,若瀏覽器沒有支援即無效。 * server 設定的範例 ```=Vim! //(必填)允許跨來源(網域),可設定多個,用空白分隔 Access-Control-Allow-Origin: * //(必填)允許跨來源的方法,可設定多個,用逗號分隔 Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE //server 允許跨來源的 Header 內容 Access-Control-Allow-Headers: Content-Type, Authorization //server 是否接受跨來源的cookie,預設為否,若要接受cookie,則 Access-Control-Allow-Origin 須明確指定 Access-Control-Allow-Credentials: false //server 允許的 Header 內容 Access-Control-Expose-Headers: X-My-Custom-Header //請求的有效期限,以秒為單位 Access-Control-Max-Age: 86400 ``` ## CORS Request ### Simple Request 會直接發送實際的 CORS Request,瀏覽器會依 Response Header 的 Access_Control-Allow-Origin 決定此 Request 是否通過。 **Simple Request 的 Http Header 僅能包含以下內容** * Method * GET * POST * HEAD * Header * Accept * Accept-Language * Content-Language * Last-Event-ID * Content-Type * text/plain * application/x-www-form-urlencoded * multipart/form-data ### Not-so-simple Request 只要不符合 Simple Request 的請求都屬於 Not-so-simple。 瀏覽器會先發送 Preflight Request (預檢請求) ,確認 server 能夠接受後,才會發出實際的 CORS Request。並且在預檢請求通過後,只要在 Access-Control-Max-Age 設定的時間內,同樣的Not-so-simple Request 都不需要再發出 Preflight Request (預檢請求) ## [補充]同源政策 (Same-Origin Policy) 符合以下條件即為同源 * 相同的通訊協定 (protocol),即 http/https * 相同的網域 (domain) * 相同的通訊埠 (port) --- 資料來源: [那些經歷過的 CORS 蠢問題](https://medium.com/@yovan/%E9%82%A3%E4%BA%9B%E7%B6%93%E6%AD%B7%E9%81%8E%E7%9A%84-cors-%E8%A0%A2%E5%95%8F%E9%A1%8C-e63576f67066)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up