CORS的請求分為簡單請求和非簡單請求,對於非簡單請求,CORS定義需要對這些非簡單請求發起一次預檢,也即是發起一個option請求,待確認伺服器允許跨域後才會重新發送原先的非簡單請求,所以我想問為什麼需要進行預檢?
這裡有一個stack上面的回答,我看的不是太明白,有人願意翻譯或簡單概括下?
http://stackoverflow.com/ques...
你要去人家裡拿東西,總得經主人同意吧
跨域是瀏覽器的同源策略搞出來的事情,預請求是瀏覽器行為,拿著當前的網域去問服務端能不能通過。
最常用的兩個get 預設不存在跨域,意思是你允許get 就要有被別人拿走的預期,jsonp 就是利用這點;post 存在跨域, 因為按意思會對資源產生影響,必須先檢驗。
對那些可能對伺服器資料產生副作用的HTTP 請求方法(特別是GET 以外的HTTP 請求,或搭配某些MIME 類型的POST 請求),瀏覽器必須先使用OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。伺服器確認允許之後,才發起實際的 HTTP 請求。在預檢請求的回傳中,伺服器端也可以通知客戶端,是否需要攜帶身分憑證(包括 Cookies 和 HTTP 認證相關資料)。 ———— HTTP存取控制(CORS)
對那些可能對伺服器資料產生副作用的HTTP 請求方法(特別是GET 以外的HTTP 請求,或搭配某些MIME 類型的POST 請求),瀏覽器必須先使用OPTIONS 方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。伺服器確認允許之後,才發起實際的 HTTP 請求。在預檢請求的回傳中,伺服器端也可以通知客戶端,是否需要攜帶身分憑證(包括 Cookies 和 HTTP 認證相關資料)。
———— HTTP存取控制(CORS)
你要去人家裡拿東西,總得經主人同意吧
跨域是瀏覽器的同源策略搞出來的事情,
預請求是瀏覽器行為,拿著當前的網域去問服務端能不能通過。
最常用的兩個
get 預設不存在跨域,意思是你允許get 就要有被別人拿走的預期,jsonp 就是利用這點;
post 存在跨域, 因為按意思會對資源產生影響,必須先檢驗。