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方法。

       所以在服务器端需要改动。

            

猜你喜欢

转载自blog.csdn.net/lh_jax/article/details/80695693
今日推荐