从URL获取会话的到期时间

时间:2015-11-02 13:21:52

标签: java url httpurlconnection session-timeout

我正在尝试从URL获取信息,即知道会话时间是否已从URL过期?例如,如果您尝试连接到{{1从Mediafire下载带有IDM的文件,然后暂停它。在您第一次连接到Mediafire的URL后4小时后,您正在尝试重新连接并恢复下载。不幸的是,你收到一条消息说:

  

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

或此消息:

  

该网站可能使用的临时链接不能被请求两次,或者在会话结束后的一段时间后过期。

这意味着Mediafire为我们提供了重新连接的最长时间。所以你必须在那段时间内恢复下载。

我试过了:

URL

输出:

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

那么,我怎么知道会话时间何时到期?

提前感谢。

1 个答案:

答案 0 :(得分:1)

根据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

  

由于源服务器并不总是提供明确的到期时间,      缓存可以在显式时间分配启发式到期时间      未指定,使用使用其他标头字段的算法      估计合理的值(例如最后修改时间)      到期时间。本规范没有具体说明      算法,但确实对结果施加了最坏情况限制。