<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Paradigm.ru &#187; url</title>
	<atom:link href="http://paradigm.ru/tag/url/feed" rel="self" type="application/rss+xml" />
	<link>http://paradigm.ru</link>
	<description>Блог Александра Мусаева</description>
	<lastBuildDate>Wed, 23 Nov 2011 19:10:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Какой максимальной длины может быть URL?</title>
		<link>http://paradigm.ru/url-max-length</link>
		<comments>http://paradigm.ru/url-max-length#comments</comments>
		<pubDate>Tue, 18 Dec 2007 21:03:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[браузеры]]></category>
		<category><![CDATA[веб-серверы]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2007/12/19/url-max-length/</guid>
		<description><![CDATA[Когда я&#160;читал документацию по&#160;Google Chart API, во&#160;время подготовки посвященного ему поста, меня удивил немалый объем данных, который разработчики предлагают передавать через GET запросы. Причиной тому было непонятно откуда взявшееся убеждение в&#160;том, что максимальная длина URL, регламентированная стандартом HTTP, составляет 256&#160;символов. В&#160;действительности это далеко не&#160;так (ложное воспоминание о&#160;числе 256&#160;скорее всего было порождено SQL-типом VARCHAR или чем-то [...]]]></description>
			<content:encoded><![CDATA[<p>Когда я&nbsp;читал документацию по&nbsp;<a href="http://code.google.com/apis/chart/">Google Chart API</a>, во&nbsp;время подготовки <a href="http://www.paradigm.ru/2007/12/18/google-chart/">посвященного ему поста</a>, меня удивил немалый объем данных, который разработчики предлагают передавать через GET запросы. Причиной тому было непонятно откуда взявшееся убеждение в&nbsp;том, что максимальная длина URL, регламентированная стандартом HTTP, составляет 256&nbsp;символов. В&nbsp;действительности это далеко не&nbsp;так (ложное воспоминание о&nbsp;числе 256&nbsp;скорее всего было порождено SQL-типом VARCHAR или чем-то подробным). HTTP формально не&nbsp;лимитирует длину URL, но&nbsp;ограничение на&nbsp;нее накладывают реализации этого протокола.</p>

<p>Я&nbsp;нашел значения величин этих ограничений для популярных браузеров и&nbsp;HTTP-серверов в&nbsp;списке часто-задаваемых вопросов <a href="http://www.boutell.com/newfaq/misc/urllength.html">на&nbsp;сайте boutell.com</a>. Далее по&nbsp;тексту&nbsp;&#8212; переведенный вариант выжимки из&nbsp;этой статьи, который я&nbsp;немного дополнил от&nbsp;себя.</p>

<h3>Браузеры</h3>

<p><strong>Microsoft Internet Explorer:</strong> Начиная с&nbsp;четвертой версии браузера, максимальная длина воспринимаемого URL составляет <a href="http://support.microsoft.com/kb/q208427/">2,083&nbsp;символов</a>. При этом длина GET-запроса лимитирована 2,048&nbsp;символа. На&nbsp;POST никаких ограничений, понятное дело, не&nbsp;накладывается.</p>

<p><strong>Firefox:</strong> В&nbsp;старых версиях (1.5.x) было ограничение на&nbsp;64&nbsp;килобайта, но,&nbsp;вполне возможно, это был баг, который позже исправили. Теперь, по&nbsp;всей видимости, ограничения на&nbsp;длину URL снято вообще, либо оно существенно превышает &laquo;пределы разумного&raquo; (проверено, что Firefox может &laquo;съесть&raquo; URL длиной в&nbsp;100,000&nbsp;символов).</p>

<p><strong>Safari:</strong> Лимита на&nbsp;длину URL нет так&nbsp;же, как и&nbsp;в&nbsp;Firefox. Автор FAQ успешно протестировал адрес длиной 80,000&nbsp;символов.</p>

<p>Opera:</strong> По&nbsp;заявлению разработчиков, <a href="http://www.opera.com/support/search/view/387/">лимита нет</a>. Успешно прошли тесты с&nbsp;190,000&nbsp;символами.</p>

<h3>Серверы</h3>

<p><strong>Apache:</strong> Строго говоря, ограничение длины URL можно менять в&nbsp;конфигурации сервера параметрами <code>LimitRequest*</code>, поэтому все зависит от&nbsp;конкретного случая. Но&nbsp;существуют значения по-умолчанию, которые часто оставляют неизменными. Они лимитируют длину URL (точнее, любой строки HTTP-запроса) значением в&nbsp;8&nbsp;килобайт. В&nbsp;более ранних версиях Apache было 4&nbsp;килобайта.</p>

<p><strong>Microsoft Internet Information Server:</strong> По-умолчанию, длина URL ограничена пределом в&nbsp;16&nbsp;килобайт. При необходимости, значение можно увеличить. Немного странно, что сервер Microsoft не&nbsp;накладывает столь&nbsp;же жестких ограничений на&nbsp;этот параметр, как и&nbsp;браузер.</p>

<p><strong>Perl HTTP::Daemon:</strong> 8,000&nbsp;символов на&nbsp;длину URL и&nbsp;16&nbsp;килобайт для суммарного объема HTTP-заголовка. Лимит несложно снять, для чего потребуется откорректировать значения <code>16&times;1024</code>&nbsp;в&nbsp;файле <code>Daemon.pm</code>.</p>

<h3>Общие рекомендации</h3>

<p>Принимая во&nbsp;внимание приведенные сведения, конечно&nbsp;же не&nbsp;стоит использовать URL длиной более 2,000&nbsp;символов. В&nbsp;противном случае такие ссылки не&nbsp;будут работать примерно у&nbsp;60%&nbsp;пользователей интернет.</p>

<p>Чаще всего, этой величины будет вполне хватать, т.к. если речь идет о&nbsp;передаче большого объема информации с&nbsp;клиента на&nbsp;сервер, по&nbsp;многим причинам (для безопасности, например) рекомендуется отдавать предпочтение методу POST. То-есть делать так:</p>

<p><pre><code class="html">&lt;form action="myscript.php" method="POST"&gt;
...
&lt;/form&gt;</code></pre></p>

<p>GET&nbsp;же предназначен для адресации страниц с&nbsp;динамическим контентом, чье содержимое не&nbsp;меняется при каждом повторном обращении. Самый распространенный тому пример&nbsp;&#8212; отчеты поисковых систем.</p>

<p>В&nbsp;общем случае, если данные не&nbsp;требуются для повторной генерации идентичной веб-страницы, такие данные не&nbsp;должны быть частью URL.</p>

<p>Когда необходимость в&nbsp;объемных URL все-таки присутствует, можно использовать разные алгоритмы кодирования для сокращения их&nbsp;длины. Один из&nbsp;примеров был приведен в&nbsp;уже упоминавшемся <a href="http://code.google.com/apis/chart/">посте о&nbsp;Google Chart</a>, на&nbsp;примере специального формата записи данных для построения диаграмм. В&nbsp;особо-тяжелых случаях можно сжимать данные gzip-ом с&nbsp;последующим кодированием в&nbsp;BASE64, но&nbsp;лучше, конечно, по&nbsp;возможности избегать таких вещей. Более красивым решением может быть использование базы данных для хранения на&nbsp;сервере параметров каждого запроса. В&nbsp;таком случае URL сможет содержать только короткий идентификатор необходимой записи.</p>

<h3>Что произойдет на&nbsp;сервере при выходе длины запроса за&nbsp;дозволенный предел?</h3>

<p>Будет выдано сообщение об&nbsp;ошибке с&nbsp;кодом 413&nbsp;(Entity Too Large). Обрезания URL не&nbsp;произойдет по&nbsp;той причине, что результат изменения адреса может быть непредсказуем.</p>

<p>О&nbsp;том, как именно отреагирует в&nbsp;таком случае веб-приложение, однозначно ответить нельзя. В&nbsp;любом случае, всегда следует контролировать подобные ситуации.</p>

<p>По&nbsp;теме:</p>

<ul>
<li><a href="http://www.boutell.com/newfaq/misc/urllength.html">What is&nbsp;the maximum length of&nbsp;a&nbsp;URL?</a> @ boutell.com</li>
<li><a href="http://support.microsoft.com/kb/q208427/">Maximum URL length is&nbsp;2,083&nbsp;characters in&nbsp;Internet Explorer</a> @ Microsoft Knowledge Base</li>
<li><a href="http://httpd.apache.org/docs/trunk/mod/core.html#limitrequestfieldsize">Apache Core Features</a></li>
<li><a href="http://www.opera.com/support/search/view/387/">What is&nbsp;the maximum length of&nbsp;a&nbsp;URL that Opera will accept?</a> @ opera.com</li></ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/url-max-length/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>

