среда, 15 сентября 2010 г.

Максимальная длина URL

Не так давно, при проектировании БД, пришлось столкнутся с вопросом максимальной возможной длины URL: сколько места нужно резервировать под поля содержащие URL? Да так, чтоб выделенного места могло хватить для любых ссылок. А действительно, каков лимит? Наверняка подобная ситуация возникала у многих, почему хочу внести ясность в вопрос.

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

В спецификации RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1), в разделе 3.2.1, говорится, что нет никаких ограничений на длину URI (URI — это официальный термин того, что большинство людей называет URL). Также она предупреждает, что URI длиннее чем примерно 255 символов могут не поддерживаться некоторыми старыми клиентами и прокси-серверами (это в 1999-м то году; незнаю насколько это сейчас актуально).

Еще есть спецификация RFC 3986 (Uniform Resource Locator (URI): Generic Syntax), в которой также указывается, что нет никаких ограничений на общую длину URL, за исключением ограничения в 255 символов на название хоста (из-за ограничений DNS).

Итак, максимальная длина URL теоретически может быть неограниченна.

Т.е. если мы хотим хранить ссылки в БД, то нужно быть готовым к ситуации, когда длина URL будет очень большой.

Отлично, с теорией все ясно. А как обстоят дела с практикой?

Практику уже исследовали до нас, потому просто воспользуюсь результатами. Самое последние (и, потому, наиболее актуальное) известное мне исследование проводил ресурс Boutell.Com в 2006-м году. Ихняя рекомендация — не использовать URL длинее чем 2000 символов, поскольку более длинные URL могут вызвать проблемы у наиболее популярных веб-браузерах (так уж сложилось, что наиболее популярными браузерами является семейство Internet Explorer).

На практике, URL длинее чем 2000 символов — проблемный URL.

Ниже приведу некоторые факты, для обрисовки полной картины:
  • Internet Explorer всех версий (на данный момент последней является 8-я) поддерживает максимальну длину URL в 2083 символов, но практический лимит — 2048 символов.
  • Другие браузеры имеют значительно больший "запас" (FF > 65k, Opera > 200k, Chrome/Safari >> 8)
  • Apache имеет ограничение по умолчанию в 8K символов.
  • По умолчанию, максимальная длина URL для IIS (Internet Information Server) — 16K.
  • Google _уже_ индексирует страницы с URL длиной до 2K символов, но из-за ограничений на сервере самого гугла, пользователь не сможет перейти на нее из результатов поиска (итого, максимальная "юзабельная" длина URL для гугла - 1855 символов)
  • Другие поисковики, и вебдевелоперские утилиты ведут себя плохо при размерах URL в 2K
Хотя стандарт и не накладывает ограничений на длину, но, де-факто, очень длинный URL — это скорее аномалия, чем рабочая ссылка. Потому с практической точки зрения, размера поля в 2K символов будет вполне достаточно (но опять же, нужно иметь в виду что, URL может "не влезть").

1 комментарий:

Eugene Yatskov комментирует...

Абревиатуры URL и URI не всегда полностью взаимозаменяемые.
В то время как URL (Uniform Resource Locator) имеет более конкретную привязку расположения ресурса к конкретному физ. месту или устройству, URI (Uniform Resource Indicator) является лишь логическим указателем помогающим идентифициаровать ресурс среди подобных, таким образом обеспечивая мобильность ресурса и не прямую зависимость от физ. места или устройства.
Хорошо прослеживается разница этих понятий например в протоколе SIP.