通过代理后应跳过哪些HTTP标头?

时间:2012-11-08 11:56:47

标签: php http curl proxy http-headers

我有一个PHP代理,它接收HTTP请求并更改HTTP请求的一个标头。一旦HTTP请求离开代理,大多数头应该从原始请求(代理接收的请求)与请求主体一起传播。

这就是我在代码中传播的方式:

foreach (getallheaders() as $name => $value) {
        if (($name != "Server") || ($name != "Connection") ||
                ($name != "Host") || ($name != "Cache-Control") ||
                ($header != "Content-Length")) {
            array_push($headers, "$name: $value");
        }
    }
//this is where I set the headers of the new request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

我的问题:我是否覆盖了新请求中不应传播的所有标头?如果没有,我应该传播哪些标题?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据RFC 2616

  

以下HTTP / 1.1标头是逐跳标头:

- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailers
- Transfer-Encoding
- Upgrade
     

HTTP / 1.1定义的所有其他标头都是端到端标头。

因此,代码中跳过的标题列表看起来与提议的列表明显不同。例如,ServerHostCache-ControlContent-Length似乎都不适合删除。

另外,请记住,代理可以是透明的,也可以不是透明的。根据这一点,您可以考虑尽可能多地保留标题。