博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跨域访问支持(Spring Boot、Nginx、浏览器)
阅读量:5820 次
发布时间:2019-06-18

本文共 2805 字,大约阅读时间需要 9 分钟。

下面咱们详细讨论实现跨域的步骤。跨域的玩法有很多,例如服务器端设置、浏览器端设置、Jsonp等等。本文只描述具体组件的具体做法,不谈论茴香豆的茴字有几种写法。

一、Spring Boot跨域配置

我们的后端使用Spring Boot。Spring Boot跨域非常简单,只需书写以下代码即可。

@Configurationpublic class CustomCORSConfiguration {  private CorsConfiguration buildConfig() {    CorsConfiguration corsConfiguration = new CorsConfiguration();    corsConfiguration.addAllowedOrigin("*");    corsConfiguration.addAllowedHeader("*");    corsConfiguration.addAllowedMethod("*");    return corsConfiguration;  }  @Bean  public CorsFilter corsFilter() {    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();    source.registerCorsConfiguration("/**", buildConfig());    return new CorsFilter(source);  }}

代码非常简单,不做赘述。该代码在Spring Boot 1.5.4中测试通过。

二、Nginx跨域配置

某天,我们将Spring Boot应用用Nginx反向代理。而前端跨域请求的需求不减,于是乎。

Nginx跨域也比较简单,只需添加以下配置即可。

location / {    proxy_pass http://localhost:8080;    if ($request_method = 'OPTIONS') {        add_header 'Access-Control-Allow-Origin' '*';        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';        add_header 'Access-Control-Max-Age' 1728000;        add_header 'Content-Type' 'text/plain; charset=utf-8';        add_header 'Content-Length' 0;        return 204;    }    if ($request_method = 'POST') {        add_header 'Access-Control-Allow-Origin' '*';        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';        add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';    }    if ($request_method = 'GET') {        add_header 'Access-Control-Allow-Origin' '*';        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';        add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';    }}

其中:add_header 'Access-Control-Expose-Headers' 务必加上你请求时所带的header。例如本例中的“Token”,其实是前端传给后端过来的。如果记不得也没有关系,浏览器的调试器会有详细说明。

参考文档:

B.T.W,阿里云中文档描述到Nginx也可通过crossdomain.xml配置文件跨域: ,不过笔者并未采用这种方式。

三、浏览器设置跨域

Chrome、Firefox本身是可以通过配置支持跨域请求的。

  • Chrome跨域:参考文档:
  • Firefox跨域:参考文档:

:通过浏览器设置实现跨域的玩法,个人没有亲测过。

本文链接:

**版权声明: **本博客由创作,采用 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

你可能感兴趣的文章
Spring AOP
查看>>
spark mllib 朴素贝叶斯 应用案例
查看>>
mysql主从同步slave错误1062
查看>>
Microsoft.NETCore.App 版本不一致导致的运行失败
查看>>
win32控件(edit)
查看>>
Handle的原理(Looper、Handler、Message三者关系)
查看>>
dubbo学习笔记 第十章dubbo服务实现http调用
查看>>
[UMU WSH 教程](46) 按图片拍摄时间批量重命名改进版
查看>>
未将对象引用设置到对象的实例--可能出现的问题总结
查看>>
WebService学习总结(一)——WebService的相关概念
查看>>
Linux Mint 12 发布
查看>>
火狐停止了对Windows 2000, XP RTM, XP SP1的支持
查看>>
GIMP 2.8 发布
查看>>
nginx升级Tengine
查看>>
推荐一个lucene的学习好去处,大神好博客
查看>>
七.redis 持久化
查看>>
Twitter Storm集群搭建小结
查看>>
jsoup使用样式class抓取数据时空格的处理
查看>>
使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
查看>>
下载的.zip文件在Linux下unzip无法解压的解决方法
查看>>