基本概念部分(一):理解CORS

說道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域資源共享"(Cross-origin resource sharing),它是一個W3C標準。

CORS跨域的特點:它需要服務器的‘配合’。就是說,它的實現是:瀏覽器(所有瀏覽器和IE10+)+服務器。

一般情況下,我們可以在請求頭信息中加入Origin,來告知服務器自己來自哪個源:協(xié)議 + 域名 + 端口。如果Origin域名在指定許可范圍內,則服務器的響應頭會多出三個信息:

平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

Access-Control-Allow-Origin:
//它的值,可以使一個 *,表示接受所有域名的請求;還可以是指定的一個域名(在請求時就已經寫好的那個origin域名)。Access-Control-Allow-Credentials:
//它的值為:true。他表示是否允許發(fā)送cookie,因為cookie不包含在CORS中,只有其值設為true時,可以讓Cookie包含在請求中一起發(fā)給服務器。Access-Control-Expose-Headers:
//他表示XMLHttpRequest對象的getResponseHeader()方法的六個基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。(這里我用的最多的是Content-Type)

平面設計培訓,網頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

這里有一個withCredentials屬性需要我們知道。

因為CORS請求默認不發(fā)送Cookie和HTTP認證信息,因此需要 Access-Control-Allow-Credentials:true; 并且專門設置AJAX請求:(這里在Vue中有應用,下面會說)

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

這樣才可以讓瀏覽器同意發(fā)送Cookie,配合服務器的需求和配置。

CORS還有一種情況是發(fā)送“預檢請求”。他會在正真的數據請求之前,先發(fā)送一次HTTP請求。瀏覽器會先詢問服務器自己的域名是否被許可,以及一些必要的頭部字段信息。服務器進行回復后,瀏覽器再發(fā)送一次,這次是正式的 XMLHttpRequest 請求。

這里面說到的“預檢”請求的方法為options方法,表示說:“我是來詢問的”。因此當我們在Chrome的開發(fā)者工具中會看到這個一串請求行:

        		

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式