LINUX.ORG.RU

HTTP 1.0 в конце запроса лишний перевод строки, что делать?


0

0

В некоторых случаях от MSIE 6.0 приходит запрос HTTP/1.0 (Connection: close) в конце запроса приходит 0x0d,0x0a. Ещё раз покурил стандарт, про дополнительный перевод строки нигде не указано.

Это по стандарту???

Стоит обрабатывать эту ситуацию как штатную (делать проврку на завершающий перевод строки) или это ошибочный запрос?

POST /url HTTP/1.0
Host: xxx
X-Real-IP: 1.1.1.1
X-Forwarded-For: 1.1.1.1
Connection: close
Accept: */*
Accept-Language: ru-RU
Referer: http://xxx
x-flash-version: 10,0,12,36
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)..Cache-Control: no-cache
Cookie: xxx

01234567890123456789012345678901234567<0d0a!!!!!!!>

Не надо проверок, считывай столько, сколько указано в Content-Length.
ps:
В стандарте говорится, что делать если этого заголовка нет

Chumka ★★★
()

> в конце запроса приходит 0x0d,0x0a.

> Это по стандарту???

Это по вендузячьи. У них по умолчанию \n транслируется в такую херь.

anonymous
()
Ответ на: комментарий от anonymous

> Это по вендузячьи. У них по умолчанию \n транслируется в такую херь.

ЕМНИП в RFC было сказано именно про \r\n переводы строк. Смотреть лень, поправьте если что. А вообще юникс вей как-бы призывает нас быть терпимыми к входным данным, поэтому имеет смысл поддерживать оба типа перевода строк. Тем более, что проблемы тут нет.

anonymous
()
Ответ на: комментарий от anonymous

> поэтому имеет смысл поддерживать оба типа перевода строк.

Я, наверное, неправильно написал. Проблема в том, что если Content-Length = 10 - то приходит 12 байт, вместо 10.

То есть 2 байта лишние. С одной стороны так же приходит Connection: close и сокет закрывается после ответа, но в стандарте указано, что тело должно равнятся Content-Length, а шестой ослик шлет дополнительные данные.

stpg
() автор топика
Ответ на: комментарий от stpg

>в стандарте указано, что тело должно равнятся Content-Length, а шестой ослик шлет дополнительные данные.

в стандарте микрософт сказано по-другому

dimon555 ★★★★★
()
Ответ на: комментарий от Chumka

> Не надо проверок, считывай столько, сколько указано в Content-Length.

В данный момент так и делаю (читаю это число байт и принудительно выставляю Connection: close, даже если передали Connection: Keep-Alive)

> В стандарте говорится, что делать если этого заголовка нет

Можите ткнуть носом в мето в RFC-ке.

Единственное, что нашел:

If a Content-Length header field is present, its value in bytes represents the length of the Entity-Body.

stpg
() автор топика
Ответ на: комментарий от anonymous

> http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html > в разделе 4.4 написано, как определять Message Length прямо по пунктам в порядке значимости

When a Content-Length is given in a message where a message-body is allowed, its field value MUST exactly match the number of OCTETs in the message-body

Спасибо, вот оно, но мелкомягкие думают совсем по другому;)

stpg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.