跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • SpringMvc 全局 CORS 解决方案
未分類
16 10 月 2020

SpringMvc 全局 CORS 解决方案

SpringMvc 全局 CORS 解决方案

資深大佬 : haishiwuyuehao 3

@Component public class CORSConfig implements WebMvcConfigurer{   @Override  public void addCorsMappings(CorsRegistry registry) {   registry.addMapping("/**")     .allowedOrigins("*")     .allowedHeaders("*")     .allowedMethods("*")     .allowCredentials(true);   WebMvcConfigurer.super.addCorsMappings(registry);  }   } 
Connection keep-alive Content-Type application/json Date Mon, 26 Oct 2020 01:04:07 GMT Keep-Alive timeout=60 Transfer-Encoding chunked Vary Origin, Access-Control-Request-Method, Access-Control-Request-Headers 

不再建议大家使用 WebMvcConfigurerAdapter 该类以过时

CORS: Cross Origin Resouce Shading 跨资源共享,定义了浏览器与服务器如何实现跨源通信.CORS 背后的基本思路就是使用自定义的 HTTP 头部允许浏览器和服务器相互了解,以确实请求火响应应该是成功还是失败。

对于简单的请求,比如 GET 或 POST 请求,没有自定义头部,而且请求体是 text/plain 类型,在发送请求前,浏览器在发送请求时会有一个额外的头部Origin Origin 头部包含发送请求的源,以便服务器确定是否为其提供响应。

在发送请求时,浏览器添加的 Origin Origin:http://127.0.0.1:5500  整个请求头 GET /menu/all HTTP/1.1 Host: 127.0.0.1:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://127.0.0.1:5500/index.html Origin: http://127.0.0.1:5500 Connection: keep-alive Cache-Control: max-age=0  响应头: Access-Control-Allow-Origin: http://127.0.0.1:5500 Access-Control-Allow-Origin 设置该源,表示允许该源访问。Java 代码里设置的 

CORS 预检请求,除开 POST,GET 请求以外的其它高级请求需要被响应的话.浏览器会先发送一个 OPTIONS 请求,在该请求中设置请求头Access-Control-Allow-Method需要被响应的方法 Access-Control-Allow-Headers需要被响应的请求包含的请求头

服务器会在响应头中给出支持的信息

Access-Control-Allow-Origin: 支持的源 Access-Control-Allow-Methods: 支持的请求方法列表 Access-Control-Allow-Headers: 支持的自定义请求头 Access-Control-Allow-Max-Age: 缓存预检查请求的秒数  响应: Access-Control-Allow-Origin: http://127.0.0.1:5500 Access-Control-Allow-Methods: GET, POST, OPTIONS, DELETE, PUT Access-Control-Allow-Headers: origin Access-Control-Allow-Max-Age: 1728000 

MDN:@https://developer.mozilla.org/zh-CN/docs/Glossary/Preflight_request

大佬有話說 (10)

  • 資深大佬 : wanacry

    你在教我做事?

  • 主 資深大佬 : haishiwuyuehao

    @wanacry 星仔,你在教我做事?

  • 資深大佬 : shenlanAZ

    你这不是相当于把跨域关掉了么,那你 cookie 安全的解决方案呢?

    还有 WebMvcConfigurerAdapter 过时也要看版本的,至少也要把相应的 spring 版本标出来吧。

  • 資深大佬 : wysnylc

    跨域让运维用 nginx 搞,别在项目里折腾

  • 資深大佬 : jzmws

    @wysnylc 用 nginx 搞应该是最合适的一个

  • 資深大佬 : w292614191

    CSDN ?

  • 資深大佬 : w292614191

    “CORS 预检请求,除开 POST,GET 请求以外的其它高级请求需要被响应的话.浏览器会先发送一个 OPTIONS 请求,”

    我 POST 还是会发送 OPTIONS 请求。

    你测试了吗?

  • 資深大佬 : w292614191

    @Livid

  • 資深大佬 : napsterwu

    Spring 这个不太好用,遇到异常标头就没了,安卓有的设备没有 Origin 头,他也不返回标头。ng 比较实在,如果没有 ng,自己写个简单的 interceptor 也好

  • 資深大佬 : Boyce

    @w292614191 POST 时 Content-Type 为 application/json 也会发送 OPTIONS 预请求。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具