LINUX.ORG.RU

HTTP и окончания строк

 ,


0

2

Всем привет,

Возник вопрос, валидным ли считается следующая строка в заголовке HTTP и как обрабатывать её значение - как keep-alive или как «keep-alive\r\r\r\r\r\r\r»:

connection: keep-alive\r\r\r\r\r\r\r\r\n

?

★★

Последнее исправление: i82 (всего исправлений: 1)

не валидна. строки разделяются \r\n, обрабатывать можно как считаешь нужным, я бы отдал forbidden, потому что с такого дерьма которое шлет такие заголовки пользователи массово не ходят.

filequest
()

Валидна. Как keep-alive, без \r. См. rfc2616#4.2, ссылается на rfc822, где говорится о том, что одиночные \r и \n игнорируются.

Но в реальной жизни серверы не слишком следуют rfc при разборе заголовков. Так что одни серверы могут это понять как keep-alive, а другие - как keep-alive\r\r\r\r\r\r\r.

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

RFC по HTTP в части формата заголовков определено в 2 документах: устаревшем и новом.

  1. Устаревший - rfc2616#4.2:
    field-value    = *( field-content | LWS )
    field-content  = <the OCTETs making up the field-value
                     and consisting of either *TEXT or combinations
                     of token, separators, and quoted-string>
    TEXT           = <any OCTET except CTLs,
                     but including LWS>
    OCTET          = <any 8-bit sequence of data>
    CHAR           = <any US-ASCII character (octets 0 - 127)>
    CTL            = <any US-ASCII control character
                     (octets 0 - 31) and DEL (127)>
    token          = 1*<any CHAR except CTLs or separators>
    quoted-string  = ( <"> *(qdtext | quoted-pair ) <"> )
    qdtext         = <any TEXT except <">>
    quoted-pair    = "\" CHAR
    
    Из этого всего видно, что одиночный \r (код 13) может встретиться в value, но только внутри кавычек и если экранирован. Надо только учесть, что бывают многострочные заголовки (см. line folding), но для них только одиночных \r тоже нет, только \r\n
  2. Новый: rfc7230#3.2
    field-value    = *( field-content / obs-fold )
    field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
    field-vchar    = VCHAR / obs-text
    obs-fold       = CRLF 1*( SP / HTAB )
                   ; obsolete line folding
    obs-text       = %x80-FF
    VCHAR (any visible [USASCII] character)
    
    Согласно этому документу одиночного \r вообще быть не может.
Sorcerer ★★★★★
()
Ответ на: комментарий от Sorcerer

Да, забавно. Развели зоопарк...

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