Glassfish 7.0.12部署Java EE应用时URL末尾自动加问号的问题求助
问题:前端按钮点击触发页面重载,Referer末尾带问号导致NS_BINDING_ABORTED错误?
我正在开发首个正式Web服务器项目,此前一直使用Node.js服务器,因需接入自建MySQL数据库,本次选择纯Java后端。
- 后端基于Java EE(Java 17)项目,部署在云端Ubuntu服务器的Glassfish 7.0.12中,通过NGINX作为HTTPS反向代理,这是我在该Linux服务器上部署的第四个同类服务。
- 前端采用Angular 16.x构建,目前仅包含一个着陆页和两个按钮,用于调用两个后端服务(可通过浏览器地址栏或Postman直接调用)。
当前状态:
- 应用已成功部署到Glassfish服务器,可通过HTTPS正常访问着陆页;
- 两个后端服务通过Postman或浏览器地址栏调用完全正常;
- 点击前端按钮时,UI会瞬间闪烁并重新加载整个着陆页,浏览器控制台显示
NS_BINDING_ABORTED错误。
排查发现:
与其他项目不同,HTTP请求头中的Referer字段为https://my-domain/my-context-root/?,末尾多了一个问号,而我其他项目的着陆页均无此后缀。我猜测这个问号是问题关键,根据CORS的同源规则校验逻辑,Referer会被用于校验,多余的问号可能导致校验失败。另外看起来请求并未离开浏览器,因此我添加的后端CORS过滤器并未起到作用。
请问:这个问号来自何处?如何移除它?
相关截图
错误发生后的浏览器控制台:

index.html内容:

后端CORS相关代码
CORS过滤器实现
package org.my-app_server.base; import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerResponseContext; import jakarta.ws.rs.container.ContainerResponseFilter; import jakarta.ws.rs.ext.Provider; @Provider public class CorsResourceFilter implements ContainerResponseFilter { @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) { responseContext.getHeaders().putSingle("Access-Control-Allow-Origin", "*"); responseContext.getHeaders().putSingle("Access-Control-Allow-Credentials", "true"); responseContext.getHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); responseContext.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept"); } }
过滤器注册代码
package org.my-app_server.base; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; import java.util.HashSet; import java.util.Set; @ApplicationPath("/api") public class RRSSApplication extends Application { @Override public Set<Class<?>> getClasses() { final Set<Class<?>> resources = new HashSet<>(); resources.add(CorsResourceFilter.class); return resources; } }
内容的提问来源于stack exchange,提问作者doubleplusgood1984
相关产品推荐
相关产品推荐

