Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http Servlet响应ETag缓存_Http_Caching_Servlets_Smartgwt_Etag - Fatal编程技术网

Http Servlet响应ETag缓存

Http Servlet响应ETag缓存,http,caching,servlets,smartgwt,etag,Http,Caching,Servlets,Smartgwt,Etag,我想使用ETag缓存请求的版本,并将304个未修改的响应返回给客户端,以便客户端可以使用最后一个缓存的页面 我的url是这样的,它返回一个json响应 "http://server/WEB_GWT/prmCall?prmName=PRM_SIS_PROG_REG_STATUS" 在处理此请求的servlet中,我总是将ETag信息存储为url paramPRM_SIS_PROG_REG_STATUS的版本。 所以返回到客户机的响应头是 HTTP/1.1 200 OK Date: Sat, 07

我想使用ETag缓存请求的版本,并将304个未修改的响应返回给客户端,以便客户端可以使用最后一个缓存的页面

我的url是这样的,它返回一个json响应

"http://server/WEB_GWT/prmCall?prmName=PRM_SIS_PROG_REG_STATUS"
在处理此请求的servlet中,我总是将ETag信息存储为url paramPRM_SIS_PROG_REG_STATUS的版本。 所以返回到客户机的响应头是

HTTP/1.1 200 OK
Date: Sat, 07 Dec 2013 16:07:49 GMT
Server: IBM_HTTP_Server
ETag: "5"
Last-Modified: Sat, 07 Dec 2013 16:07:49 GMT
Content-Length: 356
Keep-Alive: timeout=10, max=99
Connection: Keep-Alive
Content-Type: application/json
Content-Language: tr-TR
在我的下一个请求中,我希望这个请求头包含“If None Match”头以返回请求的版本,但我无法获取这个头参数。你知道我为什么拿不回我的ETag吗

我的下一个请求头是

 GET /OZU_GWT/prmCall?prmName=PRM_SIS_PROG_REG_STATUS HTTP/1.1
Host: 10.100.199.103
Connection: keep-alive
Cache-Control: max-age=0
If-Modified-Since: Thu, 01 Jan 1970 00:00:00 GMT
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
Accept: */*
Referer: http://10.100.199.103/OZU_GWT/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=0000kvocMBmjoWPbpKt_VAsDUMv:-1

为了缓存您的请求,您需要包含“cache Control”指令,并指定响应的缓存方式和缓存时间

HTTP/1.1200正常
日期:2013年12月7日星期六16:07:49 GMT
服务器:IBM_HTTP_服务器
ETag:“5”
缓存控制:公共,最大年龄=86400
内容长度:356
保持活动状态:超时=10,最大=99
连接:保持活动状态
内容类型:应用程序/json
内容语言:tr tr


在这里,缓存控制头表示内容可以由“公共”缓存服务器存储,并且需要重新验证内容的持续时间为86400秒。因此,当您再次刷新页面时,“If None Match”和“If Modified Since”条件标头将启动并使用缓存的数据。

经过一些调查,我发现SmartGWT框架请求被发送到服务器时带有bypassCache:true标志,该标志发送的是没有任何缓存标头的xhr请求。我通过重写DataSource类中的以下方法来修复它

@Override
protected Object transformRequest(DSRequest dsRequest) {
    dsRequest.setBypassCache(false);

您的etag语法不正确。它需要双引号。我将Etag更改为双引号,但它仍然返回相同的请求。我更新了我的问题。我不明白的是为什么我得到最后修改的时间0(1970…)