当我将我的Java应用程序部署到JBoss WildFly 10(将.war放入deployments文件夹),然后尝试通过客户端访问我的war webservices时,我总是得到一个状态码302。但是,如果我通过Eclipse IDE(运行--〉在服务器上运行)在同一个JBoss WildFly上部署相同的应用程序,然后访问我的war webservices,一切都工作得很好,很成功。有谁知道这是为什么,以及如何纠正它?
.war
e0uiprwp1#
可能你的浏览器从本地缓存返回了一个结果。302发现是重定向,但不总是路径或协议重定向;如果浏览器在磁盘上找到了你所请求的资源,而不是去Web服务器获取它,它也会给予302。除非服务器另有指示,否则浏览器会积极地缓存它所能缓存的任何资源。如果你只是在进行开发测试,你可以硬刷新(例如大多数浏览器Shift-F5)或在测试时显式禁用缓存(Chrome/Edge开发者控制台-〉网络选项卡-〉点击“禁用缓存”)。在本地,您可能有一个不从本地主机缓存的规则,或者Eclipse可能会为您清除该高速缓存。如果您确认问题出在缓存上,您需要让服务器告诉客户端不可以无限期地缓存。查看MDN的缓存控制页以查看可用的缓存指令。这里有很多选项。请考虑应用中的更改,以及不缓存会给服务器和客户端带来什么样的负担。它有一个构建链,可以根据文件内容的散列来命名大多数文件,因此大多数文件可以无限期地缓存,因为如果内容更改,名称也会更改。index.html文件是一个如果缓存会导致问题的文件,所以我不得不攻击它。你可能也有java代码为你的页面服务?如果是这样,你可以从那里设置你的缓存控制响应头。如果你想让Jboss/Wildfly服务器为你设置响应头,或者你需要对静态资源执行缓存控制,这些静态资源在你更新它们时会改变内容但不改变名称,那么你可以设置一个过滤器来为你做这些。从控制台,在config-〉subsystems-〉undertow-〉filters-〉view-〉response header下添加一个响应头过滤器。选择cache-control并按照MDN引用填写。然后,在config-〉undertow-〉servers-〉(your server)-〉hosts-〉(your host)-〉filters下,将过滤器添加到主机。您必须定义一个 predicate ,如here所述。您可以以这个 predicate 作为示例,它匹配部署到/static路径的任何内容:
path-prefix('/static')
修改后,需要刷新或禁用该高速缓存,以便浏览器再次与服务器通信并获得新的缓存控制头。您可以使用开发工具确认响应头是否到来,以及后续对资源的调用是否获得200或304(在无缓存指令的情况下,未修改)
1条答案
按热度按时间e0uiprwp1#
可能你的浏览器从本地缓存返回了一个结果。302发现是重定向,但不总是路径或协议重定向;如果浏览器在磁盘上找到了你所请求的资源,而不是去Web服务器获取它,它也会给予302。除非服务器另有指示,否则浏览器会积极地缓存它所能缓存的任何资源。如果你只是在进行开发测试,你可以硬刷新(例如大多数浏览器Shift-F5)或在测试时显式禁用缓存(Chrome/Edge开发者控制台-〉网络选项卡-〉点击“禁用缓存”)。在本地,您可能有一个不从本地主机缓存的规则,或者Eclipse可能会为您清除该高速缓存。
如果您确认问题出在缓存上,您需要让服务器告诉客户端不可以无限期地缓存。查看MDN的缓存控制页以查看可用的缓存指令。这里有很多选项。请考虑应用中的更改,以及不缓存会给服务器和客户端带来什么样的负担。它有一个构建链,可以根据文件内容的散列来命名大多数文件,因此大多数文件可以无限期地缓存,因为如果内容更改,名称也会更改。index.html文件是一个如果缓存会导致问题的文件,所以我不得不攻击它。你可能也有java代码为你的页面服务?如果是这样,你可以从那里设置你的缓存控制响应头。
如果你想让Jboss/Wildfly服务器为你设置响应头,或者你需要对静态资源执行缓存控制,这些静态资源在你更新它们时会改变内容但不改变名称,那么你可以设置一个过滤器来为你做这些。从控制台,在config-〉subsystems-〉undertow-〉filters-〉view-〉response header下添加一个响应头过滤器。选择cache-control并按照MDN引用填写。然后,在config-〉undertow-〉servers-〉(your server)-〉hosts-〉(your host)-〉filters下,将过滤器添加到主机。您必须定义一个 predicate ,如here所述。您可以以这个 predicate 作为示例,它匹配部署到/static路径的任何内容:
修改后,需要刷新或禁用该高速缓存,以便浏览器再次与服务器通信并获得新的缓存控制头。您可以使用开发工具确认响应头是否到来,以及后续对资源的调用是否获得200或304(在无缓存指令的情况下,未修改)