11、在Nginx中解决跨域问题

谁说胖子不能爱 提交于 2020-05-05 17:47:02

1、简介

比如用户在访问慕课网时,可能会发起一些向其他网站的请求,属于跨域,正常是无法访问的.

可以通过CORS跨域资源共享(Cross-Origin Resource Sharing)解决这个问题.
它是运行浏览器向跨Origin的服务器发起js请求获取响应.

实现跨域有常用的几种方法: Jsonp、SpringBoot Cors、Nginx

2、问题复现

首先来复现出现跨域问题的场景
1、修改ngin.conf

server {
       listen       89;
       server_name  localhost;

       location = /imooc/img/face1.png  {
            root   /home;
       }
   }
   
2、测试在浏览器可以正常访问,http://129.211.80.178:89/imooc/img/face1.png
   通过域名也可以正常访问,http://lwh.nginx.com:89/imooc/img/face1.png
   (在本地修改了host文件,配置lwh.nginx.com指向129.211.80.178)
   
3、测试在js代码中跨域能否正常访问,如下图,它是放在html中并部署到tomcat中,之后在浏览器通过tomcat访问该html进行访问,
   打开控制台发现报错

3、解决方法

3.1、SpringBoot中配置支持跨域

@Configuration
public class CorsConfig {

    public CorsConfig() {
    }

    @Bean
    public CorsFilter corsFilter() {
        // 1. 添加cors配置信息
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("http://localhost:8080");
        config.addAllowedOrigin("http://shop.z.mukewang.com:8080");
        config.addAllowedOrigin("http://center.z.mukewang.com:8080");
        config.addAllowedOrigin("http://shop.z.mukewang.com");
        config.addAllowedOrigin("http://center.z.mukewang.com");
        config.addAllowedOrigin("*");

        // 设置是否发送cookie信息
        config.setAllowCredentials(true);

        // 设置允许请求的方式
        config.addAllowedMethod("*");

        // 设置允许的header
        config.addAllowedHeader("*");

        // 2. 为url添加映射路径
        UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
        corsSource.registerCorsConfiguration("/**", config);

        // 3. 返回重新定义好的corsSource
        return new CorsFilter(corsSource);
    }

}

3.2、Nginx中配置

// 修改之后就可以正常访问了
server {
       listen       89;
       server_name  localhost;

       #允许跨域请求的域,*代表所有
       add_header 'Access-Control-Allow-Origin' *;
       
       #允许带上cookie请求
       add_header 'Access-Control-Allow-Credentials' 'true';

       #允许请求的方法,比如 GET/POST/PUT/DELETE
       add_header 'Access-Control-Allow-Methods' *;

       #允许请求的header
       add_header 'Access-Control-Allow-Headers' *;

       location = /imooc/img/face1.png  {
            root   /home;
       }
   }
在浏览器控制台可以看该图片对应的响应头

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!