1

当我在任何浏览器中打开http://en.wikipedia.org/wiki/Category:Births_by_year时,我会看到包含许多子类别的类别页面和一个子页面http://en.wikipedia.org/wiki/Park_Sung-Baek

但是当我用 Java 阅读同一个页面时,我会得到不同内容的类别页面。而不是上面提到的子页面,它包含http://en.wikipedia.org/wiki/User:Mijotoba/Ruth_Stella_Correa_Palacio

怎么可能?为什么维基百科呈现不同的页面?

设置User-Agent没有帮助。

请求“正常”内容的标头

GET http://en.wikipedia.org/wiki/Category:Births_by_year HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ru-RU,zh-CN;q=0.5
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: en.wikipedia.org

请求“修改”内容的标头

GET http://en.wikipedia.org/wiki/Category:Births_by_year HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: en.wikipedia.org
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
4

1 回答 1

2

是的,这看起来像是 Wikipedia 的前端缓存的临时问题。具体来说,当我从浏览器(发送请求标头)请求相关页面Accept-Encoding: gzip, deflate时,我看到的响应包含标头:

Last-Modified: Thu, 13 Sep 2012 16:46:55 GMT

如果我从命令行(不发送标头)使用LWP请求同一页面Accept-Encoding,标头看起来非常不同:

Last-Modified: Sat, 25 Aug 2012 12:52:42 GMT

而且,实际上,后一个响应包含您报告使用 Java 客户端接收到的相同过时内容。

我怀疑发生的事情是,在过去的某个时候,服务器故障导致过时的副本在页面更改时不会从缓存中清除。在这种特殊情况下,您可能可以通过清除页面来修复它。更一般地说,如果您在未来继续看到此类陈旧的缓存页面,您可能需要向Wikipedia 服务器管理员报告问题,以防缓存出现问题需要修复。

附言。你为什么要使用 Java 获取 Wikipedia 前端 HTML 页面?通常,您应该改用MediaWiki API

于 2012-09-17T20:45:02.180 回答