特殊的Header头
X-Forwarded-For
- 存储客户端 ip 和反向 dai li IP 列表,以逗号+空格分隔
- 记录最后直连实际服务器之前的整个 dai li 过程
- 可能会被伪造 ip,但是直连实际服务器这段不会被伪造
图示:
可以看到,可以看到,第一层 dai li ,其存储了客户端的 IP,第二层 dai li 追加了 proxy_ip1,到实际服务器时,三者的 ip 都存储了
X-Real-IP
- 请求实际服务器的 IP
- 每过一层 dai li 都会被覆盖掉,只需第一层 dai li 设置转发
图示:
第一层 dai li 已经拿到了真实的 ip,并在 header 中设置了 X-Real-IP,因此第二层 dai li 不需要再去设置 X-Real-IP,只需要做转发就可以
Go 中可以通过 req.RemoteAddr 代码获取请求地址的 ip
其他 header 头
- Connection——标记请求连接是长连接还是短连接,或者说已关闭;http1.1 后默认是从长连接,该字段的值为:keep-alive
- TE——HTTP 请求头字段,传输编码的优先级,固定值:TE: trailers,deflate
- Trailer——HTTP 响应头字段,用户说明传输中分块编码的编码信息,固定值 Trailer: Max-Forwards
End-to-end 和 Hop-by-hop
End-to-end 端到端头部
- 此类头部字段会转发给 请求/响应 的最终接收目标。
- 必须保存在由缓存生成的响应头部。
- 必须被转发。
Hop-by-hop 逐跳首部
- 此类头部字段只对单次转发有效。会因为转发给缓存dai li 服务器而失效。
- HTTP 1.1 版本之后,如果要使用 Hop-by-hop 头部字段则需要提供 Connection 字段。
除了一下 8 个字段为逐跳字段,其余均为端到端字段。
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authenrization
- Trailer
- TE
- Tranfer-Encoding
- Upgrade