在使用Ajax跨域請求時,如果設置Header的ContentType為application/json,會分兩次發送請求。第 一次先發送Method為OPTIONS的請求到伺服器,這個請求會詢問伺服器支持哪些請求方法(GET,POST等), 支持哪些請求頭等等伺服器的支持情況。等到這個請求返回後, ...
在使用Ajax跨域請求時,如果設置Header的ContentType為application/json,會分兩次發送請求。第
一次先發送Method為OPTIONS的請求到伺服器,這個請求會詢問伺服器支持哪些請求方法(GET,POST等),
支持哪些請求頭等等伺服器的支持情況。等到這個請求返回後,如果原來我們準備發送的請求符合伺服器的規則,那麼才會繼續發送第二個請求,否則會在Console中報錯。
註意Note後面的描述,在跨域的時候,除了contentType為application/x-www-form-urlencoded, multipart/form-data或者text/plain外,都會觸發瀏覽器先發送方法為OPTIONS的請求。
比如說,你原來的請求是方法方法POST,如果第一個請求返回的結果Header中的Allow屬性並沒有POST方法,
那麼第二個請求是不會發送的,此時瀏覽器控制台會報錯,告訴你POST方法並不被伺服器支持。
不僅如此,如果想要用ContentType:application/json發送跨域請求,伺服器端還必須設置一個名為
Access-Control-Allow-Headers 的Header,將它的值設置為 Content-Type,表明伺服器能夠接收
到前端發送的請求中的ContentType屬性並使用它的值。否則第二次請求也是發不出去的,瀏覽器console會
報錯,並提示你伺服器沒有設置Access-Control-Allow-Headers。