跨域(Access-Control-Allow-Origin)解決方案詳解


php 在服務端代碼里面加 header信息

header("Access-Control-Allow-Origin: *"); //如果需要設置允許所有域名發起的跨域請求,可以使用通配符 *
或者
header("Access-Control-Allow-Origin: www.xxx.xom");

 

Java中設置多個Access-Control-Allow-Origin跨域訪問

1、如果服務端是Java開發的,添加如下設置允許跨域即可,但是這樣做是允許所有域名都可以訪問,不夠安全。
response.setHeader("Access-Control-Allow-Origin","*");
2、為保證安全性,可以只添加部分域名允許訪問,添加位置可以在下面三處任選一個。
(1)可以在過濾器的filter的dofilter()方法種設置。
(2)可以在servlet的get或者post方法里面設置。
(3)可以放在訪問的jsp頁面第一行。
3、在此用第一種方法,注意web.xml配置過濾器(filter)。

public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException { // 將ServletResponse轉換為HttpServletResponse HttpServletResponse httpResponse = (HttpServletResponse) res; // 如果不是80端口,需要將端口加上,如果是集群,則用Nginx的地址,同理不是80端口要加上端口 String [] allowDomain= {"http://www.baidu.com","http://123.456.789.10","http://123.16.12.23:8080"}; Set allowedOrigins= new HashSet(Arrays.asList(allowDomain)); String originHeader=((HttpServletRequest) req).getHeader("Origin"); if (allowedOrigins.contains(originHeader)){ httpResponse.setHeader("Access-Control-Allow-Origin", originHeader); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); httpResponse.setHeader("Access-Control-Max-Age", "3600"); httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token"); // 如果要把Cookie發到服務器,需要指定Access-Control-Allow-Credentials字段為true httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.setHeader("Access-Control-Expose-Headers", "*"); } chain.doFilter(req, res); } 

基於nginx配置請求的CORS

目前很多請求都不是直接暴露的,很多通過nginx做反向代理,因此可以使用nginx配置固定請求的Access-Control-Allow-Origin,實現跨域訪問。方式是在被請求的接口,配置location代理,添加header實現。

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers "x-requested-with,Authorization";
add_header Access-Control-Allow-Methods *;

 更多參考:https://www.jianshu.com/p/3967c00cca09


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM