【问题标题】:Cannot override "Connection" header in XPages' HttpServletResponse无法覆盖 XPages 的 HttpServletResponse 中的“Connection”标头
【发布时间】:2016-08-23 13:01:00
【问题描述】:

在我的 XPages 应用程序中,我希望在从一个 XPage 向另一个 XPage 发送 XMLHttpRequest 时保持连接处于活动状态。因此,我将“Connection”标头设置为“keep-alive”。

在客户端我有:

xhr=new XMLHttpRequest();
xhr.setRequestHeader("Connection","keep-alive");

在服务器端(在响应 XPage 的 afterRenderResponse 事件中)我使用:

response=facesContext.getExternalContext().getResponse();
response.setHeader("Connection","keep-alive");

在检查请求和响应时(使用 FireBug),结果发现请求标头包含“Connection = keep-alive”(如预期的那样),但响应标头包含“连接 = 关闭”。

有人知道如何覆盖这个标题吗?

【问题讨论】:

  • 从来没有专门这样做过,但很可能是 XPages 引擎简单地覆盖了标题。如果您想更好地控制请求(和标头)的输入和输出,请考虑在 NSF 中使用 servlet,如 Eric McCormick 所述:edm00se.io/servlet-series
  • @MarkLeusink:感谢您的提示,但是使用 XPage 进行响应的好处是我可以在 afterRenderResponse 事件中直接使用我所有的 SSJS 代码。我想如果我要创建一个 Java servlet,我必须付出很多努力才能从那里运行 SSJS。

标签: jsf servlets http-headers xmlhttprequest xpages


【解决方案1】:

解决方案:在 xsp.properties 文件集xsp.compress.mode=gzip 中。这相当于在 Xsp 属性/页面生成下设置 Compression = "GZip, set content length"


解释:我的应用程序使用服务器默认值进行压缩,即gzip-nolength。当未设置内容长度时,XPage 的响应 (XspHttpServletResponse) 似乎总是将“Connection”标头设置为“close”。设置内容长度后,“Connection”标头不再存在,默认情况下连接保持活动状态。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多