1. 程式人生 > >java服務端解決js跨域的問題 CORS(跨域資源共享) 的配置

java服務端解決js跨域的問題 CORS(跨域資源共享) 的配置

nginx相容跨域上傳


相容情況:

各種新版本的ie10,firefox,opera,safari,chrome以及移動版safari和Android瀏覽器
ie9及一下版本請使用flash方式來相容

通過OPTIONS請求握手一次的方式實現跨根域傳送請求,需要服務端配置


nginx增加類似如下配置:

[html] view plain copy print ? 在CODE上檢視程式碼片 派生到我的程式碼片
  1. server {  
  2.     location / {  
  3.         if ($request_method = ‘OPTIONS’) {  
  4.           add_header ‘Access-Control-Allow-Origin’ ’*’;  
  5.           add_header ‘Access-Control-Allow-Credentials’ ‘true’;  
  6.           add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS’;  
  7.           add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type’;  
  8.          # add_header ‘Access-Control-Max-Age’ 1728000;  
  9.           add_header ‘Content-Type’ ‘text/plain charset=UTF-8’;  
  10.           add_header ‘Content-Length’ 0;  
  11.           return 200;  
  12.         }  
  13. }  
server {
    location / {
        if ($request_method = 'OPTIONS') {
          add_header 'Access-Control-Allow-Origin' '*';
          add_header 'Access-Control-Allow-Credentials' 'true';
          add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
          add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
         # add_header 'Access-Control-Max-Age' 1728000;
          add_header 'Content-Type' 'text/plain charset=UTF-8';
          add_header 'Content-Length' 0;
          return 200;
        }
}

如果沒有nginx轉發,java需要如下程式碼:

[html] view plain copy print ? 在CODE上檢視程式碼片 派生到我的程式碼片
  1. rundata.getResponse().addHeader(“Access-Control-Allow-Origin”, ”*”);  
  2. rundata.getResponse().addHeader(“Access-Control-Allow-Methods”, “GET, POST, OPTIONS”);  
  3. rundata.getResponse().addHeader(“Access-Control-Allow-Headers”, “Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With”);  
rundata.getResponse().addHeader("Access-Control-Allow-Origin", "*");
rundata.getResponse().addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
rundata.getResponse().addHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");

tomcat下CORS(跨域資源共享) 的配置

CORS介紹
它在維基百科上的定義是:跨域資源共享(CORS )是一種網路瀏覽器的技術規範,它為Web伺服器定義了一種方式,允許網頁從不同的域訪問其資源。而這種訪問是被同源策略所禁止的。CORS系統定義了一種瀏覽器和伺服器互動的方式來確定是否允許跨域請求。 它是一個妥協,有更大的靈活性,但比起簡單地允許所有這些的要求來說更加安全。
而W3C的官方文件目前還是工作草案,但是正在朝著W3C推薦的方向前進。
簡言之,CORS就是為了讓AJAX可以實現可控的跨域訪問而生的。

Tomcat下的配置
下載cors-filter-1.7.jar,Java-property-utils-1.9.jar這兩個庫檔案,放到lib目錄下。(可在
http://search.maven.org上查詢並下載。)工程專案中web.xml中的配置如下:

[html] view plain copy print ? 在CODE上檢視程式碼片 派生到我的程式碼片
  1. <filter>  
  2.     <filter-name>CORS</filter-name>  
  3.     <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>  
  4.     <init-param>  
  5.      <param-name>cors.allowOrigin</param-name>  
  6.         <param-value>*</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.      <param-name>cors.supportedMethods</param-name>  
  10.         <param-value>GET, POST, HEAD, PUT, DELETE</param-value>  
  11.     </init-param>  
  12.     <init-param>  
  13.      <param-name>cors.supportedHeaders</param-name>  
  14.         <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>  
  15.     </init-param>  
  16.     <init-param>  
  17.         <param-name>cors.exposedHeaders</param-name>  
  18.         <param-value>Set-Cookie</param-value>  
  19.     </init-param>  
  20.     <init-param>  
  21.         <param-name>cors.supportsCredentials</param-name>  
  22.         <param-value>true</param-value>  
  23.     </init-param>  
  24. </filter>  
  25. <filter-mapping>  
  26.     <filter-name>CORS</filter-name>  
  27.     <url-pattern>/*</url-pattern>  
  28. </filter-mapping>  
<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>

http://software.dzhuvinov.com/cors-filter-installation.html