Rfc стандарт: Rfc — Википедия – Rfc | Контроль Разума | Fandom

RFC — Википедия

Материал из Википедии — свободной энциклопедии

Эта статья о Request for Comments.

Рабочее предложение (англ. Request for Comments, RFC) — документ из серии пронумерованных информационных документов Интернета, содержащих технические спецификации и стандарты, широко применяемые во всемирной сети. Название «Request for Comments» ещё можно перевести как «заявка (запрос) на отзывы» или «тема для обсуждения». В настоящее время первичной публикацией документов RFC занимается IETF под эгидой открытой организации Общество Интернета (англ. Internet Society, ISOC). Правами на RFC обладает именно Общество Интернета.

История

Формат RFC появился в 1969 году при обсуждении проекта ARPANET, его предложил Стив Крокер и он же написал первый RFC. RFC 1 был опубликован 7 апреля 1969 г. и назывался «Host Software». Первые RFC распространялись в печатном виде на бумаге в виде обычных писем, но уже с декабря 1969 г., когда заработали первые сегменты ARPANET, документы начали распространяться в электронном виде.

Большинство ранних RFC были созданы в Калифорнийском университете Лос-Анджелеса и Стэнфордском исследовательском институте (англ.).

С 1969 по 1998 гг. бессменным и единственным редактором RFC был Джон Постел. После его смерти Общество Интернета (ISOC) поручило редактирование и публикацию RFC Институту информационных наук (англ.) Университета Южной Калифорнии.

Очерк истории RFC за 30 лет с 1969 по 1999 гг. представлен в RFC 2555.

Содержимое RFC

Несмотря на название, запросы на отзывы RFC сейчас рассматриваются как стандарты Интернета (а рабочие версии стандартов обычно называют драфтами, от англ. draft — черновой проект). Согласно RFC 2026, жизненный цикл стандарта выглядит следующим образом:

  1. Выносится на всеобщее рассмотрение интернет-проект (Internet Draft). Проекты не имеют официального статуса и удаляются из базы через шесть месяцев после последнего изменения.
  2. Если проект стандарта оказывается достаточно удачным и непротиворечивым, он получает статус предложенного стандарта (Proposed Standard), и свой номер RFC. Наличие программной реализации стандарта желательно, но не обязательно.
  3. Следующая стадия — проект стандарта (Draft Standard) — означает, что предложенный стандарт принят сообществом, в частности, существуют две независимые по коду совместимые реализации разных команд разработчиков. В проекты стандартов ещё могут вноситься мелкие правки, но они считаются достаточно стабильными и рекомендуются для реализации.
  4. Высший уровень — стандарт Интернета (Internet Standard). Это спецификации с большим успешным опытом применения и зрелой формулировкой. Параллельно с нумерацией RFC они имеют свою собственную нумерацию STD. Список стандартов имеется в документе STD 1 (сейчас это RFC 5000, но нумерация может измениться). Из более чем трёх тысяч RFC этого уровня достигли только несколько десятков.
  5. Многие старые RFC замещены более новыми версиями под новыми номерами или вышли из употребления. Такие документы получают статус исторических (Historic)

Практически все стандарты Глобальной сети существуют в виде опубликованных заявок RFC. Но в виде документов RFC выходят не только стандарты, но также концепции, введения в новые направления в исследованиях, исторические справки, результаты экспериментов, руководства по внедрению технологий, предложения и рекомендации по развитию существующих Стандартов и другие новые идеи в информационных технологиях:

  1. Экспериментальные (Experimental) спецификации содержат информацию об экспериментальных исследованиях, интересных для интернет-сообщества. Это могут быть, например, прототипы, реализующие новые концепции.
  2. Информационные (Informational) RFC предназначены для ознакомления общественности, не являются стандартами и не являются результатом консенсуса или рекомендациями. Некоторые проекты, не получившие статуса Предложенного стандарта, но представляющие интерес, могут быть опубликованы как Информационные RFC.
  3. Лучший современный опыт (Best Current Practice). Эта серия RFC содержит рекомендации по реализации стандартов, в том числе от сторонних организаций, а также внутренние документы о структуре и процедурах стандартизации.

Почти все стандарты разрабатываются под эгидой каких-либо научных или интернет-организаций (например W3C, IETF, консорциум Юникода, Интернет2).

Запросы на отзывы официально существуют только на английском языке. Строгих требований к оформлению нет. Встречаются RFC, написанные в строгом академическом стиле, иные — в дружеской неформальной манере. Существует традиция выпуска первоапрельских шуточных RFC, например, RFC 1149 рассказывает о передаче пакетов IP с помощью почтовых голубей.

Примеры популярных запросов на отзывы

Номер RFCТема
RFC 768  (англ.) RFC 768  (рус.)UDP
RFC 791  (англ.) RFC 791  (рус.)IP
RFC 792  (англ.) RFC 792  (рус.)ICMP
RFC 793  (англ.) RFC 793  (рус.)TCP
RFC 821  (англ.)SMTP, заменён RFC 2821
RFC 822  (англ.)Формат электронной почты, заменён RFC 2822
RFC 826  (англ.)Протокол разрешения адреса (ARP)
RFC 894  (англ.) RFC 894  (рус.)IP по Ethernet
RFC 951  (англ.)Протокол начальной загрузки (BOOTP)
RFC 959  (англ.)FTP
RFC 977  (англ.)NNTP — устаревший, дополнен RFC 2980 , заменён RFC 3977
RFC 1034  (англ.)DNS — концепция
RFC 1035  (англ.)DNS — внедрение
RFC 1122  (англ.) RFC 1122  (рус.)Требования к хосту 1
RFC 1123  (англ.) RFC 1123  (рус.)Требования к хосту 2
RFC 1191  (англ.) RFC 1191  (рус.)Определение MTU пути
RFC 1256  (англ.)Обнаружение маршрутизатора в сети
RFC 1323  (англ.)Высокопроизводительный протокол TCP
RFC 1350  (англ.)TFTP
RFC 1403  (англ.)Взаимодействие BGP и OSPF
RFC 1459  (англ.) RFC 1459  (рус.)IRC
RFC 1498  (англ.)Архитектурная дискуссия
RFC 1518  (англ.)Присвоение адресов CIDR
RFC 1519  (англ.)Междоменная маршрутизация
RFC 1591  (англ.)Структура доменных имён
RFC 1661  (англ.)PPP
RFC 1738  (англ.)URL
RFC 1771  (англ.)BGP версии 4
RFC 1772  (англ.)Приложение BGP
RFC 1789  (англ.)Телефония по Интернет (заменён стандартами VoIP)
RFC 1812  (англ.)Требования к маршрутизаторам IPv4
RFC 1855  (англ.)Руководство по Нетикету
RFC 1889  (англ.)Транспорт реального времени
RFC 1905  (англ.)SNMP
RFC 1907  (англ.)SNMP версии 2
RFC 1918  (англ.) RFC 1918  (рус.)«Сеть 10»
RFC 1939  (англ.) RFC 1939  (рус.)Протокол POP версии 3 (POP3)
RFC 2001  (англ.) RFC 2001  (рус.)Расширения производительности TCP
RFC 2026  (англ.)Процесс стандартизации в Интернете
RFC 2045  (англ.)MIME
RFC 2046  (англ.)
RFC 2047  (англ.)
RFC 2048  (англ.)
RFC 2049  (англ.)
RFC 2060  (англ.) RFC 2060  (рус.)IMAP версии 4 (IMAP4), заменён RFC 3501
RFC 2131  (англ.)DHCP
RFC 2223  (англ.) RFC 2223  (рус.)Инструкции для авторов RFC
RFC 2246  (англ.) RFC 2246  (рус.)SSL и TLS
RFC 2231  (англ.)Кодировка символов
RFC 2328  (англ.)OSPF
RFC 2401  (англ.)Архитектура безопасности протокола IP (IPsec)
RFC 2453  (англ.)RIP
RFC 2516  (англ.) RFC 2516  (рус.)PPPoE
RFC 2525  (англ.)Проблемы TCP
RFC 2535  (англ.)Безопасность DNS
RFC 2581  (англ.) RFC 2581  (рус.)Контроль заторов в TCP
RFC 2616  (англ.)HTTP
RFC 2637  (англ.)PPTP
RFC 2663  (англ.)Трансляция сетевых адресов
RFC 2766  (англ.)NAT-PT
RFC 2821  (англ.) RFC 2821  (рус.)SMTP, заменён RFC 5321
RFC 2822  (англ.)Формат электронной почты
RFC 2865  (англ.)RADIUS
RFC 2866  (англ.) RFC 2866  (рус.)Средства учёта RADIUS
RFC 2960  (англ.)SCTP
RFC 2980  (англ.)Общие расширения NNTP, дополняет RFC 977, заменён RFC 3977
RFC 3010  (англ.)NFS
RFC 3031  (англ.)Архитектура MPLS
RFC 3066  (англ.)Языковые теги
RFC 3092  (англ.)Этимология «Foo»
RFC 3098  (англ.)Ответственная реклама по электронной почте
RFC 3160  (англ.)Гид по IETF
RFC 3168  (англ.) RFC 3168  (рус.)ECN
RFC 3261  (англ.)SIP
RFC 3501  (англ.)IMAP версии 4 издание 1 (IMAP4rev1)
RFC 3977  (англ.)NNTP, заменяет RFC 977, дополняет RFC 2980

См. также

Ссылки

Официальные источники
Другие сайты

RFC — Википедия

Материал из Википедии — свободной энциклопедии

Эта статья о Request for Comments.

Рабочее предложение (англ. Request for Comments, RFC) — документ из серии пронумерованных информационных документов Интернета, содержащих технические спецификации и стандарты, широко применяемые во всемирной сети. Название «Request for Comments» ещё можно перевести как «заявка (запрос) на отзывы» или «тема для обсуждения». В настоящее время первичной публикацией документов RFC занимается IETF под эгидой открытой организации Общество Интернета (англ. Internet Society, ISOC). Правами на RFC обладает именно Общество Интернета.

История

Формат RFC появился в 1969 году при обсуждении проекта ARPANET, его предложил Стив Крокер и он же написал первый RFC. RFC 1 был опубликован 7 апреля 1969 г. и назывался

«Host Software». Первые RFC распространялись в печатном виде на бумаге в виде обычных писем, но уже с декабря 1969 г., когда заработали первые сегменты ARPANET, документы начали распространяться в электронном виде.

Большинство ранних RFC были созданы в Калифорнийском университете Лос-Анджелеса и Стэнфордском исследовательском институте (англ.).

С 1969 по 1998 гг. бессменным и единственным редактором RFC был Джон Постел. После его смерти Общество Интернета (ISOC) поручило редактирование и публикацию RFC Институту информационных наук (англ.) Университета Южной Калифорнии.

Очерк истории RFC за 30 лет с 1969 по 1999 гг. представлен в RFC 2555.

Содержимое RFC

Несмотря на название, запросы на отзывы RFC сейчас рассматриваются как стандарты Интернета (а рабочие версии стандартов обычно называют драфтами, от англ. draft — черновой проект). Согласно RFC 2026, жизненный цикл стандарта выглядит следующим образом:

  1. Выносится на всеобщее рассмотрение интернет-проект (Internet Draft). Проекты не имеют официального статуса и удаляются из базы через шесть месяцев после последнего изменения.
  2. Если проект стандарта оказывается достаточно удачным и непротиворечивым, он получает статус предложенного стандарта (Proposed Standard), и свой номер RFC. Наличие программной реализации стандарта желательно, но не обязательно.
  3. Следующая стадия — проект стандарта (Draft Standard) — означает, что предложенный стандарт принят сообществом, в частности, существуют две независимые по коду совместимые реализации разных команд разработчиков. В проекты стандартов ещё могут вноситься мелкие правки, но они считаются достаточно стабильными и рекомендуются для реализации.
  4. Высший уровень — стандарт Интернета (Internet Standard). Это спецификации с большим успешным опытом применения и зрелой формулировкой. Параллельно с нумерацией RFC они имеют свою собственную нумерацию STD. Список стандартов имеется в документе STD 1 (сейчас это RFC 5000, но нумерация может измениться). Из более чем трёх тысяч RFC этого уровня достигли только несколько десятков.
  5. Многие старые RFC замещены более новыми версиями под новыми номерами или вышли из употребления. Такие документы получают статус исторических (Historic)

Практически все стандарты Глобальной сети существуют в виде опубликованных заявок RFC. Но в виде документов RFC выходят не только стандарты, но также концепции, введения в новые направления в исследованиях, исторические справки, результаты экспериментов, руководства по внедрению технологий, предложения и рекомендации по развитию существующих Стандартов и другие новые идеи в информационных технологиях:

  1. Экспериментальные (Experimental) спецификации содержат информацию об экспериментальных исследованиях, интересных для интернет-сообщества. Это могут быть, например, прототипы, реализующие новые концепции.
  2. Информационные (Informational) RFC предназначены для ознакомления общественности, не являются стандартами и не являются результатом консенсуса или рекомендациями. Некоторые проекты, не получившие статуса Предложенного стандарта, но представляющие интерес, могут быть опубликованы как Информационные RFC.
  3. Лучший современный опыт (Best Current Practice). Эта серия RFC содержит рекомендации по реализации стандартов, в том числе от сторонних организаций, а также внутренние документы о структуре и процедурах стандартизации.

Почти все стандарты разрабатываются под эгидой каких-либо научных или интернет-организаций (например W3C, IETF, консорциум Юникода, Интернет2).

Запросы на отзывы официально существуют только на английском языке. Строгих требований к оформлению нет. Встречаются RFC, написанные в строгом академическом стиле, иные — в дружеской неформальной манере. Существует традиция выпуска первоапрельских шуточных RFC, например, RFC 1149 рассказывает о передаче пакетов IP с помощью почтовых голубей.

Примеры популярных запросов на отзывы

Номер RFCТема
RFC 768  (англ.) RFC 768  (рус.)UDP
RFC 791  (англ.) RFC 791  (рус.)IP
RFC 792  (англ.) RFC 792  (рус.)ICMP
RFC 793  (англ.) RFC 793  (рус.)TCP
RFC 821  (англ.)SMTP, заменён RFC 2821
RFC 822  (англ.)Формат электронной почты, заменён RFC 2822
RFC 826  (англ.)Протокол разрешения адреса (ARP)
RFC 894  (англ.) RFC 894  (рус.)IP по Ethernet
RFC 951  (англ.)Протокол начальной загрузки (BOOTP)
RFC 959  (англ.)FTP
RFC 977  (англ.)NNTP — устаревший, дополнен RFC 2980 , заменён RFC 3977
RFC 1034  (англ.)DNS — концепция
RFC 1035  (англ.)DNS — внедрение
RFC 1122  (англ.) RFC 1122  (рус.)Требования к хосту 1
RFC 1123  (англ.) RFC 1123  (рус.)Требования к хосту 2
RFC 1191  (англ.) RFC 1191  (рус.)Определение MTU пути
RFC 1256  (англ.)Обнаружение маршрутизатора в сети
RFC 1323  (англ.)Высокопроизводительный протокол TCP
RFC 1350  (англ.)TFTP
RFC 1403  (англ.)Взаимодействие BGP и OSPF
RFC 1459  (англ.) RFC 1459  (рус.)IRC
RFC 1498  (англ.)Архитектурная дискуссия
RFC 1518  (англ.)Присвоение адресов CIDR
RFC 1519  (англ.)Междоменная маршрутизация
RFC 1591  (англ.)Структура доменных имён
RFC 1661  (англ.)PPP
RFC 1738  (англ.)URL
RFC 1771  (англ.)BGP версии 4
RFC 1772  (англ.)Приложение BGP
RFC 1789  (англ.)Телефония по Интернет (заменён стандартами VoIP)
RFC 1812  (англ.)Требования к маршрутизаторам IPv4
RFC 1855  (англ.)Руководство по Нетикету
RFC 1889  (англ.)Транспорт реального времени
RFC 1905  (англ.)SNMP
RFC 1907  (англ.)SNMP версии 2
RFC 1918  (англ.) RFC 1918  (рус.)«Сеть 10»
RFC 1939  (англ.) RFC 1939  (рус.)Протокол POP версии 3 (POP3)
RFC 2001  (англ.) RFC 2001  (рус.)Расширения производительности TCP
RFC 2026  (англ.)Процесс стандартизации в Интернете
RFC 2045  (англ.)MIME
RFC 2046  (англ.)
RFC 2047  (англ.)
RFC 2048  (англ.)
RFC 2049  (англ.)
RFC 2060  (англ.) RFC 2060  (рус.)IMAP версии 4 (IMAP4), заменён RFC 3501
RFC 2131  (англ.)DHCP
RFC 2223  (англ.) RFC 2223  (рус.)Инструкции для авторов RFC
RFC 2246  (англ.) RFC 2246  (рус.)SSL и TLS
RFC 2231  (англ.)Кодировка символов
RFC 2328  (англ.)OSPF
RFC 2401  (англ.)Архитектура безопасности протокола IP (IPsec)
RFC 2453  (англ.)RIP
RFC 2516  (англ.) RFC 2516  (рус.)PPPoE
RFC 2525  (англ.)Проблемы TCP
RFC 2535  (англ.)Безопасность DNS
RFC 2581  (англ.) RFC 2581  (рус.)Контроль заторов в TCP
RFC 2616  (англ.)HTTP
RFC 2637  (англ.)PPTP
RFC 2663  (англ.)Трансляция сетевых адресов
RFC 2766  (англ.)NAT-PT
RFC 2821  (англ.) RFC 2821  (рус.)SMTP, заменён RFC 5321
RFC 2822  (англ.)Формат электронной почты
RFC 2865  (англ.)RADIUS
RFC 2866  (англ.) RFC 2866  (рус.)Средства учёта RADIUS
RFC 2960  (англ.)SCTP
RFC 2980  (англ.)Общие расширения NNTP, дополняет RFC 977, заменён RFC 3977
RFC 3010  (англ.)NFS
RFC 3031  (англ.)Архитектура MPLS
RFC 3066  (англ.)Языковые теги
RFC 3092  (англ.)Этимология «Foo»
RFC 3098  (англ.)Ответственная реклама по электронной почте
RFC 3160  (англ.)Гид по IETF
RFC 3168  (англ.) RFC 3168  (рус.)ECN
RFC 3261  (англ.)SIP
RFC 3501  (англ.)IMAP версии 4 издание 1 (IMAP4rev1)
RFC 3977  (англ.)NNTP, заменяет RFC 977, дополняет RFC 2980

См. также

Ссылки

Официальные источники
Другие сайты

Интернет Стандартный — Internet Standard

стандарт опубликован Engineering Task Force Интернет

В компьютерной сети инженерии , Интернет стандарт является нормативной спецификацией по технологии или методологии , применимого к Интернету . Стандарты Интернет созданы и опубликованы Engineering Task Force Интернет (IETF).

Инженерные вклады в IETF начала в качестве интернет — проекта , может быть назначен на запрос для комментариев , и со временем может стать интернет — стандартом.

Интернет Стандарт характеризуется технической спелости и полезности. IETF также определяет предлагаемый стандарт как менее зрелая , но стабильная и хорошо рассмотрели спецификацию. Проект стандарта является третьей классификации , которая была прекращена в 2011 году проект стандарта был промежуточный этап , который произошел после того, как предлагаемый стандарт , но до интернет — стандарта.

Как поместить в RFC 2026 :

В общем, интернет-стандарт спецификация, которая является стабильной и хорошо понимать, технически компетентные, имеет несколько, независимые и совместимые реализации с существенным опытом работы, имеет значительную общественную поддержку, а также узнаваемо полезно в некоторых или во всех частях Интернет.

обзор

Интернет Стандарт задокументированы Запрос на комментарии (RFC) или набор РЛК. Спецификация, чтобы стать стандартным или частью стандарта начинается как Internet Draft , а позже, как правило , после нескольких изменений, принятых и опубликованные Редактор RFC как RFC и маркирован предлагаемый стандарт . Спустя, RFC возводится в Интернет стандарта , с дополнительным номером последовательности, когда зрелости достиг приемлемого уровня. В совокупности эти этапы известны как дорожки стандартов , и определены в RFC 2026 и RFC 6410 . Этикетка Historic применяется к устаревшим документам Стандартов Гусеницы или устаревшему РЛКУ , которые были опубликованы до Дорожки стандартов была создана.

Только IETF , в лице Internet Engineering Руководящей группы (IESG), можно утверждать стандарты Track РЛК. Окончательный перечень стандартов Интернета поддерживается в стандартах официальной интернет — протокола . Ранее STD 1 используется для поддержания снимок списка.

процесс стандартизации

Став стандартом является двухстадийный процесс , в рамках процесса стандартизации Интернет: Предлагаемый стандарт и Интернет — стандарт . Они называются уровни зрелости , и этот процесс называется Track стандартов .

Если RFC является частью предложений , которая находится на дорожке стандартов, то на первом этапе, стандарт предложен и впоследствии организация решить , следует ли реализовать этот предлагаемый стандарт. После того, как критерии , указанные в RFC 6410 выполняется (две отдельные реализации, широкое использование, нет опечаток и т.д.), RFC может перейти к Internet Standard.

Процесс стандартизации Интернета определен в нескольких документах «Best Current Practice», в частности BCP 9 ( в настоящее время RFC 2026 и RFC 6410 ). Были ранее три стандартных уровней зрелости: Предлагаемый стандарт , проект стандарта и стандарт интернета . RFC 6410 свел до двух уровней зрелости.

Предлагаемый стандарт

RFC 2026 первоначально характеризуется как предлагаемые стандарты спецификаций незрелых, но эта позиция была аннулирована RFC 7127 .

Предлагаемый стандарт спецификация является стабильной, разрешило известные проектные решения, получили значительный обзор сообщества, и , как представляется , пользуется достаточно интереса сообщества считаются ценным. Как правило, ни реализации , ни опыт работы не требуется для обозначения спецификации в качестве предлагаемого стандарта.

Предлагаемые стандарты имеют такого качества, что реализации могут быть развернуты в Интернете. Тем не менее, как и со всеми техническими характеристиками, Предлагаемые стандарты могут быть пересмотрены, если проблемы найдены или лучшие решения идентифицируются, когда опыт с развертыванием реализации таких технологий в масштабе собираются.

Многие предлагаемые стандарты фактически размещены в Интернете и широко используются, в качестве стабильных протоколов. Реальная практика была, что полная прогрессия через последовательность уровней стандартов, как правило, довольно редка, и наиболее популярные IETF протоколы остаются в предложенном стандарте.

Проект стандарта

В октябре 2011 года , RFC 6410 объединен вторые и третьи уровни зрелости в один проект стандарта. Существующие старые проекты стандартов сохраняют эту классификацию. IESG может переквалифицировать старый проект стандарта в качестве предлагаемого стандарта после двух лет (октябрь 2013).

Интернет Стандартный

Интернет Стандарт характеризуется высокой степенью технической зрелости и в целом распространенное мнение о том , что указанный протокол или услуга обеспечивает значительные преимущества для интернет — сообщества. Как правило , стандарты Интернета охватывают совместимость систем в Интернете с помощью определяющих протоколов, форматов сообщений, схем и языков. Наиболее фундаментальные из стандартов Интернета являются те , определяющим протоколом Интернета .

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

Все стандарты Интернет предоставляется номер в серии STD. Серия не была обобщена в первом документе, STD 1 ( RFC 5000 ), до 2013 года, но эта практика была отставной в RFC 7100 . Окончательный перечень стандартов Интернета , в настоящее время поддерживается редактором RFC.

Документы , представленные в IETF редактор и принятые в качестве RFC не пересматриваются; если документ должен быть изменен, он будет представлен вновь и присвоен новый номер RFC. Когда RFC становится стандартом Интернет , (STD), ему присваивается номер STD , но сохраняет свой номер RFC. Когда Интернет Стандартный обновляется, его номер не изменяется , но относится к другому RFC или набор RFC. Например, в 2007 году RFC 3700 был стандартный Интернет (STD 1) , а в мае 2008 года он был заменен RFC 5000 . RFC 3700 получил исторический статус, и RFC 5000 стал STD 1.

Перечень стандартов Интернета, первоначально был опубликован как STD 1, но эта практика была оставлена ​​в пользу онлайн-список поддерживаемого редактора RFC.

Смотрите также

Рекомендации

внешняя ссылка

Никогда не проверяйте e-mail адреса по стандартам RFC / Habr

Множество сайтов требуют от пользователя ввода адреса электронной почты, и мы, как крутые и щепетильные разработчики, всегда стремимся проверять формат введенных адресов строго по стандартам RFC. Благодаря этому наши приложения и сайты проверяют формат e-mail корректно и не имеют проблем с юзабилити, а мы сладко спим, потому что уверены, что все работает как надо.
Ага, как бы не так!
Приведенные выше аргументы звучат круто и железобетонно, но проблема здесь заключается в том, что в адресе почты могут находиться совершенно бессмысленные вещи, и, на деле, проверка адресов по стандартам RFC может, наоборот, все жутко запутать.
Почему так? Существует множество способов сформировать адрес почты, который будет одновременно и корректным и бредовым. Отчасти это происходит из-за того, что некоторые почтовые службы в целях обратной совместимости позволяют представлять адреса в форматах, которые давно устарели. Например это электронная почта существовавшая до появления DNS и до появления современного формата [email protected]: тогда использовались UUCP ”bang path” — адреса, которые представляли собой список всех узлов по маршруту ответственных за доставку.
Внутренности адреса почты

Адрес e-mail выглядит так:
mailbox@hostname

Тут mailbox может быть локальным аккаунтом пользователя, аккаунтом роли или маршрутизатором автоматизированной системы такой, например, как список рассылки, а в качестве hostname может быть использован любой узел, если о нем известно DNS-серверу, к которому обращается почтовик при доставке.
Кроме того, некоторые системы позволяют добавлять теги к адресу. Обычно это происходит в формате:
mailbox+tag@hostname

где тег и разделитель (обычно это «+», но qmail использует «-» по-умолчанию, хотя может быть сконфигурирован и иначе) игнорируются при доставке. Обычно это используется для фильтрации почты по папкам и автоматизации, но может быть использовано и для разделения введенных адресов по получателям и выявления злоупотреблений персональными данными.
Итак, в адресе в формате «mailbox@hostname», «mailbox» является пользовательским аккаунтом, приложением или аккаунтом системной роли, но может содержать и такие экстравагантные вещи, как информацию для дальнейшей маршрутизации или идентификаторы используемые для сортировки, автоматизации или отслеживания, а «hostname» — обычно доменное имя, но может являться и субдоменом, сервером, сервисом, ip-адресом или просто именем хоста.
Корректные имена ящика с точки зрения RFC

Специцификация одобряет довольно странные адреса, и было бы накладно поддерживать их все потому, что некоторые слишком сложны, и не слишком много людей обладают достаточными знаниями чтобы выделывать такие пируэты в нейминге. Поддержка таких адресов затруднит поддержку таких аккаунтов вашими сотрудниками, к тому же они почти никогда не используются в быту.
Ящик может содержать пробелы. Насколько я помню, доинтернетовский AOL разрешал пробелы в «Imya Polzovatelya», которые использовались еще и как почтовые ящики с вырезанными оттуда пробелами: «[email protected]», однако ж согласно RFC вы можете использовать двойные кавычки вокруг ящиков содержащих пробелы:
"Alan Turing"@example.com   <== Это корректно, но поддерживать не стоит

Кстати говоря, по этой логике, ящик содержащий всего лишь пробел корректен:
" "@example.com <== Это корректно, но смотри выше

А вот еще один корректный адрес, он создан из допустимых для адреса символов:
!#$%&'*+-/=?^_`{}|[email protected]   <== Корректный адрес вряд ли достойный поддержки

Кстати, проверяйте апострофы, апострофы должны поддерживаться:
Miles.O'[email protected]  <== Стоит поддерживать

Апострофы не должны закавычиваться или эскейпиться, но когда вы сохраняете такие адреса в базу или передаете еще куда-то, убедитесь, что всё чики-пуки.
В Википедии есть еще куча примеров.
Нужна ли полная совместимость с RFC? Вам выбирать, но я не советую — пробелы и нестандартные символы в адресе довольно необычная штука и чаще всего являются просто опечаткой. Крупные e-mail провайдеры не разрешают использовать это примерно по тем же причинам; таким образом обычно достаточно дозволять буквы, цифры, точки, подчеркивания, дефисы, апострофы и плюсы.
Регистрозависимые адреса

Согласно RFC уникальность адреса определяется его регистрозависимой уникальностью, однако 99,9% провайдеров считают иначе и не позволяют регистрировать [email protected], если [email protected] уже зарегистрирован. Считайте, что имя почтового ящика регистронезависимо:
[email protected]
[email protected]
[email protected]

Небольшая кучка систем использует полную проверку регистра, позволяя лишь адрес [email protected] и отбрасывая входящую корреспондецию всех остальных АлЛеНоВ, однако это не работает на практике, поскольку пользователь не привык различать регистр в адресах почты.
Должны ли вы тут сохранять совместимость с RFC? Конвертируя адреса в нижний регистр перед сохранением вы можете доставить проблем небольшому количеству пользователей (вы не сможете посылать им письма), но отослав миллионы e-mail я столкнулся с этим всего несколько раз.
Конвертация в адреса в нижний регистр является неплохой идеей в плане нормализации данных, так как домен всегда регистронезависим и должен быть в нижнем регистре. Если же вы решите сохранять адрес так, как он введен, добавьте поле, в котором будет хранить каноническую версию.
Нестандартные символы

Gmail тут отличился: в то время как стандарт включает в себя точку как стандартный символ, Gmail не делает различий между адресами ящиков с точками и без. Эти адреса указывают на один и тот же почтовый ящик:
[email protected]
[email protected]
[email protected]

Обратите внимание, что Google Apps позволяет использовать Gmail на любом домене.
Основная проблема здесь заключается в поиске адреса в базе в том виде, в котором он был изначально введен, что может доставить немало геморроя как пользователю, так и службе поддержки, а также и программистам с тестировщиками. Тут то вам и пригодится вторая, канонiческая форма адреса, но об этом позже.
Расширенная форма названия ящиков с использованием тегов.

Как было сказано выше, большинство систем доставки электронной почты (MTA), включая sendmail, Postfix, qmail, Yahoo Plus и Gmail поддерживают расширенное название ящика. Это позволяет пользователю, добавляя тег, сортировать письма. Это может позволить мне насоздавать кучу аккаунтов на одном сайте или в приложении:
[email protected]
[email protected]

Но нужно ли вычищать теги из адреса ящика?
НЕТ! Будьте дружелюбны к своим пользователям, и пользователи проникнутся верой, что вы не осуществите хищение и сбыт их персональных данных с целью наживы. Даже если вы пытаетесь запретить регистрацию дополнительных аккаунтов с существующим ящиком, представьте себе, насколько просто в наше время тупо зарегистрировать еще один ящик чтобы снова зарегистрироваться у вас — не сложнее создания алиаса или папки(но об алиасах, папках и тегах, наоборот, мало кто знает).
Итак, еще раз. Создание второй, канонической, формы сохранения адреса в базе может неплохо прикрыть вашу за вас в случае неприятностей. Убедитесь, что вы ликвидировали из нее все теги, точки и т. д. и можете сравнивать с ней свежевведенные адреса.
Юникод и интернационализированные имена ящиков

Имена ящиков не поддерживают расширенные символы ASCII (8-bit) и символы Юникода. Это ограничение уходит своими корнями в спецификацию SMTP, во времена появления которого всего этого попросту не существовало; однако 8-битные значения, определенные локально, например из кодировок семейства ISO-8859-x, все-таки могут использоваться, но вы все равно никогда не узнаете, что же это за кодировка. Фактически, я видел 8-битные ящики только у спамеров.
В конце концов, вы ведь храните ваши данные в UTF-8, так? Значит вы в любом случае не сможете перевести их обратно в ту локаль, которая была использована, если вы ее не знаете.
Доменные имена

У почтовых доменов те же самые ограничения как и в HTTP: они регистронезависимые, так что их следует нормализовывать в нижний регистр.
Поддомены

Некоторые адреса содержат ненужные поддомены: например, «email.msn.com» и «msn.com» являются одним и тем же почтовым доменом, кроме того, такие истории часто случаются в корпоративной среде (и это еще один хороший кандидат для каноникализации).
Интернационализированные домены (IDN)

IDN были созданы для того чтобы использовать местные символы Юникода в названиях доменов, кроме того, возможно создать домен и со специальными символами:
postmaster@→→→→→→→.ws

этот классно описывает круговорот воды в природе.
Как и HTTP, SMTP поддерживает лишь 7-битную кодировку, и для того чтобы справиться с этим несчастьем IDN конвертируются в Punycode, что позволяет имени домена конвертироваться в представление Юникод и обратно:
[email protected]

Очень жаль, но существует возможность фишинга при использовании IDN. Юникод содержит несколько разных экземпляров некоторых символов ASCII. Это позволяет злоумышленнику создать сайт, название которого выглядит точно также как и оригинал из-за того, что некоторые символы в названии совпадают внешне, но не внутренне.
Это порождает несколько вопросов на которые следует ответить:
Должны ли мы дозволять IDN-адреса? Можем ли мы обеспечить саппорт пользователей службой поддержки (откуда у саппорта, например, клавиатуры с китайскими иероглифами?) Должны ли мы сохранять их в Юникоде или Punycode? Если мы сохраняем каноничные адреса, то в какой кодировке это делать? Поддерживает ли вообще наш почтовик (MTA) IDN, и в какой форме он ждет адреса при отправке писем?
IP Address syntax

Использование IP-адресов допустимо:
allen@[127.0.0.1]
allen@[IPv6:0:0:1]

Однако такие адреса выглядят подозрительно, и вряд ли им стоит доверять.
Временные почтовые адреса

Существует множество сервисов, которые предоставляют пользователям временные почтовые адреса. Обычно это используется для анонимности или для того чтобы регистрироваться на недоверенных сайтах.
Даже такие сервисы как Hotmail и Yahoo предоставляют алиасы, которые могут быть использованы примерно тем же способом, то есть уничтожены через некоторое время. Не существует единой техники выявления таких адресов — в конце концов именно для этого они и предназначены. Они используют большущий набор доменных имен с постоянной ротацией для того чтобы быть на шаг впереди тех, кто пытается пресечь их деятельность.
Белый список используемых возможностей

Адреса электронной почты могут быть чудовищно сложными, но, навскидку, 99,99% (а может, и больше) придерживаются простых принципов, а остальные слишком утомительно поддерживать.
Итак, вам вероятно следует воздержаться от поддержки адреса, если он содержит:
  • Зависимость от регистра
  • Пробелы
  • Кавычки или Эскейп-символы
  • Специальные символы кроме '._+-
  • Айпишники в поле домена
  • IDN

Конечно, это может создать проблемы некоторым пользователям, но и в этом случае они скорее всего попытаются использовать какой-нибудь другой адрес, который подойдет. Кроме того, это позволит вашему саппорту более качественно оказывать поддержку вне зависимости от пользовательской локали.
Еще я считаю, что вы должны поддерживать теги.
Если это необходимо, вы можете создать еще одно поле в базе с каноническим адресом, даже если считаете, что всю эту RFC-шную совместимость стоит поддерживать. Адрес в таком поле может быть:
  • Приведен в нижний регистр
  • Быть без тегов
  • Транскодирован из Юникода в ASCII
  • Без дублирующихся поддоменов

Несмотря на то, что этот совет может показаться слишком радикальным, это все равно лучше, чем слепо подчиняться стандартам. Как знать, может когда-нибудь такая упрощенная нотация станет новым стандартом?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *