• Access-Control-Allow-Origin 跨域问题


       1.同源、同源策略(Same origin policy)

        同源指的是协议,端口,域名全部相同。

        同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。 

       2.跨域

        Web 浏览器具有一个称为相同站点源策略的安全策略,此策略可阻止网页访问另一个域中的数据。 网站通常会让其服务器在后端请求其他站点服务器中的内容,由此避开浏览器中的检查,从而绕开此策略。

       3.前端跨域

        通过前端方案绕开浏览器的安全策略,在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架(iframe)中的数据。

       跨域解决办法

        1.浏览器目标添加命令,允许跨域访问(此种方案只适合个人):

          第一种:--allow-file-access-from-files

          第二种:--disable-web-security

        2.后台配置web.xml过滤器(不推荐)      

    1 <filter>
    2     <filter-name>CorsFilter</filter-name>
    3     <filter-class>com.itxc.filter.CORSFilter</filter-class>
    4 </filter> 
    5 <filter-mapping>
    6     <filter-name>CorsFilter</filter-name>
    7     <url-pattern>/*</url-pattern>
    8 </filter-mapping>
    View Code    
     1 <!-- 支持跨域 -->
     2     <filter>
     3         <filter-name>CORS</filter-name>
     4         <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
     5         <init-param>
     6             <param-name>cors.allowOrin</param-name>
     7             <param-value>*</param-value>
     8         </init-param>
     9         <init-param>
    10             <param-name>cors.supportedMethods</param-name>
    11             <param-value>GET, POST, HEAD, PUT, DELETE, OPTIONS</param-value>
    12         </init-param>
    13     </filter>
    14     <filter-mapping>
    15         <filter-name>CORS</filter-name>
    16         <url-pattern>/*</url-pattern>
    17     </filter-mapping>
    支持跨域

        3.配置Nginx代理服务器(推荐)

          具体查看配置Nginx文章 

        4.JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。在被请求的Response header中加入header参数就可以实现ajax POST跨域访问了。

          // 指定允许其他域名访问 

          header('Access-Control-Allow-Origin:*'); 

          // 响应类型 

          header('Access-Control-Allow-Methods:POST'); 

          // 响应头设置 

          header('Access-Control-Allow-Headers:x-requested-with,content-type'); 

          Access-Control-Allow-Origin:* 表示允许任何域名跨域访问

          如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名

        5.通过iframe 方式跨域访问,具体不做详解。 

        总结:传统的跨域请求没有好的解决方案,无非就是jsonp和iframe,随着跨域请求的应用越来越多,W3C提供了跨域请求的标准方案(Cross-Origin Resource Sharing)。IE8、Firefox 3.5 及其以后的版本、Chrome浏览器、Safari 4 等已经实现了 Cross-Origin Resource Sharing 规范,实现了跨域请求。在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息。

        如果设置 Access-Control-Allow-Origin:*,则允许所有域名的脚本访问该资源。

        Access-Control-Allow-Origin:http://www.phpddt.com.com,允许特定的域名访问

        配置服务器配置信息:    

     1 <system.web>
     2     <!--提供Web服务访问方式-->
     3     <webServices>
     4       <protocols>
     5         <add name="HttpSoap"/>
     6         <add name="HttpPost"/>
     7         <add name="HttpGet"/>
     8         <add name="Documentation"/>
     9       </protocols>
    10     </webServices>
    11  </system.web>
    System.web
     1 <configuration>
     2  <system.webServer>  
     3     <httpProtocol>   
     4     <customHeaders>   
     5       <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>   
     6       <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>   
     7       <add name="Access-Control-Allow-Origin" value="*" /> //* 是任意网站可以跨域,加域名可以指定域名跨域。
     8     </customHeaders>   
     9   </httpProtocol>   
    10   <modules>  
    11     <add name="MyHttpModule" type="WebServiceDemo.MyHttpModule"/>  
    12   </modules>
    13   </system.webServer>  
    14 </configuration>
    Configuration

    备注:
    作者:Shengming Zeng
    博客:http://www.cnblogs.com/zengming/

    本文是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。
    <欢迎有不同想法或见解的同学一起探讨,共同进步>

  • 相关阅读:
    HTTP Error 500.19
    为了找到自己的路——leo锦书62
    hdu3068 最长回文串
    AE+SceneControl源代码共享
    从节能的数据中心的硬件和软件设计的角度(一)
    设计模式------工厂方法模式
    PSU 离11.2.0.3.0 -&gt; 11.2.0.3.11 如果解决冲突的整个
    Android四个多线程分析:MessageQueue实现
    shiro权限架作战
    Codeforces 549G. Happy Line 馋
  • 原文地址:https://www.cnblogs.com/zengming/p/7242643.html
Copyright © 2020-2023  润新知