JBoss WildFly + 状态码 302

问题描述 投票:0回答:1

当我将我的 Java 应用程序部署到 JBoss WildFly 10(将

.war
放入部署文件夹),然后尝试通过客户端访问我的 war web 服务时,我总是得到一个状态代码 302

但是,如果我在同一个 JBoss WildFly 上通过 Eclipse IDE(运行-->在服务器上运行)部署相同的应用程序,然后访问我的 war web 服务,一切正常且成功。

有谁知道这是为什么,我该如何纠正它?

eclipse jboss wildfly wildfly-10
1个回答
0
投票

您的浏览器可能正在从其本地缓存返回结果。 302 Founds 是重定向,但并不总是路径或协议重定向;如果浏览器在磁盘上找到您要求的资源而不是去 Web 服务器去获取它,它也可以给出 302。除非服务器另有指示,否则浏览器会主动缓存任何它能缓存的内容。如果您只是进行开发测试,您可以进行硬刷新(例如大多数浏览器 Shift-F5)或在测试时明确禁用缓存(Chrome/Edge 开发控制台 -> 网络选项卡 -> 单击“禁用缓存”)。在你的本地你可能有一个规则不从本地主机缓存或者 Eclipse 可能会为你清除缓存。

如果你确认问题出在缓存上,你会希望你的服务器告诉客户端它不能无限期地缓存。回顾 MDN 的缓存控制页面 查看可用的缓存指令。你在这里有很多选择。考虑你的应用程序发生了什么变化,以及没有缓存会给服务器和客户端带来什么样的负担。我最近使用 Electron 应用程序完成了此操作。它有一个构建链,可以根据文件内容的散列来命名大多数文件,因此大多数文件可以无限期缓存,因为如果内容更改,名称也会更改。 index.html 文件是唯一一个如果被缓存就会导致问题的文件,所以我不得不攻击它。您可能还使用 Java 代码为您的页面提供服务?如果是这样,您可以从那里设置缓存控制响应标头。

如果您希望 Jboss/Wildfly 服务器为您设置响应标头,或者您需要对静态资源实施缓存控制,这些静态资源在您更新它们时会更改内容但不会更改名称,那么您可以设置一个过滤器来为您执行此操作。在控制台中,在 config->subsystems->undertow->filters->view->response header 下添加一个响应头过滤器。选择缓存控制并根据 MDN 参考资料 填写。然后在config->undertow->servers->(your server)->hosts->(your host)->filters下,给host添加过滤器。您必须按照 here 中的说明定义谓词。您可以以此谓词作为示例开始,它匹配部署到 /static 路径的任何内容:

path-prefix('/static')

进行更改后,您需要刷新或禁用缓存,以便浏览器再次与服务器通信并获取新的缓存控制标头。您可以使用开发工具确认响应标头来了,随后对资源的调用获得 200 或 304(未修改,在无缓存指令的情况下)

© www.soinside.com 2019 - 2024. All rights reserved.