CORS是一個W3C尺度,全稱是"跨域資本共享"(Cross-origin resource sharing)。
它許可瀏覽器標的目的跨源辦事器,發出XMLHttpRequest請求,從而降服了AJAX只能同源利用的限制。
已springboot項目為例,啟動一個辦事端(9000),一個客戶端(8002),他們端口分歧,利用客戶端請求辦事端數據,模擬CORS
在客戶端前臺js中添加如下代碼,請求辦事端的一段文本
辦事端的Controller如圖
最主要的是:辦事端需要撐持CORS,即辦事端需要贊成來自其他域的請求。在辦事端添加如下代碼,即增添一個過濾器,使其響應跨域請求
打開界面,請求數據。辦事端啟在9000端口,而客戶端啟在8002,按照同源策略,他們屬于分歧的域,客戶端對辦事端的請求屬于跨域請求。
從上圖可以發現,一次點擊/msg請求,瀏覽器發了兩次請求,下面我們具體看一下,跨域請求起首會發生OPTIONS請求(預檢請求),標的目的辦事器扣問我要跨域利用Get請求了,你許可嗎?辦事端回應許可,而且你的請求頭中只能包羅如下內容。
然后瀏覽器發送正式的/msg請求,獲取到了數據
字段申明:
Access-Control-Allow-Origin 該字段是必需的。它的值要么是請求時Origin字段的值,要么是一個*,暗示接管肆意域名的請求。
Access-Control-Allow-Credentials 該字段可選。它的值是一個布爾值,暗示是否許可發送Cookie。
Access-Control-Expose-Headers
該字段可選。CORS請求時,XMLHttpRequest對象的getResponseHeader()方式只能拿到6個根基字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。若是想拿到其他字段,就必需在Access-Control-Expose-Headers里面指心猿意馬。
Access-Control-Max-Age 該字段可選,用來指心猿意馬本次預檢請求的有用期,單元為秒。
由上可見辦事端撐持跨域是很主要的,前臺Ajax并不需要額為的設置,瀏覽器主動會判定并發出預檢請求。你也可以直接在controller上加注解實現該controller的跨域拜候
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!