AJAX跨域请求的理解,JAVA

star2017 1年前 ⋅ 1871 阅读

引至:https://www.cnblogs.com/zifayin/p/7338423.html

1.浏览器的同源策略

    目前所有浏览器都由同源策略

        什么是同源策略:      协议、域名、端口都一直的uri称为“同源”


        不同源之间存在以下问题:

            a.无法读取cookie

            b.无法获取dom

            c.无法发送ajax请求



2.ajax的跨域请求

     三种方式:

        a.jsonp(利用了script标签不受同源策略影响,只支持get方式,一般用jquery的jsonp封装,接口需在返回值的外面包 回调函数)

        b.websocket(一种通信协议,不受同源策略影响)

        c.cors(corss-origin resource sharing),跨资源分享,是跨域ajax请求的根本解决方法。

        cors需要 浏览器和服务器同时支持。目前,所有浏览器都支持该功能,所以只需要在服务器设置好cors就可以了。

        浏览器一旦发现ajax请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求。

        JAVA后端的解决方案:

            


        第一步:jar包:cors-filter-1.7.jar,java-property-utils-1.9.jar

            或者maven:

                

                    <dependency>

                        <groupId>com.thetransactioncompany</groupId>

                        <artifactId>cors-filter</artifactId>

                        <version>[ version ]</version>

                    </dependency>

            

            第二步:添加cors配置到web.xml中

                

<!-- 跨域配置-->    

<filter>

        <!-- The CORS filter with parameters -->

        <filter-name>CORS</filter-name>

        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>        

        <!-- Note: All parameters are options, if omitted the CORS

             Filter will fall back to the respective default values.

          -->

        <init-param>

            <param-name>cors.allowGenericHttpRequests</param-name>

            <param-value>true</param-value>

        </init-param>  

        <init-param>

            <param-name>cors.allowOrigin</param-name>

            <param-value>*</param-value>

        </init-param>

        <init-param>

            <param-name>cors.allowSubdomains</param-name>

            <param-value>false</param-value>

        </init-param>

        <init-param>

            <param-name>cors.supportedMethods</param-name>

            <param-value>GET, HEAD, POST, OPTIONS</param-value>

        </init-param>       

        <init-param>

            <param-name>cors.supportedHeaders</param-name>

            <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>

        </init-param>

        <init-param>

            <param-name>cors.exposedHeaders</param-name>

            <!--这里可以添加一些自己的暴露Headers   -->

            <param-value>X-Test-1, X-Test-2</param-value>

        </init-param>

        <init-param>

            <param-name>cors.supportsCredentials</param-name>

            <param-value>true</param-value>

        </init-param>

        <init-param>

            <param-name>cors.maxAge</param-name>

            <param-value>3600</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <!-- CORS Filter mapping -->

        <filter-name>CORS</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>


注意:以上配置文件放到web.xml的最前面,作为第一个filter



    

        

如果觉得本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行随意打赏。您的支持将鼓励我继续创作

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: