我有一个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);
我的问题:我是否覆盖了新请求中不应传播的所有标头?如果没有,我应该传播哪些标题?
提前谢谢。
答案 0 :(得分:1)
根据RFC 2616,
以下HTTP / 1.1标头是逐跳标头:
- Connection - Keep-Alive - Proxy-Authenticate - Proxy-Authorization - TE - Trailers - Transfer-Encoding - UpgradeHTTP / 1.1定义的所有其他标头都是端到端标头。
因此,代码中跳过的标题列表看起来与提议的列表明显不同。例如,Server
,Host
,Cache-Control
和Content-Length
似乎都不适合删除。
另外,请记住,代理可以是透明的,也可以不是透明的。根据这一点,您可以考虑尽可能多地保留标题。