2013-07-30 1 views
0

У меня есть следующий ПОЛУЧАЕТЕ:Как изменить значение стандартного заголовка в рестартах?

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

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

Ответ от вызова этой услуги:

CFG - HTTP/1.1 200 OK Accept-Диапазоны: байты Content-Type: Текст/равнинный, кодировка = UTF-8 Дата: Пн, 29 Июл 2013 19:59:37 GMT Сервер: Restlet-Framework/2.0.9 Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept Контент-длина: 118 Подключение: keep-alive

Как изменить значение заголовка соединения для закрытия?

Я думаю, что это может быть ошибка реселлера.

ответ

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 вводе команды линии (с использованием только телнет): [Пожалуйста, обратите внимание, что последняя строка заголовка запроса в каждом запросе является затем 2 переводы строк] [Для того, чтобы избежать путаницы, некоторые из запросов не содержат запрос-тело.]

[[email protected]]# 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. 
[[email protected]]# 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. 
[[email protected]]# 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. 
[[email protected]]# 

В приведенных выше примерах, несколько типов соединений HTTP сделаны.

Ответ на 1-й запросу:

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 заголовок. Вы можете увидеть выходы телнета после вывода сообщения: Connection closed by foreign host.

Есть два более образец запрос-ответ в приведенных выше примерах:

1.An 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 

И телнет завершает работу после отображения: Connection closed by foreign host.

2.А запрос без HTTP версии упоминается:

GET /TestRestlet 

И ответ (без заголовков)

Sample Response Text 

И телнет завершается с сообщением: Connection closed by foreign host.

Вывод:

Все, что ваш клиент/клиент-программу, сделать это отправить запрос HTTP-1,0, или запрос HTTP-1.1 с Connection: close заголовок.

В 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(); 

может помочь вам разорвать соединение.

Смежные вопросы