Что [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, возникающие между лексическими токенами в поле структурированного заголовка, семантически интерпретируются как один пробел.