2

我有一个 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);

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

先感谢您。

4

1 回答 1

1

根据RFC 2616

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

- 联系
- 活着
- 代理验证
- 代理授权
- TE
- 拖车
- 传输编码
- 升级

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

因此,您的代码中跳过的标头列表看起来与建议的列表有很大不同。例如,既不Server、也不Host、也不Cache-Control、也不Content-Length似乎适合删除。

另外,请记住,代理可以根据设计透明或不透明。根据这一点,您可以考虑保留尽可能多的标头。

于 2012-11-12T12:30:38.307 回答