Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Tomcat и Content-length:0


Автор: danilkus 10.12.2007, 16:48
Задача такова, что нужно обработать Post запрос в котором есть данные, но битый заголовок. Он отличается от обычного тем, что в нем Content-Length: 0. Все остальные поля правильные. 
Content-type: multipart/form-data.

Принимаю этот запрос сервлетом, но при попытке получить из HttpServletRequest InputStream обнаруживаю, что данных в нем нет.

Запрос генерю самописным генератором, пишу прямо в сокет. При попытке послать аналогичный запрос, но с правильным Content-Length - все замечательно.

Задача научиться обрабатывать запросы с такой неправильной длинной корректно.
Подозреваю, что Tomcat "обрезает" поток согласно заголовку.

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

Какие будут идеи?

Автор: COVD 10.12.2007, 17:13
Цитата

Подозреваю, что Tomcat "обрезает" поток согласно заголовку.


"обрезает" согласно протоколу http, который предписывает методу пост сначала отправлять размер данных в хедере, потом сами данные. Сервера в интернете, которые соблюдают протокол, скорее всего не пересылают данные, обнаружив нулевую длину. 

Можно посмотреть проект Comet в апаче. Там фиксированный размер запроса каким-то образом обходится именно ценой отступления от требований протокола. Возможно, размер данных устанавливается максимальным.

Автор: danilkus 10.12.2007, 17:17
Сервера в интернете то да. Но мне нужно решить задачу в локальных условиях. Запрос идет напрямую от моего клиента на томкат. Как заставить не обрезать?

Автор: COVD 10.12.2007, 18:41
модифицировать томкат, чтобы он определял конец данных не на основании длины, указанной в хедере, а по другому признаку. или модифицируйте более простой сервер - http://elonen.iki.fi/code/nanohttpd/ например (там все в одном файле).

Автор: ivg 10.12.2007, 18:54
Цитата(danilkus @  10.12.2007,  16:48 Найти цитируемый пост)
самописным генератором


Цитата(danilkus @  10.12.2007,  17:17 Найти цитируемый пост)
моего клиента 


А что бы клиента не поправить?

Цитата(COVD @  10.12.2007,  17:13 Найти цитируемый пост)
согласно протоколу http


 smile 

Автор: danilkus 10.12.2007, 18:54
Собственно я и ожидал здесь встретить знатока томката, который бы подсказал где и что там нужно модифицировать. Версия томката 1.6

Добавлено через 3 минуты и 50 секунд
Цитата(ivg @  10.12.2007,  18:54 Найти цитируемый пост)
А что бы клиента не поправить?

Самописный клиент потому, что такой запрос никакой "правильный" клиент не выдаст. Мне нужно не привести запрос к правильному виду, а научиться обходиться с не правильными запросами. Такова уж задача.

Если интересно такой запрос выдает ИЕ7.0 при некоторых обстоятельствах  smile 


Автор: ivg 10.12.2007, 19:06
Цитата(danilkus @  10.12.2007,  18:54 Найти цитируемый пост)
Если интересно такой запрос выдает ИЕ7.0 при некоторых обстоятельствах

Ну вы уж поделитесь обстоятельствами, может в них собаку отрыть можно  smile

Автор: danilkus 10.12.2007, 19:10
Цитата(ivg @  10.12.2007,  19:06 Найти цитируемый пост)
Ну вы уж поделитесь обстоятельствами, может в них собаку отрыть можно


Если бы я точно знал, конечно бы поделился. Проблема в том, что определенная (именно одна) версия ИЕ 7 посылает такой заголовок после непродолжительного простоя между запросами. Версию обновить возможности нет.

Автор: COVD 10.12.2007, 19:19
Цитата

простоя между запросами


у вас там наверное javascript периодически что-то посылает и посылает не правильно 

Автор: danilkus 11.12.2007, 10:24
Javascript конечно есть, но он работает не периодически, а по клику пользователя и ничего кроме form.submit не делает. Возможно виноват и JS вернее его интепретация этой версией ИЕ так как в ИЕ 6 и даже в других версиях ИЕ 7 такого не проявляется.

Автор: AlexeyVorotnikov 11.12.2007, 11:17
Скорее всего, без модификации исходного кода Tomcat'а, застваить его работать неправильно невозможно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)