我有一个角度客户端正在对我的服务器进行POST调用。此服务器需要通过POST调用另一台服务器(server2)来获取响应,并将响应从server2传递给客户端。我尝试了以下方法。
public Response call(){
String server2Url = "http://server2/path"
RestClient restClient = new RestClient();
return Response.fromResponse(restClient.post(server2Url)).build();
}
但是在上面的情况下,HTTP状态代码被转移但不是响应主体。响应正文是空的
然后我尝试了:
public Response call() throws URISyntaxException{
String server2Url = "http://server2/path"
RestClient restClient = new RestClient();
return Response.temporaryRedirect(new URI(server2Url)).build();
}
但浏览器客户端最终对server2Url进行OPTIONS调用而不是POST
我试过了。
public Response call() throws URISyntaxException{
String server2Url = "http://server2/path"
RestClient restClient = new RestClient();
return Response.seeOther(new URI(server2Url)).build();
}
但最终会进行GET调用而不是POST。
如何让浏览器客户端对server2进行POST调用
答案 0 :(得分:0)
我刚刚找到的RFC 2616 here涵盖了您要完成的任务。
如果收到302状态代码以响应GET或HEAD以外的请求,则除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件。发出的。
因此,如果您没有实施客户端,这看起来就不在你手中了。
编辑因为我被告知不得再使用RFC 2616。
RFC 7231声明:
找到302302(Found)状态代码表示目标资源 暂时驻留在不同的URI下。自重定向 有时可能会改变,客户应该继续使用 未来请求的有效请求URI。
服务器应该在响应中生成Location头字段 包含不同URI的URI引用。用户代理可以 使用位置字段值进行自动重定向。服务器的 响应有效负载通常包含一个短的超文本注释 指向不同URI的超链接。
注意:由于历史原因,用户代理可以更改请求 从POST到GET的方法,用于后续请求。 如果这样 行为是不受欢迎的,307(临时重定向)状态代码 可以改为使用。
什么是:
307临时重定向
307(临时重定向)状态代码表示目标 资源临时驻留在不同的URI和用户代理之下 如果执行自动
,则不得更改请求方法 重定向到该URI。由于重定向可能会随时间而变化, 客户端应该继续使用原始的有效请求URI 未来的要求。服务器应该在响应中生成Location头字段 包含不同URI的URI引用。用户代理可以 使用位置字段值进行自动重定向。服务器的 响应有效负载通常包含带有
的短超文本注释 指向不同URI的超链接。注意:此状态代码与302(Found)类似,但除外 不允许将请求方法从POST更改为GET 。这个 规范没有定义301的等效对应物(移动 然而,([RFC7238])定义状态代码308 (永久重定向)为此目的)。
答案 1 :(得分:0)
您可以使用JAX-RS中的Html Client发出自己的请求(从server1到server2),然后将响应从server2返回到角客户端。
public Response call() {
String url = "server2 url";
Response response;
try {
response = ClientBuilder
.newClient()
.target(url)
.request()
.post(Entity.json(null), Response.class);
}
catch (Exception e) {
// Whatever you want
return null; // or error
}
// Return the status returned by server 2
return Response.status(response.getStatus()).build();
}