【问题标题】:what is Via in HTTP Response and how to remove it?HTTP 响应中的 Via 是什么以及如何删除它?
【发布时间】:2014-02-19 12:15:10
【问题描述】:

我从我的机器向服务器上的PHP 文件发出curl 请求,它返回以下响应。

HTTP/1.1 200 OK
Content-Length: 317
Content-Type: application/json
Server: Microsoft-IIS/7.5
Last-Modified: Wed, 19 Feb 2014 11:30:16 GMT
Via: 1.1 SC10100_83_75
Connection: keep-alive
Date: Wed, 19 Feb 2014 12:00:47 GMT

问题是,这似乎是在缓存我的请求并且没有返回最新的值。我怀疑这是由于 Via 标头(读到它是关于代理的)。它是什么以及如何删除它?

【问题讨论】:

  • 作为一个简单的谷歌搜索显示Via 标头是代理的签名。这也解释了为什么事情可能会被缓存:这就是代理经常被用来做的事情。
  • 一件简单的事情(假设您无法控制基础架构)是向您请求的 URL 添加一个“cachebuster”参数。例如。将&cachebuster=<<timestamp>>添加到URL的末尾,其中<<timestamp>>是基于当前时间的数字(例如php的time()
  • 我实际上可以控制基础设施,因为我正在运行 Amazon EC2 并且我具有管理员访问权限。我不记得故意启用它,那我怎么禁用代理呢?

标签: php curl iis-7 webserver iis-7.5


【解决方案1】:

看起来像 via - 表示您已通过代理进行路由 - 但是 - 这只是信息 - 您需要确保正确设置缓存标头,以便代理采取正确的操作。

目前没有为您的请求设置缓存标头。

如果您不希望它被缓存 - 然后设置以下标头:

Cache-Control: no-cache

http://www.w3.org/Protocols/HTTP/Issues/cache-private.html

【讨论】:

  • 手动设置标题后似乎可以工作。但是我从 Objective-C 调用 php 文件。有没有办法在 web 服务器上将 no-cache 设置为默认值?
  • 取决于 web 服务器 - 我不是 IIS 专家 - 但是如果你可以修改 PHP 脚本,你只需要添加 header 命令 - ie2.php.net/manual/en/function.header.php
  • 看来你也可以在 IIS 中设置默认标头 technet.microsoft.com/en-us/library/cc753195(v=ws.10).aspx
  • 实际上,这似乎也不是 Web 服务器故障,因为我尝试在 curl 上使用 localhost 上的同一个文件,它工作得很好。只是由于某种原因,当我从外部请求文件时,它正在通过代理。
  • 如果您需要连接的服务器将通过代理访问 - 那么您确实需要正确设置标头。无论如何,最好的做法是这样做 - 因为互联网上潜伏着许多代理。如果代理被允许缓存 - 那么网络服务器甚至不会获得请求的可见性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多