zoukankan      html  css  js  c++  java
  • Maven Web项目解决跨域问题

    跨域问题目前笔者所用到的方案大致有三种:jsonp,SpringMVC 4以上注解方式和cros三方过滤器。

    Jsonp

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

    Jsonp原理: 
    首先在客户端注册一个callback, 然后把callback的名字传给服务器。

    此时,服务器先生成 json 数据。 
    然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

    最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

    客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

    使用JSON的优点在于: 
    比XML轻了很多,没有那么多冗余的东西。 
    JSON也是具有很好的可读性的,但是通常返回的都是压缩过后的。不像XML这样的浏览器可以直接显示,浏览器对于JSON的格式化的显示就需要借助一些插件了。 
    在JavaScript中处理JSON很简单。 
    其他语言例如PHP对于JSON的支持也不错。

    JSON也有一些劣势: 
    JSON在服务端语言的支持不像XML那么广泛,不过JSON.org上提供很多语言的库。 
    如果你使用eval()来解析的话,会容易出现安全问题。 
    只支持GET方式的请求方式不支持POST,导致如果是非常复杂的参数传递会造成参数丢失,因为GET方式只能在URL后面拼接参数,而且限制只能是: 
    在IE8 下的URL地址总长度为:4076,超过该长度会自动忽略后面的内容; 
    在firefox 25下的URL地址总长度可以达到:7530,超过该长度会访问错误;

    在chrome 29.0.1547.62 的最大总长度达到:7675,超过该长度会访问错误;

    2. 使用Cros三方方式(我用这种)

    (1)pom.xml添加依赖

    <!-- 跨域支持-->  
            <dependency>  
                <groupId>com.thetransactioncompany</groupId>  
                <artifactId>cors-filter</artifactId>  
                <version>2.5</version>  
            </dependency> 

    (2)web.xml添加三方过滤器

    <!--  提供跨域支持 -->
        <filter>    
            <filter-name>CORS</filter-name>    
            <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>    
            <init-param>    
                <param-name>cors.allowOrigin</param-name>   
                <param-value>*</param-value>   
            </init-param>    
            <init-param>    
                <param-name>cors.supportedMethods</param-name>   
                <param-value>GET, POST, HEAD, PUT, DELETE</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>   
                <param-value>Set-Cookie</param-value>   
            </init-param>    
            <init-param>    
                <param-name>cors.supportsCredentials</param-name>   
                <param-value>true</param-value>   
            </init-param>    
        </filter>    
        <filter-mapping>    
            <filter-name>CORS</filter-name>    
            <url-pattern>/*</url-pattern>    
       </filter-mapping> 

    参数讲解

    cors.allowOrigin指的可以通过的ip,代表所有,可以使用指定的ip,多个的话可以用逗号分隔,默认为 
    cors.supportedMethods指的是请求方式 默认为* 
    cors.supportedHeaders请求支持的头信息,默认为* 
    cors.exposedHeaders暴露的头信息,默认的empy list 
    cors.supportsCredentials支持证书,默认为true 
    cors.maxAge 最大过期时间,默认为-1 
    cors.tagRequests 默认为false 
    cors.allowSubdomains允许子域 默认为false

  • 相关阅读:
    拉格朗日插值模板题 luoguP4871
    FFT P3803 [模板]多项式乘法
    codeforces #629 F
    codeforces #629 E-Tree Queries
    数学—线性基
    codeforces #629 D.Carousel
    luogu P1447_能量采集 (莫比乌斯反演)
    luogu P2257- YY的GCD (莫比乌斯反演)
    luogu P2522-Problem b (莫比乌斯反演)
    luogu P3455 (莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/9359632.html
Copyright © 2011-2022 走看看