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 适配器响应头缓存控制的主要内容,如果未能解决你的问题,请参考以下文章

HTTP缓存控制 总结

[nginx]lua控制响应头

从HTTP响应头看各家CDN缓存技术

常用HTTP消息头

Flutter 使用 http 响应头缓存 JSON 响应

Spring控制器没有获得缓存控制头