跨域總結

發生跨域的條件

  1. 瀏覽器限制
  2. 發出的請求跨域
  3. XHR請求

解決方法

針對上面三個條件的解決方法nginx

  1. 瀏覽器限制spring

    能夠修改瀏覽器設置,可是無心義,不能修改全部用戶的瀏覽器設置。apache

  2. 發出的請求跨域json

    • 修改被調用方(返回頭,讓瀏覽器支持跨域)
    • 修改調用方(代理服務器轉發?)
  3. XHR請求跨域

    JSON瀏覽器

JSONP

返回js代碼,發出的請求時script緩存

將callback值做爲函數名返回。"_"參數防止被緩存。服務器

jsonp只支持get請求。cookie

被調用方解決

響應頭增長字段,告訴瀏覽器容許跨域。框架

服務器端實現

Filter 解決方案

跨域請求,請求頭增長了origin 字段

編寫filter 增長response 字段

簡單請求&非簡單請求

預檢命令

非簡單請求,會有「預檢命令」

預檢命令會發送 content-type method,看服務器是否支持此類型跨域。

預檢命令緩存

####帶cookie的跨域

  • 當代cookie 時,Acces-Control-Allow-Origin 不能爲* 號
  • 增長Access-Control-Allow-Credentials:3600

問題:Acces-Control-Allow-Origin 不能爲* 那其餘跨域怎麼辦呢?

能夠在filter中 獲取request的origin字段,而後設置到response的Acces-Control-Allow-Origin 。

nginx配置

  • 包括增長 響應頭、
  • 將origin和自定義header返回
  • 處理預檢命令OPTIONS

apache配置

spring 框架解決方案

@CrossOrigin

調用方解決方案

代理服務器

相關文章
相關標籤/搜索