如何更改restlet中的标准头值?

时间:2013-07-30 22:45:52

标签: http http-headers restlet http-get restlet-2.0

我得到以下内容:

@Get
public String represent(Variant variant) throws ResourceException
{
    String text = "returntext";

    text+="\r\n";
    return text;
}

调用此服务的响应:

CFG - HTTP / 1.1 200好的 Accept-Ranges:字节 Content-Type:text / plain; charset = UTF-8 日期:星期一,2013年7月29日19:59:37 GMT 服务器:Restlet-Framework / 2.0.9 变化:Accept-Charset,Accept-Encoding,Accept-Language,Accept 内容长度:118 连接:保持活力

如何更改连接标头值以关闭?

我认为这可能是一个restlet bug。

1 个答案:

答案 0 :(得分:0)

服务器是否关闭连接取决于客户端请求是否要求关闭连接。

以下是服务器代码示例:

import org.restlet.data.Form;
import org.restlet.data.MediaType;
import org.restlet.data.Parameter;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
import org.restlet.util.Series;

public class TestRestlet extends ServerResource {
    @Get
    public String getImpl(){
        return "Sample Response Text\r\n";
    }
}

以下是我在linux命令行上的内容(仅使用telnet): [请注意,每个请求中request-header的最后一行后跟2 newlines ] [为避免混淆,某些请求不包含request-body。]

[root@mylinuxserver]# telnet 172.16.101.34 6060
Trying 172.16.101.34...
Connected to win7comp01 (172.16.101.34).
Escape character is '^]'.
GET /TestRestlet HTTP/1.1
Host: 172.16.101.34:6060

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=C2E77F4D0437E525A0FC66498EF09E8B; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:25:44 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22

Sample Response Text

GET /TestRestlet HTTP/1.1
Host: 172.16.101.34:6060
Connection: Keep-Alive

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=1873DE26443F5DF62379B895AEA0F004; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:25:48 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22

Sample Response Text

GET /TestRestlet HTTP/1.1
Host: 172.16.101.34:6060
Connection: close

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=43EC7C9AACC6C0CEF6FAC8F608B1D79C; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:25:57 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22
Connection: close

Sample Response Text
Connection closed by foreign host.
[root@mylinuxserver]# telnet 172.16.101.34 6060
Trying 172.16.101.34...
Connected to win7comp01 (172.16.101.34).
Escape character is '^]'.
GET /TestRestlet HTTP/1.0

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=2C879A91F2501DD9D3B39EF50C3F46CA; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:26:09 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22
Connection: close

Sample Response Text
Connection closed by foreign host.
[root@mylinuxserver]# telnet 172.16.101.34 6060
Trying 172.16.101.34...
Connected to win7comp01 (172.16.101.34).
Escape character is '^]'.
GET /TestRestlet

Sample Response Text
Connection closed by foreign host.
[root@mylinuxserver]#

在上面的示例中,进行了几种类型的HTTP连接。

对第一次请求的回复:

GET /TestRestlet HTTP/1.1
Host: 172.16.101.34:6060

[注意:行Host: 172.16.101.34:6060后跟2 \r\n\r\n\r\n]

是:

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=C2E77F4D0437E525A0FC66498EF09E8B; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:25:44 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22

Sample Response Text

连接尚未关闭,我们发送另一个请求:

GET /TestRestlet HTTP/1.1
Host: 172.16.101.34:6060
Connection: Keep-Alive

得到回应:

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=1873DE26443F5DF62379B895AEA0F004; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:25:48 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22

仍然没有关闭连接。

但是在第3次请求中:

GET /TestRestlet HTTP/1.1
Host: 172.16.101.34:6060
Connection: close

连接已关闭,因为请求包含Connection: close标头。 您可以在显示消息后看到telnet退出:Connection closed by foreign host.

在上面给出的例子中还有2个样本请求 - 响应:

1. HTTP 1.0请求:

GET /TestRestlet HTTP/1.0

回复:

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=2C879A91F2501DD9D3B39EF50C3F46CA; Path=/hotelSoft
Date: Wed, 31 Jul 2013 08:26:09 GMT
Accept-Ranges: bytes
Server: Restlet-Framework/2.0.15
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
Content-Type: application/json;charset=UTF-8
Content-Length: 22
Connection: close

Sample Response Text

显示后,telnet退出:Connection closed by foreign host.

2.没有提到HTTP版本的请求:

GET /TestRestlet

响应是:(没有标题)

Sample Response Text

telnet退出并显示一条消息:Connection closed by foreign host.

结论:

无论您的客户端/客户端程序是什么,请使用Connection: close标头发送HTTP-1.0请求或HTTP-1.1请求。

在Java中,您可以通过以下方式实现此目的:

import java.net.HttpURLConnection;
import java.net.URL;
.
.
.
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL("http://....").openConnection();
httpURLConnection.setRequestProperty("Connection","close");
// rest of the code here....

同时检查是否有这样的陈述:

httpURLConnection.disconnect();

可以帮助您断开连接。