nginx跨域之add_header说明

本文介绍了解决前端JS跨域访问问题的一种方法:利用Nginx作为代理服务器,并详细解释了如何通过Nginx配置文件中的add_header指令来添加CORS跨域配置项,确保所有HTTP响应都包含必要的跨域头信息。
部署运行你感兴趣的模型镜像

由于浏览器的安全限制,前端js代码无法直接访问不同域下的资源。只要协议、域名、端口有任何一个不同,都被当作是不同的域。

跨域的解决方案有很多,目前常用的方案是通过nginx代理服务器给返回的响应头添加cors跨域配置项来解决。

在此对nginx配置add_header进行说明:

格式:add_header name value [always];
name是添加的头名称,value是对应的值,always可选(下面会详细说明)

在不添加always的情况下,add_header只对响应码为200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), 308 (1.13.0)这些生效(括号内是nginx版本)。也就是说当服务端返回响应异常,响应码不是上述之一的话,即使nginx有配跨域头信息,浏览器仍然会显示跨域错误。原因就是因为nginx对异常响应码添加add_header无效。

实际工作中往往前端需要捕获服务端异常响应,这时在nginx跨域add_header上加上always,使nginx对任何响应码生效。

具体请参考nginx官方文档

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

`add_header`和`proxy_set_header`是Nginx中用于操作HTTP头部信息的指令,二者作用方向和使用场景完全不同,具体区别如下: - **作用方向**:`proxy_set_header`作用于请求头,是将请求头发送给后端服务器;`add_header`作用于响应头,是将响应头发送给客户端浏览器[^1][^2]。 - **目标对象**:`proxy_set_header`的目标对象是后端上游服务器;`add_header`的目标对象是终端用户浏览器[^2]。 - **主要用途**:`proxy_set_header`主要用于修改或添加发往后端的请求头信息;`add_header`主要用于添加或覆盖返回给客户端的响应头信息[^2]。 - **数据流向**:`proxy_set_header`的数据流向是从Nginx到后端服务器;`add_header`的数据流向是从后端服务器经过Nginx再到客户端[^2]。 - **常见变量**:`proxy_set_header`常见使用`$remote_addr`、`$host`、`$uri`等变量;`add_header`常使用固定值、环境变量或后端返回的数据[^2]。 - **应用场景**:`proxy_set_header`常用于反向代理、负载均衡、后端路由决策;`add_header`常用于安全防护、控制、缓存策略、API元数据标注[^2]。 - **调试方法**:`proxy_set_header`可通过检查后端收到的请求头来调试;`add_header`可通过浏览器开发者工具查看响应头来调试[^2]。 以下是二者的使用示例: ```nginx server { listen 80; server_name example.com; location / { # 设置请求头给上游服务器 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 反向代理到后端服务器 proxy_pass http://backend_server; # 设置响应头信息给浏览器 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值