我正在试验HttpClient中的缓存,以便更好地理解这个主题。
我编写了一个命令行点网工具,它使用单个HttpClient并可以向服务器发送GET请求,显示响应头。我还有一个Python Web服务器(基于BaseHTTPServer),每当它在请求中看到if-modified-since标头时返回304。
当我第一次使用我的工具点击服务器时,这就是我所看到的:
HTTP:>GET http://localhost:7777
Status 200 OK (OK in 00:00:01.7794986):
Cache-Control = must-revalidate, no-cache
Date = Sat, 08 Jul 2017 16:41:28 GMT
Server = BaseHTTP/0.3, Python/2.7.13
Content-Type = text/html
Last-Modified = Sat, 08 Jul 2017 16:41:24 GMT
当我几秒钟后重复请求时(发送工具的相同实例,因此HttpClient的同一个单例实例),请求明显快得多,我看到了:
HTTP:>GET http://localhost:7777
Status 200 OK (OK in 00:00:00.1773793):
Cache-Control = must-revalidate, no-cache
Date = Sat, 08 Jul 2017 16:42:40 GMT
Server = BaseHTTP/0.3, Python/2.7.13
Age = 0
Content-Length = 24000000
Content-Type = text/html
Last-Modified = 2017-07-08 12:41:24.187000
查看BaseHTTPServer的输出,我可以看到我的服务器第一次执行生成请求的“工作”并返回200和请求正文。第二次,它只返回一个标题为304。
但是HttpClient 不告诉我304,而是报告200.当我在请求之间等待至少10秒时,显示年龄为0。它引入了Content-Length标头,这不在最初的响应中。
任何人都可以告诉我,HttpClient上的第二个响应200而不是304的正确和预期状态代码是什么?为什么Age标题永远不会超过0?而且,除了响应的明显速度之外,我如何在客户端确定在此交易过程中实际发生了什么?