Worklight 适配器响应头缓存控制
Posted
技术标签:
【中文标题】Worklight 适配器响应头缓存控制【英文标题】:Worklight adapter response header cache control 【发布时间】:2014-06-19 10:52:04 【问题描述】:我创建了一个 HTTP 适配器。
效果很好。
这是 rss getStories 的示例
function getStories(interest)
path = getPath(interest);
var input =
method : 'get',
returnedContentType : 'xml',
path : path
;
return WL.Server.invokeHttp(input);
我得到成功的响应,标题信息如下:
Cache-Control →no-cache, no-store, must-revalidate
Content-Length →
Content-Length
The length of the response body in octets (8-bit bytes)
9220
Content-Type →application/json; charset=UTF-8
Date →Thu, 19 Jun 2014 12:46:12 GMT
Expires →Sat, 26 Jul 1997 05:00:00 GMT
P3P →policyref="/w3c/p3p.xml", CP="CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE"
X-Powered-By →Servlet/3.0
客户端应用读取 HTTP 标头信息,因此不会缓存响应。
如何启用缓存? 另外,如果您注意到“过期”也是 1997 年,我不知道它是如何以及从哪里开始的。
【问题讨论】:
只是对过期日期的评论,我认为当服务器想要使cookie过期时,它会设置一个过去的日期以强制客户端使cookie过期。 我从服务获得的标头响应有一些到期日期,可以说提前 2 天。但该标头成为适配器响应的有效负载。并且对客户端的标头响应具有无效的日期和缓存控制。所以据我了解,Worklight 服务器上应该有一些配置会在其中发挥作用。 【参考方案1】:Worklight 从后端服务返回标头不变。如果您仍然想更改标题,可以在 Worklight 适配器中进行。 我从这篇文章中得到以下解决方案的灵感:Handling Backend Responses in Adapters。
我创建了标准 Worklight cnn 适配器(新建 -> Worklight 适配器 -> HTTP 适配器)并为其命名(changeHeadersAdapter)。
然后在 changeHeaderAdapter-impl.js 中,我将 getStories 过程更改为:
function getStories(interest)
path = getPath(interest);
var input =
method : 'get',
returnedContentType : 'xml',
path : path
;
var backendResponse = WL.Server.invokeHttp(input);
if(backendResponse.isSuccessful && backendResponse.statusCode == 200) //For simplicity, considering only 200 as valid
//Do something interesting with the data
backendResponse.responseHeaders['Cache-Control'] = "public, max-age=0";
else
backendResponse.isSuccessful = false; //Overwrite to failure
return backendResponse;
如您所见,我将 Cache-Control 参数更改为“public”(通常它会返回“private”)。
我想这回答了你的问题。请告诉我。
【讨论】:
以上是关于Worklight 适配器响应头缓存控制的主要内容,如果未能解决你的问题,请参考以下文章