"GET方法找不到资源,返回405状态码并带有Allow头部,在进行POST请求时出现此问题"

4

我遇到了访问我的rest端点的问题。我试图使用POST请求进行登录,但一直收到以下错误信息:

ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-36) RESTEASY002010: Failed to execute: javax.ws.rs.NotAllowedException: RESTEASY003650: No resource method found for GET, return 405 with Allow header

我正在使用Postman进行测试,所以我非常确定我实际上创建了一个POST请求而不是GET请求。

在服务器上,我使用CORS过滤器,并查看响应中的标头,我认为它正在工作:

Access-Control-Allow-Credentials →true
Access-Control-Allow-Headers →origin, content-type, accept, authorization
Access-Control-Allow-Methods →GET, POST, PUT, DELETE, OPTIONS, HEAD
Access-Control-Allow-Origin →*
Access-Control-Max-Age →1209600
Allow →POST, OPTIONS
Allow →GET, POST, PUT, DELETE, OPTIONS, HEAD
Connection →keep-alive
Content-Length →0
Date →Fri, 16 Feb 2018 17:47:04 GMT
Server →nginx/1.10.3 (Ubuntu)
X-Powered-By →Undertow/1

(是的,我知道允许所有来源和几乎永远的最大年龄不是最安全的想法。但是当我解决当前问题时,我可以进一步限制它。)

至于服务器设置:我正在运行Wildfly 11.0.0 Alpha1和Nginx,用于Angular5应用程序,最终应该完成登录。

有任何建议可以寻找问题的原因吗?


你似乎是对的。有一个POST请求和一个GET请求。这是从哪里来的? - Peter Frisch
只是猜测:是否有像Spring Security这样的安全框架,将原始POST请求视为未经身份验证,并重定向到登录页面?如果是这样,您需要使您的请求经过身份验证,或者配置安全框架以允许此端点的非身份验证请求。 - Roman Puchkovskiy
3
我觉得我找到了原因,但并不确定GET请求是从哪里发出的。我配置了我的nginx将所有HTTP请求转发到HTTPS。我的原始POST请求是通过HTTP完成的,所以我收到了一个301响应,但是我对网络知识的了解就止步于此......谁发送了无法在我的Wildfly上执行的GET请求? - Peter Frisch
2
再猜一次:用户代理(在这种情况下是Postman?)可能会在收到301响应时使用GET请求进行重定向,即使最初的请求是POST。 - Roman Puchkovskiy
嗯...我们可能永远不会知道;)但是感谢您的帮助。我非常感激! - Peter Frisch
显示剩余2条评论
1个回答

2

当我将一个GET请求更新为POST请求时,遇到了完全相同的错误。我没有在Postman中更新端点,然后尝试运行它,这时候就会抛出错误。将Postman中的请求类型更新为与我的代码匹配可以清除错误。请仔细检查您的请求类型是否匹配,并确保点击保存(Postman可能会变得棘手)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接