服务器端解决跨域问题

Posted blognygj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务器端解决跨域问题相关的知识,希望对你有一定的参考价值。

跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如: 
- ‘192.168.1.1:8080’ 与 ‘192.168.1.2:8080’是不同的域。 
- ‘192.168.1.1:8080’ 与 ‘192.168.1.1:8081’是不同的域。

解决此类问题的方法很多,有需要客户端和服务端都要更改的,例如jsonp,iframe等等;有只需要客户端更改的,这种情况只能出现在hybrid app开发中,即通过调用native方法来进行网络请求;有只需要服务端配置的,下面介绍3种服务端配置的方法。

第一种

如果您使用的mvc框架是spring4.2以上的话,一个@CrossOrigin就可以搞定。将@CrossOrigin加到Controller上,那么这个Controller所有的请求都是支持跨域的,代码如下:

@Controller
@CrossOrigin
public class GreetingController {
  • 1
  • 2
  • 3

将@CrossOrigin加到请求方法上,那么这个请求是支持跨域的,代码如下

@CrossOrigin
    @RequestMapping("/greeting")
    public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
  • 1
  • 2
  • 3

更详细的@CrossOrigin介绍,请参看这里

第二种

全局配置,也需要spring4.2以上。

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
            }
        };
    }

.addCorsMappings()中的参数代表支持跨域的url,.allowedOrigins()中的参数代表可以访问该接口的域名,设置为”*”可支持所有域。



以上是关于服务器端解决跨域问题的主要内容,如果未能解决你的问题,请参考以下文章

无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

nodejs作为前后端分离中间件的跨域解决方案

前端前后端分离开发调试过程中跨域问题解决方式

前后端分离实践 — 如何解决跨域问题

前后端分离实践 — 如何解决跨域问题

如何解决js跨域问题