我正在尝试从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
。
那么,我怎么知道会话时间何时到期?
提前感谢。
答案 0 :(得分:1)
根据RFC,并不总是有一个过期的标题字段。
没有时钟的原始服务器不得生成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
由于源服务器并不总是提供明确的到期时间, 缓存可以在显式时间分配启发式到期时间 未指定,使用使用其他标头字段的算法 估计合理的值(例如最后修改时间) 到期时间。本规范没有具体说明 算法,但确实对结果施加了最坏情况限制。