關於跨域請求的問題

解決方案:

1,原聲ajax中提供了些屬性

dataType:'jsonp'


但是我沒測試過。

2:如果你項目沒有用框架,servlet實現的,那在你需要跨域請求的那個servlet配置中增加如下配置(注意紅色部分)

<servlet>
        <servlet-name>abc</servlet-name>
        <servlet-class>xxx.xx.xx.xx.pressAgencyCtrl</servlet-class>
        <init-param>
            <description>跨域訪問</description>
            <param-name>accessControlAllowOrigin</param-name>
            <param-value>*</param-value>
        </init-param>

    </servlet>
    <servlet-mapping>
        <servlet-name>abc</servlet-name>
        <url-pattern>/kyqq</url-pattern>
    </servlet-mapping>


3:如果你使用了框架,比如springmvc等,提供以下兩種方式,創建一個filter,在filter中實現,如下

 view pla----------------------------------------------------------------------

  1. package xxxxxxxxxxxxxxx;  

  2.   

  3. import java.io.IOException;  

  4.   

  5. import javax.servlet.Filter;  

  6. import javax.servlet.FilterChain;  

  7. import javax.servlet.FilterConfig;  

  8. import javax.servlet.ServletException;  

  9. import javax.servlet.ServletRequest;  

  10. import javax.servlet.ServletResponse;  

  11. import javax.servlet.http.HttpServletResponse;  

  12.   

  13. public class Kuayu implements Filter {  

  14.   

  15.     @Override  

  16.     public void init(FilterConfig filterConfig) throws ServletException {  

  17.           

  18.     }  

  19.   

  20.     @Override  

  21.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  

  22.             throws IOException, ServletException {  

  23.         //在此處實現跨域設置  

  24.         HttpServletResponse httpResponse=(HttpServletResponse) response;  

  25.         httpResponse.setHeader("Access-Control-Allow-Origin""*");//設置所有的請求都可跨域請求  

  26.         httpResponse.setHeader("Access-Control-Allow-Headers""Authentication");//認證  

  27.         chain.doFilter(request, httpResponse);  

  28.     }  

  29.   

  30.     @Override  

  31.     public void destroy() {  

  32.           

  33.     }  

  34.   

  35. }  

  36. web.xml 配置

  37. <filter>  

  38.     <filter-name>kuayuqingqiu</filter-name>  

  39.     <filter-class>com.xx.xx.Kuayu</filter-class>  

  40. </filter>  

  41. <filter-mapping>  

  42.     <filter-name>kuayuqingqiu</filter-name>  

  43.     <url-pattern>/*</url-pattern>  

  44. </filter-mapping>  

-------------------------------------------------------------------------------------------


spring框架4.2版本後,Spring給出了註解的方式解決問題。

即在Controller控制器中,在Controller註解上方添加@CrossOrigin註解。


最後來點名詞解釋:

Access-Control-Allow-Origin: 允許跨域訪問的域,可以是一個域的列表,也可以是通配符"*"。這裏要注意Origin規則只對域名有效,並不會對子目錄有效。即http://foo.lwq/lxq/ 是無效的。但是不同子域名需要分開設置,這裏的規則可以參照同源策略


Access-Control-Allow-Credentials: 是否允許請求帶有驗證信息,XMLHttpRequest請求的withCredentials標誌設置爲true時,認證通過,瀏覽器纔將數據給腳本程序。


Access-Control-Expose-Headers: 允許腳本訪問的返回頭,請求成功後,腳本可以在XMLHttpRequest中訪問這些頭的信息


Access-Control-Max-Age: 緩存此次請求的秒數。在這個時間範圍內,所有同類型的請求都將不再發送預檢請求而是直接使用此次返回的頭作爲判斷依據,非常有用,大幅優化請求次數


Access-Control-Allow-Methods: 允許使用的請求方法,以逗號隔開


Access-Control-Allow-Headers: 允許自定義的頭部,以逗號隔開,大小寫不敏感






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章