Worklight适配器响应标头缓存控制

时间:2014-06-19 10:52:04

标签: caching ibm-mobilefirst cache-control worklight-adapters worklight-server

我创建了一个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标头信息,因此不会缓存响应。

如何启用缓存? 如果你注意到" Expires"它也是在1997年,我不知道如何以及从何处开始这个日期。

提前致谢。

1 个答案:

答案 0 :(得分:0)

Worklight从后端服务返回标头不变。如果您仍想更改标题,可以在Worklight适配器中执行此操作。 我从下面的解决方案中获得灵感:Handling Backend Responses in Adapters

我创建了标准的Worklight cnn适配器(New - > Worklight Adapter - > HTTP Adapter)并为其命名(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”)。

我想这会回答你的问题。请告诉我。