Nginx解决跨域问题

这篇具有很好参考价值的文章主要介绍了Nginx解决跨域问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、跨域问题

1.什么是跨域

 2.CORS

二、Nginx跨域处理

三.补充


前言

这几天出现了一个问题,我们中的一个A系统需要给B系统调用,造成了跨域问题。


一、跨域问题

1.什么是跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。

nginx跨域问题,nginx,服务器,开发语言

 2.CORS

CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

简单来说就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域。
CORS提供的Headers,在Request包和Response包中都有一部分:

二、Nginx跨域处理

下面就是我Nginx的一些配置:

 server {
	listen 443 ssl;
	server_name   这里是域名;
    #定义跨域变量
	set $cors_origin "";
    #访问的域名与填写的域名比较
    if ($http_origin ~* "^这里填写调用我们系统的域名地址$") {
            set $cors_origin $http_origin;
    }
   //这里填*就是任何域名都允许跨域
    add_header Access-Control-Allow-Origin $cors_origin;
    #CORS请求默认不发送Cookie和HTTP认证信息。但是如果要把Cookie发到服务器,要服务器同意,指定 
    #Access-Control-Allow-Credentials字段。
	add_header Access-Control-Allow-Credentials 'true';
    #设置跨域请求允许的Header头信息字段,以逗号分隔的字符串
    add_header Access-Control-Allow-Headers 'Origin,X-Requested-With,Content-Type,Accept,Authorization,token';
    #设置跨域允许的请求
    add_header Access-Control-Allow-Metthods 'POST,GET,PUT,OPTIONS,DELETE';
 
     # 预检请求处理
        if ($request_method = OPTIONS) {
                return 204;
        }

三.补充

我们前面的预检请求我们简单来说一说,CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight);浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。我前面就是没有设置token,预检请求就没有通过,我本地启动后端打断点,看请求头一直没有token这个字段,预检请求没有把token传过来,接口一直访问不通。

"预检"请求用的请求方法是OPTIONS,表示这个请求是用来询问的,因此我们需要在Nginx配置中,针对预检请求进行处理,直接返回204 & Response Header,表示服务器支持允许跨源的访问。

  文章来源地址https://www.toymoban.com/news/detail-598733.html

到了这里,关于Nginx解决跨域问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开发环境中解决跨域问题,nginx和tomcat

    有两种方式,一种是在前端配置,一种是在后端配置 需要在前后端都配置 在前端新建axios的时候添加withCredentials: true 在后端添加

    2024年02月08日
    浏览(36)
  • 解决系统开发中的跨域问题:CORS、JSONP、Nginx

    本博客配套的源码在这里 最近我在做一个系统的全栈开发,遇到了这样一个问题。 首先,我的前端是一个来自百度的开源框架——Amis,它封装自React.js,基于JSON配置。我下载了Amis提供的SDK文件夹,并进行了代码开发。但是我在部署整个系统的时候遇到了跨域问题。原因是,

    2024年01月20日
    浏览(56)
  • nginx 反向代理服务器端口转发问题

    先介绍一下项目背景,公司里有个外包Saas项目,这里假设为A项目( 前后端不分离 );项目架构大概如下;但是项目部署到生产环境时,那台服务器80端口被其他应用占用了(我尼玛...),nginx监听端口那边只能监听其他端口了,比如监听:18000,通过nginx反向代理将18000端口转发到

    2024年02月04日
    浏览(52)
  • 【Web服务器】Nginx常见问题(二)

    优化内容 设置方式 隐藏版本号 server_tokens off; 设置运行用户/组 方法一:配置文件中修改 user 用户组 组名; 方法二:编译时直接设置 页面缓存时间 expires 时间; 连接保持超时 keepalive_timeout 服务器超时时间 [客户端超时时间] ; 设置工作进程数 worker_processes auto/同CPU数量 ; worker

    2024年02月08日
    浏览(40)
  • 服务器Nginx权限拒绝的解决方法

    在运行Nginx服务器时,有时候可能会遇到权限拒绝的问题。这种情况通常发生在试图访问或修改某些文件或目录时,Nginx没有足够的权限执行相关操作。本文将介绍如何解决这个问题,并提供相应的源代码示例。 检查Nginx用户和组设置: 首先,我们需要确保Nginx使用的用户和组

    2024年02月03日
    浏览(50)
  • 本地开发环境请求服务器接口跨域的问题(vue的问题)

    上面的这个报错大家都不会陌生,报错是说没有访问权限(跨域问题)。本地开发项目请求服务器接口的时候,因为客户端的同源策略,导致了跨域的问题。下面先演示一个没有配置允许本地跨域的的情况: 可以看到,此时我们点击获取数据,浏览器提示我们跨域了。所以我

    2024年01月23日
    浏览(50)
  • 【开发日记】换掉Nginx,使用HAProxy作为反向代理服务器

    HAProxy,全称为 \\\"High Availability Proxy\\\",是一款开源的、高性能的负载均衡器和代理服务器。主要用于改善应用程序的可用性、可靠性和性能。 与大众熟知的Nginx相比各有优缺点,如果你需要的是一个Web服务器,还是首选Nginx,虽然HAProxy也能实现相同效果,但却需要通过十分繁琐

    2024年01月25日
    浏览(58)
  • Vue中利用代理服务器解决跨域问题

    目录 第一章、了解跨域 第二章、解决跨域问题——代理服务器 2.1 了解原理 2.2 如何配置代理服务器 2.2.1 配置代理服务器(方法一) 2.2.2 配置代理服务器(方法二) AJAX及其相关知识应用(很详细)_❆VE❆的博客-CSDN博客 前端的8080端口需要向后端服务器3000端口请求数据,此

    2024年02月03日
    浏览(52)
  • 【高效开发工具系列】云服务器+Nginx自定义图床

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月05日
    浏览(56)
  • 图片存储解决方案之一使用nginx搭建图片服务器(一)

    常见的图片存储方案: 方案一:使用nginx搭建图片服务器 方案二:使用开源的分布式文件存储系统,例如Fastdfs、HDFS等 方案三:使用云存储,例如阿里云、七牛云等 首先下载Nginx http://nginx.org/en/download.html http://nginx.org/en/download.html?login=from_csdn    然后解压,如下图所示: 双

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包