栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我正在尝试使用Java的HttpURLConnection进行“有条件获取”,但是我从未获得304状态代码

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我正在尝试使用Java的HttpURLConnection进行“有条件获取”,但是我从未获得304状态代码

你们都依赖于服务器配置。

如果获得

Expires
响应头,则仅意味着您无需在指定的到期时间之前请求任何内容。如果获得
Last-Modified
响应头,则意味着您应该可以使用
If-Modified-Since
它来进行测试。如果获得
ETag
响应头,则意味着您应该可以使用
If-None-Match
它来进行测试。

让我们以http://cdn3.sstatic.net/stackoverflow/img/favicon.ico为例(Stackoverflow的favicon图像):

URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();System.out.println(connection.getHeaderFields());

这给出:

{null = [HTTP / 1.1 200 OK],ETag = [“ 9d9bd8b1165cb1:0”],日期=
[2011年8月17日星期三,格林尼治标准时间],Content-Length = [1150],最后修改时间=
[周三,2010年10月6日02:53:46 GMT],内容类型= [图像/ x-图标],连接= [保持活动],接受范围= [字节],服务器=
[nginx / 0.8.36] ,X-Cache = [HIT],Cache-Control = [max-age = 604800]}

现在,使用

If-Modified-Since
与相同的值进行
Last-Modified

URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();connection.setRequestProperty("If-Modified-Since", "Wed, 06 Oct 2010 02:53:46 GMT");System.out.println(connection.getHeaderFields());

这给出了预期的304:

{null = [HTTP / 1.1 304未修改],ETag = [“ 9d9bd8b1165cb1:0”],日期=
[星期三,2011年8月17日17:57:42 GMT],上次修改时间= [星期三,2010年10月6日02: 53:46 GMT],连接=
[keep-alive],服务器= [nginx / 0.8.36],X-Cache = [HIT],Cache-Control = [max-age
= 604800]}

现在,使用

If-None-Match
与相同的值进行
ETag

URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();connection.setRequestProperty("If-None-Match", "9d9bd8b1165cb1:0");System.out.println(connection.getHeaderFields());

出乎意料地 给了200:

{null = [HTTP / 1.1 200 OK],ETag = [“ 9d9bd8b1165cb1:0”],日期=
[2011年8月17日星期三,格林尼治标准时间],Content-Length = [1150],最后修改时间=
[周三,2010年10月6日02:53:46 GMT],内容类型= [图像/ x-图标],连接= [保持有效],接受范围= [字节],服务器=
[nginx / 0.8.36] ,X-Cache = [HIT],Cache-Control = [max-age = 604800]}

更令人惊讶的是,当两个标头都设置为随机垃圾值时

ETag
,服务器仍给出304。这表明http://cdn3.sstatic.net
If-None-Match
后面的服务器完全忽略了。那可能是一个(代理)配置问题,或者是完全有意识地完成的(不是出于明显的原因恕我直言)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号