HTTP代理是否需要使用标头?
HTTP代理可以忽略HTTP头并盲目地传递它们吗?我正在考虑编写一个非常简单的前向代理,并希望将复杂性和攻击面降至最低。只是在@Evert response上添加了更多内容 代理应该尝试重写干净的HTTP语言。通常你不会改变身体,但头球不一样 您必须解析头,以检测对消息体大小有影响的一些特殊头(如内容长度或传输编码)。因此,您有一个解析版本的标题。不要粘贴接收头的原始版本,而是从解析后的版本重写它。因此,这种转变应适用于: #传入 :HeaderValue\n :headerValue 2\n #出去 :HeaderValue,HeaderValue\r\n 协议版本也是如此(第一行末尾)。反向代理必须强制执行该值(HTTP/1.1或HTTP/1.0),不要从请求复制粘贴值 然后,在@Evert列出的rfc7230之后,您会发现许多必须/不得用于代理的内容,您还应该看看:HTTP代理是否需要使用标头?,http,proxy,Http,Proxy,HTTP代理可以忽略HTTP头并盲目地传递它们吗?我正在考虑编写一个非常简单的前向代理,并希望将复杂性和攻击面降至最低。只是在@Evert response上添加了更多内容 代理应该尝试重写干净的HTTP语言。通常你不会改变身体,但头球不一样 您必须解析头,以检测对消息体大小有影响的一些特殊头(如内容长度或传输编码)。因此,您有一个解析版本的标题。不要粘贴接收头的原始版本,而是从解析后的版本重写它。因此,这种转变应适用于: #传入 :HeaderValue\n :headerValue 2\n
- (很多事情,但看看100个问题)
- (有条件的请求)
- (范围请求)
- (缓存--可能还不适合您--)
- 添加
连接:关闭
标题
- 只处理第一个查询,并且只处理一个响应(如果您从后端收到多个响应)
- 在收到后端响应后关闭后端tcp/ip连接,为每个请求创建一个新的连接(没有后端的keepalive)
这不是拥有非常快速的反向代理的方式,但这就是为什么很难编写一个好的、快速的、健壮的代理。只需在@Evert response上添加更多内容 代理应该尝试重写干净的HTTP语言。通常你不会改变身体,但头球不一样 您必须解析头,以检测对消息体大小有影响的一些特殊头(如内容长度或传输编码)。因此,您有一个解析版本的标题。不要粘贴接收头的原始版本,而是从解析后的版本重写它。因此,这种转变应适用于: #传入 :HeaderValue\n :headerValue 2\n #出去 :HeaderValue,HeaderValue\r\n 协议版本也是如此(第一行末尾)。反向代理必须强制执行该值(HTTP/1.1或HTTP/1.0),不要从请求复制粘贴值 然后,在@Evert列出的rfc7230之后,您会发现许多必须/不得用于代理的内容,您还应该看看:
- (很多事情,但看看100个问题)
- (有条件的请求)
- (范围请求)
- (缓存--可能还不适合您--)
- 添加
连接:关闭
标题
- 只处理第一个查询,并且只处理一个响应(如果您从后端收到多个响应)
- 在收到后端响应后关闭后端tcp/ip连接,为每个请求创建一个新的连接(没有后端的keepalive)
这不是拥有非常快速的反向代理的方法,但这就是为什么很难编写一个好的、快速的、健壮的代理。取决于您的后端,请记住,您可能需要找到一种处理头的方法,例如取决于您的后端,请记住,您可能需要找到一种方法来处理像“谢谢”这样的标题。这是一个转发代理,其中客户端比服务器更受信任。我希望客户端表现良好,所以我可以盲目地向上游转发请求,除非存在虚假的内容类型或传输编码(因为我不知道在这种情况下请求何时结束)。在返回时,我也不能做太多过滤-大多数请求都会使用HTTP连接来使用HTTPS,因此我无法真正保护客户端。对于历史,只需添加@Evert共享的链接,这是一个很好的起点,谢谢。这是一个转发代理,其中客户端比服务器更受信任。我希望客户端表现良好,所以我可以盲目地向上游转发请求,除非存在虚假的内容类型或传输编码