ajax 跨域問題

本博客總結來自曉風清老師課程講解:

                            https://www.imooc.com/learn/947

    歡迎大家對我寫的博客進行吐槽。


三種跨域問題:

1.瀏覽器限制訪問。

2.跨域

3.xmlhttprequest(xhr)請求


解決辦法:

1.瀏覽器禁止檢查(ACAO):

打開window命令窗口: 輸入chrome.exe的路徑我的是 D:\chrome\Chrome\Application\chrome.exe

然後加入--disabled-web-security --user-data-dir=g:\temp3

2.jsonp跨域請求

將ajax中的dataType類型改成jsonp,在後臺中創建一個類並繼承AbstractJsonpResponseBodyAdvice加上@ControllerAdvice註解,然後重寫構造方法,構造方法繼承super("callback");

請求鏈接爲xxx?callback=''&_='',後面參數的作用是爲了防止緩存的出現,如果在ajax的調用參數中加上,cache:true,第二個參數就不會出現。

jsonp的弊端:

    1.服務器需要改動代碼支持。

    2.只支持get請求。

    3.發送的不是xhr請求。

3.解決跨域的兩種方法:

⑴被調用方解決跨域

    a、服務器端實現

    添加filter

      給filter添加兩個response返回的消息頭

        reresponse.addHeader("Access-Controle-Allow-Origin","http://localhost:8081")(跨域的地址)

        //當有多個域名時,第二個位置用*

        reresponse.addHeader("Access-Controle-Allow-Method","GET"),

        //當有多個方法時候第二個位置用*

    

   當方法爲options時候,這時候是預檢命令,我們要第二次發送非options的方法,Filter中添加

         reresponse.addHeader("Access-Controle-Allow-Headers","Content-Type");

    options預檢命令緩存,在一個小時內能夠緩存我們的信息,只需要發送一次post命令,options預檢命令在一個小時內,不用發送了

          reresponse.addHeader("Access-Controle-Allow-Age","3600");

    帶cookie的跨域(發送的cookie是被調用方的cookie)

        ajax中添加參數:xhrFields:{withCredentials:true},Filter裏面的ACAO要明確域名(或者req.getHeader("Origin")獲取問的域名,將value其更改),不能用*

         reresponse.addHeader("Access-Controle-Allow-Credentials","true");

    帶自定義頭的跨域

        ajax中添加參數:headers:{"x-header1":"AAA"}/

                        beforeSend:function(xhr){xhr.sendRequestHeader("x-header2","BBB")}

        獲取自定義跨域:

       req.getHeader("Access-Controle-Allow-Headers");//獲取所有跨域頭


    b、nginx配置(由於沒有使用過nginx和apache,所以這裏就不細緻講解,大家如果想學,可以上我下面留的網址學習。

        以下是nginx的配置,在vhost文件夾下

        

        這一章具體講解在

c、apache配置

        

        

        具體去該網址學習:

        https://www.imooc.com/video/16592

d、Spring框架解決

    添加@CrossOrighin註解,就能解決跨域問題

⑵調用方解決跨域

   隱藏跨域

   a、 nginx反向代理配置信息:

    

    https://www.imooc.com/video/16594

    b、apache反向代理配置

    

    https://www.imooc.com/video/16595

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章