HTTP代理是否需要使用标头?

HTTP代理是否需要使用标头?,http,proxy,Http,Proxy,HTTP代理可以忽略HTTP头并盲目地传递它们吗?我正在考虑编写一个非常简单的前向代理,并希望将复杂性和攻击面降至最低。只是在@Evert response上添加了更多内容 代理应该尝试重写干净的HTTP语言。通常你不会改变身体,但头球不一样 您必须解析头,以检测对消息体大小有影响的一些特殊头(如内容长度或传输编码)。因此,您有一个解析版本的标题。不要粘贴接收头的原始版本,而是从解析后的版本重写它。因此,这种转变应适用于: #传入 :HeaderValue\n :headerValue 2\n

HTTP代理可以忽略HTTP头并盲目地传递它们吗?我正在考虑编写一个非常简单的前向代理,并希望将复杂性和攻击面降至最低。

只是在@Evert response上添加了更多内容

代理应该尝试重写干净的HTTP语言。通常你不会改变身体,但头球不一样

您必须解析头,以检测对消息体大小有影响的一些特殊头(如内容长度或传输编码)。因此,您有一个解析版本的标题。不要粘贴接收头的原始版本,而是从解析后的版本重写它。因此,这种转变应适用于:

#传入 :HeaderValue\n :headerValue 2\n #出去 :HeaderValue,HeaderValue\r\n

协议版本也是如此(第一行末尾)。反向代理必须强制执行该值(HTTP/1.1或HTTP/1.0),不要从请求复制粘贴值

然后,在@Evert列出的rfc7230之后,您会发现许多必须/不得用于代理的内容,您还应该看看:

  • (很多事情,但看看100个问题)
  • (有条件的请求)
  • (范围请求)
  • (缓存--可能还不适合您--)
您对HTTP的了解越多,编写一个简单的代理似乎就越困难

rfc中的大多数规则都是为了确保代理能够讲一个好的HTTP,清除坏的或奇怪的HTTP语法,这对于防止HTTP走私攻击非常重要,这对于代理来说是一个大问题。如果您的代理与其他代理解释几乎糟糕的HTTP语法的方式略有不同,那么最终可能会导致错误的消息大小解释

只有在HTTP KeepAlive之上实现HTTP管道化时才是危险的。因此,如果您想要一个非常简单的转发代理,并且不确定HTTP语法清理,请确保代理上不支持流水线(这是允许的,服务器始终只能处理流水线的第一个请求):

  • 添加
    连接:关闭
    标题
  • 只处理第一个查询,并且只处理一个响应(如果您从后端收到多个响应)
  • 在收到后端响应后关闭后端tcp/ip连接,为每个请求创建一个新的连接(没有后端的keepalive)

这不是拥有非常快速的反向代理的方式,但这就是为什么很难编写一个好的、快速的、健壮的代理。

只需在@Evert response上添加更多内容

代理应该尝试重写干净的HTTP语言。通常你不会改变身体,但头球不一样

您必须解析头,以检测对消息体大小有影响的一些特殊头(如内容长度或传输编码)。因此,您有一个解析版本的标题。不要粘贴接收头的原始版本,而是从解析后的版本重写它。因此,这种转变应适用于:

#传入 :HeaderValue\n :headerValue 2\n #出去 :HeaderValue,HeaderValue\r\n

协议版本也是如此(第一行末尾)。反向代理必须强制执行该值(HTTP/1.1或HTTP/1.0),不要从请求复制粘贴值

然后,在@Evert列出的rfc7230之后,您会发现许多必须/不得用于代理的内容,您还应该看看:

  • (很多事情,但看看100个问题)
  • (有条件的请求)
  • (范围请求)
  • (缓存--可能还不适合您--)
您对HTTP的了解越多,编写一个简单的代理似乎就越困难

rfc中的大多数规则都是为了确保代理能够讲一个好的HTTP,清除坏的或奇怪的HTTP语法,这对于防止HTTP走私攻击非常重要,这对于代理来说是一个大问题。如果您的代理与其他代理解释几乎糟糕的HTTP语法的方式略有不同,那么最终可能会导致错误的消息大小解释

只有在HTTP KeepAlive之上实现HTTP管道化时才是危险的。因此,如果您想要一个非常简单的转发代理,并且不确定HTTP语法清理,请确保代理上不支持流水线(这是允许的,服务器始终只能处理流水线的第一个请求):

  • 添加
    连接:关闭
    标题
  • 只处理第一个查询,并且只处理一个响应(如果您从后端收到多个响应)
  • 在收到后端响应后关闭后端tcp/ip连接,为每个请求创建一个新的连接(没有后端的keepalive)

这不是拥有非常快速的反向代理的方法,但这就是为什么很难编写一个好的、快速的、健壮的代理。

取决于您的后端,请记住,您可能需要找到一种处理头的方法,例如取决于您的后端,请记住,您可能需要找到一种方法来处理像“谢谢”这样的标题。这是一个转发代理,其中客户端比服务器更受信任。我希望客户端表现良好,所以我可以盲目地向上游转发请求,除非存在虚假的内容类型或传输编码(因为我不知道在这种情况下请求何时结束)。在返回时,我也不能做太多过滤-大多数请求都会使用HTTP连接来使用HTTPS,因此我无法真正保护客户端。对于历史,只需添加@Evert共享的链接,这是一个很好的起点,谢谢。这是一个转发代理,其中客户端比服务器更受信任。我希望客户端表现良好,所以我可以盲目地向上游转发请求,除非存在虚假的内容类型或传输编码