是否可以转发更改请求方法的请求?

Posted

技术标签:

【中文标题】是否可以转发更改请求方法的请求?【英文标题】:Is it possible to forward a request changing the request method? 【发布时间】:2011-05-31 12:13:35 【问题描述】:

我正在研究一个只允许 GET 请求的网关,而它后面的 REST 端点能够接受各种方法(POST、PUT、DELETE、OPTIONS)。因此,我试图将请求方法作为参数传递,并具有一个过滤器,该过滤器使用正确的方法转发请求。从我在规范中可以看到,它只允许转发请求而不进行任何修改:

request.getRequestDispatcher(route).forward(request, response)

有什么解决方法吗?

注意:重定向对我来说不是一个选项。

【问题讨论】:

【参考方案1】:

如果您有一个处理 RESTful 服务的 Rest servlet(通常是这种情况),您可以扩展它并覆盖 service 方法。您可以在那里调用doPost(..)doPut(..) 等,具体取决于您想要的参数。 HttpServlet 的默认实现使用request.getMethod()

您可以做的另一件事(不太可取)是让您的过滤器使用URL.openConnection(或apache commons http 组件)向端点发出一个新请求,并将该内部请求的结果流式传输回客户端。在那里你可以指定请求方法。

无论如何,我认为你应该尝试克服网关的限制,因为它会让你处于非常尴尬的境地。

【讨论】:

以上是关于是否可以转发更改请求方法的请求?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web API更改请求URI(重定向到另一个方法)

转发和重定向的区别

Servlet重定向和请求转发

无法使用Charles Web Proxy作为反向代理接收和转发远程请求

nginx如何实现请求转发,方法步骤如下

HTTP代理服务器是否修改请求数据包?