直接postman, curl, 浏览器访问后端接口, response header是不会自动加上Access-Control-Allow-Origin的。

需要在ajax中调用,客户端request中会加上Origin请求头 (首先要保证发出的是跨站请求!!!),      服务器端才会加上response响应头

 

 

spring boot CrossOrigin不生效?

 

 出现这个提示,说明chrome根本没有发送这个请求给后端,  99%是因为ajax代码中没有写http://  或者 https://

 


 

 

spring boot CrossOrigin不生效?

 

 

  出现这个提示,说明后端或者nginx可能配置了重定向 ,比如http自动跳转https也算重定向

 

 


 

 

spring boot CrossOrigin不生效?

 

 

  出现这个提示,说明服务端没写相应头 Access-Control-Allow-Origin

 


 

 

 

 浏览器发出请求后,服务器端才能写响应头

spring boot CrossOrigin不生效?

 

参考:

https://spring.io/guides/gs/rest-service-cors/

开发阶段的Vue ProxyTable配置 https://segmentfault.com/a/1190000014396546

 

 Cors请求经过filter之后进入dispatcherServlet,

查找对应的handler (Controller+Method) , getHandler()中会构造HandlerExecutionChain, 并在HandlerExecutionChain中维护cors HandlerInterceptor

spring boot CrossOrigin不生效?

spring boot CrossOrigin不生效?

 

 

applyPreHandle() 中调用DefaultCorsProcessor

spring boot CrossOrigin不生效?

 

 DefaultCorsProcessor的处理过程如下:

 spring boot CrossOrigin不生效?

 

 

 curl示例:

spring boot CrossOrigin不生效?

 

 

另外一种情况是因为在进入Controller之前 filter没过 直接返回302跳转了,  这时响应头是没有跨域字段的。 常见于用了spring security,  要仔细检查配置。

org.springframework.security.web.csrf.CsrfFilter

 

默认csrf token是放在session中的,就是只能在服务器端取到(JSP session),  浏览器是取不到的, 而且token按理不需要返回给browser。如果一定要返回,可以使用CookieCsrfTokenRepository

文档:https://docs.spring.io/spring-security/site/docs/5.2.8.RELEASE/reference/html/protection-against-exploits.html#servlet-csrf-configure-custom-repository





相关文章:

  • 2021-11-09
  • 2022-02-19
  • 2021-09-12
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-24
  • 2021-04-09
  • 2022-02-11
  • 2022-12-23
  • 2021-12-21
相关资源
相似解决方案