老被跨域问题烦?看看都有哪些处理方法
- 2019 年 10 月 3 日
- 筆記
?????IT???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1. ?????
????????????????“????”???????“????”????????????????????????????????????????????“??”?????????http??????????????://??:??/??
???????????????????????????????????????? http://blog.jboost.cn/docker-1.html
? ????????????
?? | ???? | ?? |
---|---|---|
https://blog.jboost.cn/docker-1.html | ??? | ???????http???https |
http://www.jboost.cn/docker-1.html | ??? | ???? |
http://blog.jboost.cn:8080/docker-1.html | ??? | ????????????80????8080 |
http://blog.jboost.cn/docker-2.html | ?? | ???????????????????80???? |
????????????????????????????
-
?Cookie?LocalStorage???IndexDB????????NoSQL????????????
-
?DOM???
-
AJAX??
?????????????????????????????????????AJAX???????????????????????????AJAX???????????????????
2. ????????
???“????”??????????????????????????????????????????????????????????
-
?????Cookie?LocalStorage?IndexDB?????
???????????????Cookie??? SESSIONID????????????????? token????REST????????????????Tomcat????Cookie????? JSESSIONID ???????????REST???token?????? LocalStorage ????????????????????????????????????????????????????????? -
?DOM?????
????DOM????????????????????????????<iframe>
???????????DOM?????????????????????????… -
?AJAX?????
???????AJAX??????????????????????????????????1???????????????????AJAX?????????????????????????????????????????????????????????
??????????????????????????????
3. ????????
?????????????????AJAX??????????????????CORS?JSONP???????????
3.1 ??
??“????”??????????????????????????????????? Nginx????????????? http://blog.jboost.cn????????? http://api.jboost.cn???? Nginx ???????
server{ # ?? listen 80; # ?? server_name blog.jboost.cn; # ?? http://blog.jboost.cn/api/xxx ???????? http://api.jboost.cn/api/xxx location ^~ /api { proxy_pass http://api.jboost.cn; } }
?????AJAX??????? http://api.jboost.cn/api/xxx ??????? http://blog.jboost.cn/api/xxx ?????????????????
3.2 CORS
CORS?Cross-Origin Resource Sharing????????????CORS???????????????????????IE10??????CORS??????CORS????????????????Spring Boot???????????????CorsFilter????????????
1 @Configuration 2 @ConditionalOnClass({Servlet.class, CorsFilter.class}) 3 public class CORSAutoConfiguration { 4 5 @Bean 6 @ConditionalOnMissingBean(name = "corsFilterRegistrationBean") 7 public FilterRegistrationBean corsFilterRegistrationBean() { 8 UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); 9 10 CorsConfiguration corsConfiguration = new CorsConfiguration(); 11 corsConfiguration.applyPermitDefaultValues(); 12 corsConfiguration.setAllowedMethods(Arrays.asList(CorsConfiguration.ALL)); 13 corsConfiguration.addExposedHeader(HttpHeaders.DATE); 14 15 corsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); 16 17 CorsFilter corsFilter = new CorsFilter(corsConfigurationSource); 18 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); 19 filterRegistrationBean.setFilter(corsFilter); 20 filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); 21 filterRegistrationBean.addUrlPatterns("/*"); 22 23 return filterRegistrationBean; 24 } 25 }
???????????Header???????????
-
Access-Control-Allow-Origin ??????????????????????????? * ???????
-
Access-Control-Allow-Methods ????????????HTTP????GET?POST?PUT?DELETE????? * ?????
-
Access-Control-Allow-Headers ?????? Access-Control-Request-Headers ???????????????????????
3.3 JSONP
JSONP???????HTML?????? <script>
, <img>
??? src ???????????????????????
<script type="text/javascript" src="http://api.jboost.cn/hello?name=jboost&callback=jsonpCallback"/>
????JS?? jsonpCallback
?????????????JS??jsonpCallback
???????jsonpCallback({"name":"jboost"})
????jsonpCallback
????????????????????{"name":"jboost"}
??
JSONP????????????????GET??——??????<script>
, <img>
???POST??????????????????????
4. ??
????????????????????????????????????????????????????????????????????????CORS????????????????????????????????????????JSONP???????????GET??????????????????????????????????