Нужно ли явно складывать строки заголовка в TidHttp ver 10.5498? - PullRequest
0 голосов
/ 30 мая 2019

Пожалуйста, кто-нибудь (Реми Лебо?) Может уточнить точку сгиба строки заголовка в TidHTTP?Мой сервер ожидает, что заголовки будут свернуты, если строка превысит 998 символов, что наверняка будет одним из моих.

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

по умолчанию свойство TIdHeaderList.FoldLines установлено в True

and

значение по умолчанию для TIdHeaderList.Свойство FoldLength имеет значение 78

, что указывает на то, что мне не нужно делать ничего особенного, чтобы сворачивать заголовки при использовании TIdHTTP.

Однако, глядя на исходный кодTidHTTP Я нахожу комментарии от Реми, такие как эти (в TIdCustomHTTP.Post)

В настоящее время при выдаче POST IdHTTP автоматически устанавливает протокол на версию 1.0 независимо от значения, которое он имел первоначально.

и (в TIdHTTPProtocol.BuildAndSendRequest)

TODO: отключить свертывание заголовка для запросов HTTP 1.0

, которые указывают на то, что мой запросбудет использовать запросы HTTP 1.0 в любом случае, независимо от того, запрашиваю я 1.1 или нет, и что строки заголовка не будут свернуты независимо.

Поэтому мой вопрос прост;при использовании TidHttp ver 10.5498 нужны ли мне строки

 IdHTTP1.Request.CustomHeaders.FoldLines := true;    
 IdHTTP1.Request.CustomHeaders.FoldLength := 998;  //could be less, but not more

или я могу просто принять значения по умолчанию и быть уверенным, что мои заголовки будут правильно свернуты?

1 Ответ

1 голос
/ 31 мая 2019

Значение по умолчанию FoldLength равно 78 символам , если , QuoteType равно QuoteHTTP, тогда вместо этого по умолчанию используется значение MaxInt (фактически отключение сворачивания для заголовков HTTP, даже если FoldLines равно True) , Итак, если вы хотите, чтобы ваши заголовки HTTP были сложены на 998 символов, вам нужно установить FoldLength вручную.

Обратите внимание, что в то время как RFC 1945 (для HTTP 1.0) и RFC 2616 (для HTTP 1.1) позволяют сворачивать заголовки:

Поля заголовка могут быть расширены на несколько строк, предшествуя каждой дополнительной строке хотя бы с одним SP или HT, хотя это не рекомендуется.

Поля заголовка могут быть расширены на несколько строк, предшествуя каждой дополнительной строке хотя бы с одним SP или HT.

RFC 7230 (который обновляет HTTP 1.1) не одобряет эту практику:

Исторически значения полей заголовка HTTP могли быть расширены на несколько строк путем добавления каждой дополнительной строки по крайней мере к одному пробелу или горизонтальной табуляции (obs-fold). В этой спецификации не рекомендуется использовать перенос строк за исключением типа носителя message / http ( Section 8.3.1 ). Отправитель НЕ ДОЛЖЕН генерировать сообщение, которое включает в себя сгиб строки (т. Е. Имеет любое значение поля, которое соответствует правилу obs-fold), если только сообщение не предназначено для упаковки в сообщение / http media тип.

Что касается TIdHTTP форсирования HTTP 1.0 для POST запросов, вы можете предотвратить это, включив флаг hoKeepOrigProtocol в свойстве TIdHTTP.HTTPOptions.

...