PHP中的内容协商和HTTP头

PHP中的内容协商和HTTP头,php,http,caching,proxy,Php,Http,Caching,Proxy,以下是我昨天的问题: 我有一个.php,可以与不同的MIME类型一起使用。为此,我使用“Vary:Accept”HTTP头(确认正确)。但是如果相同的文档(具有相同的URL)可以用多种语言提供(并且此页面可以由代理缓存),该怎么办?我知道这是个糟糕的设计,但有时也会发生。在这种特殊情况下,如何做到这一点 J.J.给出了一个讨论的链接(),其中有人想对一个可以用两种不同语言提供的文档使用Vary HTTP头: 对于您需要的请求/变体场景 列出了不应使用的服务器 法利:对不起,我要大声喊叫 说得很

以下是我昨天的问题:

我有一个.php,可以与不同的MIME类型一起使用。为此,我使用“Vary:Accept”HTTP头(确认正确)。但是如果相同的文档(具有相同的URL)可以用多种语言提供(并且此页面可以由代理缓存),该怎么办?我知道这是个糟糕的设计,但有时也会发生。在这种特殊情况下,如何做到这一点

J.J.给出了一个讨论的链接(),其中有人想对一个可以用两种不同语言提供的文档使用Vary HTTP头:

对于您需要的请求/变体场景 列出了不应使用的服务器 法利:对不起,我要大声喊叫 说得很清楚。变化:是严格的 对于那些没有希望或者 对于代理来说过于复杂 复制服务器将执行的操作 (不包括存储标题和执行操作) 严格请求头相等 比较后续请求)

我认为解决方案在于J.J.提供的链接,但我不确定它是什么以及如何在PHP中实现它


谢谢你的灯

我认为,如果您通过同一URL提供多种语言服务,并且没有基于
接受语言
标题的
GET
POST
值,那么您必须使用
Vary

如果您使用的是
GET
参数,则不需要vary,只需正确设置缓存头即可

如果要使用相同的文档,但可以更改URL,则可以使用
PATH\u INFO
环境变量模拟其他URL,但使用相同的文档


他的URI头方案只有在您有不同的URL时才有效。

事实上,URL中有一个$\u GET(在这种情况下是不同的URL)或Apache发送的一个隐藏的$\u GET语言变量(通过.htaccess-在这种情况下是相同的URL)。你能详细说明你的第2和第3段吗。我不太明白…如果不同的GET参数是通过网络发送的,那么它们是不同的URL,您不必担心它们的差异。PATH_INFO允许您将额外的路径元素读取到脚本:/foo.php/some/more/INFO将具有PATH_INFO=/some/more/INFO,用于foo.phpPATH_INFO中的代码。它不是一种变体,只是一种对URL进行更多操作的方法。示例:将执行index.php脚本,但路径信息将为“/extra”。这是一个不同的URL,但它是相同的PHP脚本。你不需要改变,因为URL是不同的。哦,我看到它就像一个GET,但没有?和&(并且不会在$\u GET superglobal中)。。。如何在脚本中检索路径信息?使用$\u服务器['REQUEST\u URI']?PHP函数解析url?是的。这很难解释。您只需使用$\u SERVER['PATH\u INFO']——请注意,除非存在其他路径,否则它不存在。在php_info()页面上试用它。:-)它位于Apache环境部分。如果这解决了你的问题,我会把它写下来作为答案。;-)