ajax跨域請求,瞭解一下?

    最近遇到一個關於ajax跨域請求,特此,我在這裏總結一下ajax跨域請求的問題吧。

    原因:

    1,瀏覽器會校驗ajax跨域請求,如果不通過就會報跨域安全問題;

    2,請求不是本域的請求(協議,域名,端口不同都稱爲不是本域);

    3,發出去的請求是(XMLHttpRequest)請求,簡稱XHR請求;

    三個原因都存在纔會產生跨域安全問題!

   解決:

    1,瀏覽器客戶端對跨域請求不進行校驗(需要用戶自己更改瀏覽器的配置,不合適);

cmd啓動瀏覽器時

    start chrome.exe --args --disable-web-security --user-data-dir

    2,造成跨域問題的第二個原因,通過被調用方或調用方進行更改(重點);

    ①被調用方更改:

            這裏就是涉及到被調用方代碼改爲支持跨域請求,在請求時,請求會先執行到後臺,然後瀏覽器再判斷,因此我們在響應頭裏增加指定的字段    response.header("access-control-allow-origin","*");
       這種不能滿足所有的請求,如果是攜帶cookie的請求時
        $.ajax({
            xhrFieIds:{
                withCredentials:true
            }
        });
    response.header("access-control-allow-origin","*");必須使用訪問域名,不能使用*的通配符,
    還需添加response.header("access-control-allow-Credentials","true");

       ②調用方更改

            由於種種情況,我們不能更改服務端代碼,所以,我們可以從代理着手,通常使用nginx進行反向代理。

        配置一個server{

                             listen       8080;

                             server_name  localhost;

                             location / {
                                    root   html;
                                    index  index.html index.htm;

                             }

                               location /apis {
                                    rewrite  ^.+apis/?(.*)$ /$1 break;
                                    include  uwsgi_params;
                                    proxy_pass   http://localhost:8080;
                               }

                       }

            

    ③,第三個原因,我們通常採用jsonp請求方式去請求;

            之所以用jsonp是因爲請求的不是xhr請求,而是包裝了一下,JavaScript請求,這種請求,在後臺有個callback方法。

       所以在服務器端需要改動。

            








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