X-Forwarded-For

  • 存储客户端 ip 和反向 dai li IP 列表,以逗号+空格分隔
  • 记录最后直连实际服务器之前的整个 dai li 过程
  • 可能会被伪造 ip,但是直连实际服务器这段不会被伪造

图示:
特殊的Header头——X-Forwarded-For 与 X-Real-IP 学习
可以看到,可以看到,第一层 dai li ,其存储了客户端的 IP,第二层 dai li 追加了 proxy_ip1,到实际服务器时,三者的 ip 都存储了

X-Real-IP

  • 请求实际服务器的 IP
  • 每过一层 dai li 都会被覆盖掉,只需第一层 dai li 设置转发

图示:
特殊的Header头——X-Forwarded-For 与 X-Real-IP 学习

第一层 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

更多 header 头

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

参考:
End-to-end、Hop-by-hop

相关文章: