gpt4 book ai didi

java - HTTP 连接错误 : close header

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:27 25 4
gpt4 key购买 nike

我作为练习构建的小型 reSTLet 服务遇到了一个奇怪的问题。该应用程序应该在 HTTP POST 上使用一些 XML(specifically TwiML,因为它适用于 Twilio)进行响应,并且它适用于独立请求。但是,当 Twilio 请求时,响应永远不会完成并且会超时。在将来自 Twilio 的流量与正在运行的流量(使用伪造的 HTML 表单)进行比较后,我将问题隔离到“连接:关闭” header ,并且可以仅使用 curl 命令行来重现它。这是有效的请求:

curl -i -H 'Connection: keep-alive' -X POST -d "name=value" http://localhost:8020/hello

这是刚刚挂起的那个:

curl -i -H 'Connection: close' -X POST -d "name=value" http://localhost:8020/hello

如果我终止服务器,则 curl 会显示“(52) 来自服务器的空回复”。这是我在 ServerResource 中使用的代码:

@Post
public Representation hello(Representation repr)
{
Representation result = new StringRepresentation(("<Response>\n"+
" <Say>Hello. This is a test.</Say>\n"+
"</Response>"), MediaType.APPLICATION_XML);
return result;
}

我在这里做的事情明显有问题吗?我使用的是 reSTLet-2.0,但也尝试使用 2.1m1,结果相同。非常感谢您的快速回复,因为我在截止日期前完成了练习。

最佳答案

不确定您是否找到了错误的解决方案,但我在 ReSTLet V 2.0.4 中遇到了同样的问题。

当使用默认服务器运行 reSTLet 时。此处服务器确实假设响应流不可写,因此不会使用实体进行响应。

作为快速修复,我找到了

  org.restlet.engine.http.connector.Connection

并将 canWrite() 方法更改为

public boolean canWrite() { 
return (
(getState() == ConnectionState.OPEN)
|| (getState() == ConnectionState.CLOSING))
&& !isOutboundBusy()
&& (getOutboundMessages().size() > 0);
}

从原来的

public boolean canWrite() { 
return (getState() == ConnectionState.OPEN) && !isOutboundBusy()
&& (getOutboundMessages().size() > 0);
}

不确定这是否是一个很好的修复,但在重新编译 reSTLet 模块后,它现在似乎可以正常工作。问题似乎是在指定 HTTP header “连接:关闭”时,流默认处于关闭状态。

希望对你有帮助

乔伊

reSTLet论坛上的问题看这里

http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2698048

关于java - HTTP 连接错误 : close header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com