Что [CFWS] и [FWS] означают в этом ABNF?

RFC 2282 для электронных писем имеют ниже ABNF для цитируемой строки.

quoted-string   =       [CFWS]
                        DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                        [CFWS]

Я гуглил и обнаружил, что CFWS - это Комментарии, Складывание, Пробелы. Я знаю, что такое пробелы, но не знаю, что такое комментарии и свертки с точки зрения ABNF в адресе электронной почты.

Кроме того, что означает [FWS] внутри *()? Двойные кавычки могут иметь 0 или более вхождений qcontent, которым предшествуют складывание и пробелы?

Это очень запутанно. Ссылки на понимание ABNF будут высоко оценены.

1 ответ

Это не является частью общего синтаксиса ABNF (в настоящее время определенный в RFC 5234, хотя RFC 2234 был определением ABNF в действии на момент написания RFC 2282). Скорее, FWS а также CFWS являются специальными токенами, определенными в самом RFC электронной почты (см. раздел 3.2.3 RFC 2822 или раздел 3.2.2 RFC 5322, который устарел RFC 2822 в 2008 году).

Из RFC 5322:

2.2.3. Длинные поля заголовка

Каждое поле заголовка логически представляет собой одну строку символов, содержащую имя поля, двоеточие и тело поля. Однако для удобства, а также для ограничения 998/78 символов на строку, часть тела поля поля заголовка может быть разбита на многострочное представление; это называется "складывание". Общее правило заключается в том, что там, где эта спецификация допускает складывание пробелов (а не просто символов WSP), CRLF может быть вставлен перед любым WSP.

Например, поле заголовка:

Subject: This is a test

может быть представлен как:

Subject: This
 is a test

...

Процесс перехода от этого сложенного многострочного представления поля заголовка к его однострочному представлению называется "разворачиванием". Развертывание выполняется простым удалением любого CRLF, за которым сразу следует WSP. Каждое поле заголовка должно обрабатываться в развернутом виде для дальнейшей синтаксической и семантической оценки. Поле заголовка в развернутом виде не имеет ограничения по длине и поэтому может быть неопределенно длинным.

...

3.2.2. Складной пробел и комментарии

Символы пробела, включая пробел, используемый при сворачивании (описано в разделе 2.2.3), могут появляться между многими элементами в теле полей заголовка. Кроме того, строки символов, которые рассматриваются как комментарии, могут быть включены в структурированные тела полей как символы, заключенные в скобки. Следующее определяет складывающиеся пробелы (FWS) и конструкции комментариев.

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

В этой спецификации есть несколько мест, где комментарии и FWS могут быть свободно вставлены. Чтобы приспособить этот синтаксис, дополнительный токен для "CFWS" определен для мест, где могут появляться комментарии и / или FWS. Однако, когда CFWS встречается в этой спецификации, он НЕ ДОЛЖЕН вставляться таким образом, чтобы любая строка поля свернутого заголовка состояла полностью из символов WSP и ничего больше.

FWS             =   ([*WSP CRLF] 1*WSP) /  obs-FWS
                                       ; Folding white space

ctext           =   %d33-39 /          ; Printable US-ASCII
                    %d42-91 /          ;  characters not including
                    %d93-126 /         ;  "(", ")", or "\"
                    obs-ctext

ccontent        =   ctext / quoted-pair / comment

comment         =   "(" *([FWS] ccontent) [FWS] ")"

CFWS            =   (1*([FWS] comment) [FWS]) / FWS

В этой спецификации, где появляется FWS (жетон складывания пустого пространства), он указывает место, где может иметь место сворачивание, как описано в разделе 2.2.3. Везде, где сворачивание появляется в сообщении (то есть в теле поля заголовка, содержащем CRLF, за которым следует любой WSP), развертывание (удаление CRLF) выполняется до того, как будет выполнен любой дополнительный семантический анализ в этом поле заголовка в соответствии с этой спецификацией. То есть любой CRLF, который появляется в FWS, является семантически "невидимым".

Комментарий обычно используется в теле структурированного поля, чтобы предоставить некоторый читаемый человеком информационный текст. Поскольку комментарий может содержать FWS, в комментарии разрешается сворачивание. Также обратите внимание, что поскольку в комментарии разрешена пара в кавычках, круглые скобки и символы обратной косой черты могут появляться в комментарии, если они отображаются в виде пары в кавычках. Семантически, заключенные в скобки не являются частью комментария; комментарий - это то, что заключено в две скобки. Как указывалось ранее, "\" в любой паре в кавычках и CRLF в любом FWS, который появляется в комментарии, семантически "невидимы" и, следовательно, также не являются частью комментария.

Запуски FWS, комментариев или CFWS, возникающие между лексическими токенами в поле структурированного заголовка, семантически интерпретируются как один пробел.

Другие вопросы по тегам