自定义HTTP头时的注意事项(转)
HTTP 自定义 注意事项
2023-09-14 08:58:46 时间
原文:https://blog.gnuers.org/?p=462
HTTP头是可以包含英文字母([A-Za-z])、数字([0-9])、连接号(-)hyphens, 也可义是下划线(_)。在使用nginx的时候应该避免使用包含下划线的HTTP头。主要的原因有以下2点。
1.默认的情况下nginx引用header变量时不能使用带下划线的变量。要解决这样的问题只能单独配置underscores_in_headers on。
2.默认的情况下会忽略掉带下划线的变量。要解决这个需要配置ignore_invalid_headers off。
当然,nginx设置变量的时候是没有任何这样的限制的,可以直接设置带下划线的header。但是最好不要这样做。在使用nginx做多级代理的 时候,也需要注意一些header不要重复设置。比如用来保存用户IP的这个header只在最上层的nginx里配置就行,后面的nginx不要重复设 置导致覆盖。
简单测试一下多个nginx做代理的时候处理的思路,为了方便我就直接在一个nginx上跑多个server测试
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$http_orig_client_ip - $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr" '; sendfile on; underscores_in_headers on; ignore_invalid_headers off; keepalive_timeout 65; upstream test2081{ server 10.209.128.28:2081; } upstream test2082{ server 10.209.128.28:2082; } upstream test2083{ server 10.209.128.28:80; } server { listen 2080; server_name localhost; access_log logs/access80.log main; location / { root html; proxy_set_header ORIG_CLIENT_IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $http_x_forwarded_for; proxy_pass http://test2081; } } server { listen 2081; server_name localhost; access_log logs/access81.log main; location / { root html; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $http_x_forwarded_for; proxy_pass http://test2082; } } server { listen 2082; server_name localhost; access_log logs/access82.log main; location / { root html; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $http_x_forwarded_for; proxy_pass http://test2083; } } }
server 2080收到请求后会设置一个不规范的HTTP头,后面连接了2段server。发起请求后,日志如下
可以看到2081和2082的都是能正确传递好这个header的(包括机器上80端口跑的也是可以的)
相关文章
- [火狐REST] 火狐REST 模拟 HTTP get, post请求
- c# 和 java <转载>http://www.cnblogs.com/zhucai/archive/2011/02/16/csharp-compare-java.html
- VS2010调试 --指南 Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048
- [Go] Http / Net 相关资料
- http://blog.csdn.net/beitiandijun/article/details/41678251
- http://www.highcharts.com/
- HTTP/2、3的特点
- 零配置命令行HTTP服务器 http-server
- 【学习总结】HTTP的几种请求类型和状态码解释
- http协议重新整理——————历史[一]
- 解决docker push镜像到私有仓库时的报错【http: server gave HTTP response to HTTPS client】
- [INet] 借助 HTTP Cache 加速应用响应
- 使用 http-proxy 代理 SAP UI5 应用发起的 HTTP 请求
- 如何设置Fiddler来拦截Java代码发送的HTTP请求,进行各种问题排查
- Atitit 获取ip的http标头 目录 1.1. REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP1 1.2. HTTP_CLIENT_IP 客户ip。握手ip1 1.3
- Atitit 返回http500返回码,以及自定义返回提示 目录 1. 可以看到从php发送http响应代码的三种方法:1 1.1. Header("HTTP/1.1 404 Not Found"
- 利用XMLHttpRequest 通过HTTP POST向ABAP backend发送数据
- 关于Chrome支持http header最大长度限制的讨论
- Angular HTTP 请求自定义 timeout 值的一种实现思路
- 使用自定义 HTTP Interceptor 记录 SAP Spartacus 发送的 OCC API 以及响应
- PHP面试题:windows平台, Apache Http Server启动失败, 排错思路是什么?
- 【编程实践】使用 Kotlin HTTP 框架 Fuel 实现 GET,POST 接口 kittinunf.fuel【极简教程】
- Android之Http沟通——4.Android HTTP索取信息:HttpClient
- CentOS7 yum操作报错:http://mirrors.huaweicloud.com/centos/7.8.2003/os/x86_64/repodata/repomd.xml: [Errno
- HTTP隧道ABPTTS——加密型的http隧道,todo自己搭建一个玩玩
- 思科恶意加密TLS流检测论文记录——由于样本不均衡,其实做得并不好,神马99.9的准确率都是浮云啊,之所以思科使用DNS和http一个重要假设是DGA和HTTP C&C(正常http会有图片等)。一开始思科使用的逻辑回归,后面17年文章是随机森林。
- Servlet 客户端 HTTP 请求
- golangWeb框架---github.com/gin-gonic/gin学习七(重定向、中间件Goroutines、http自定义配置)
- Python 爬虫 NO.4 HTTP 响应状态码
- 传输层 HTTP cookies
- docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“: net/http: TLS handshake