Запрос отправлен с версией http/0.9
Я использую Apache Commons HttpClient v3.1. Все мои запросы имеют правильную (по умолчанию) версию HTTP в строке запроса, т.е. HTTP/1.1, за исключением 1 запроса.
Следующий почтовый запрос получает строку запроса в виде HTTP/0.9:
server : port/cas/v1/tickets/TGT-1-sUqenNbqUzvkGSWW25lcbaJc0OEcJ6wg5DOj3XDMSwoIBf6s7i-cas-1
Body: service=*
Я отлаживал через код клиента http и увидел, что строка запроса установлена на HTTP/1.1, но на сервере я вижу запрос, поступающий как HTTP/0.9.
Я пытался установить версию HTTP явно, используя HttpMethodParams
но это не помогает. У кого-нибудь есть идеи, что может быть не так?
HttpClient client = new HttpClient();
HostConfiguration hc = client.getHostConfiguration();
hc.setHost(new URI(url, false));
PostMethod method = new PostMethod();
method.setURI(new URI(url, false));
method.getParams().setUriCharset("UTF-8");
method.getParams().setHttpElementCharset("UTF-8");
method.getParams().setContentCharset("UTF-8");
method.getParams().setVersion(HttpVersion.HTTP_1_1);
method.addParameter("service", URLEncoder.encode(service, "UTF-8"));
method.setPath(contextPath + "/tickets/" + tgt);
String respBody = null;
int statusCode = client.executeMethod(method);
respBody = method.getResponseBodyAsString();
1 ответ
Спасибо Йоахим Зауэр. Я смог выяснить проблему.
Я использовал Webscarab в качестве веб-прокси, и он выдал следующее сообщение "Получил заголовок продолжения, но у него не было предыдущей строки заголовка". Посмотрел его в Интернете и обнаружил, что проблема в многострочном запросе. Я явно устанавливал версию HTTP на 1.1, однако в URL был завершающий символ '\ r \ n', из-за которого строка запроса выглядела как Http / 0.9.
Разница между Http / 0.9 и Http / 1.0 или другими более высокими протоколами заключается в том, что 0.9 имеет простую строку запроса "МЕТОД URL". Более поздние версии также включают версию Http в строку запроса "МЕТОД URL HTTPVERSION".
Надеюсь, это спасет кого-то день!