我正在尝试从URL获取信息,即要知道会话时间何时已从URL过期?例如,如果您尝试连接到URL并从Mediafire用IDM下载文件,则可以暂停它。自您首次与Mediafire的URL连接以来的4小时之后,您正在尝试重新连接并恢复下载。不幸的是,您收到一条消息:


403:禁止您无权访问此服务器上的file.zip。


或此消息:


可能此站点使用的临时链接不能被请求两次,也不能在会话完成后的一段时间后过期。


这意味着Mediafire给了我们最大的重新连接时间。因此,您必须在该时间间隔内恢复下载。

我努力了:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
String exp = urlConnection.getHeaderField("Expires");
System.out.println("Expire date: " + exp);


输出:

Expire date: null // while responseCode is 200 OK


有时,使用不同的URL,我得到了Tue, 03 Nov 2015 03:41:09 PST

那么,我怎么知道会话时间肯定已过期?

预先感谢。

最佳答案

根据RFC,并不总是有过期标头字段。

Section 5.3


没有时钟的原始服务器不得生成Expires字段
除非其值表示过去的固定时间(总是过期)
或其值已由系统与资源关联,或
用户使用可靠的时钟。


Furthermore it defines the Freshness in 4.2


如果原始服务器希望强制缓存来验证每个
请求,它可以将过去的显式到期时间分配给
表示响应已经过时。兼容的缓存将
通常在将其重新用于之前验证过时的缓存响应
后续请求(请参阅第4.2.4节)。

由于原始服务器并不总是提供明确的到期时间,
缓存也可以使用启发式方法来确定到期时间
在某些情况下的时间(请参阅第4.2.2节)。


So in order to get a somewhat reliable headerfield you can calculate it


由于原始服务器并不总是提供明确的到期时间,
当明确的时间时,缓存可以分配启发式到期时间
未指定,使用使用其他标头字段的算法
值(例如上次修改时间)以估算合理的值
到期时间。该规范未提供具体
算法,但会对结果施加最坏情况的约束。

关于java - 从URL获取 session 的到期时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33478609/

10-11 22:47
查看更多