Python: Почему часть метода Queue.queue “ненадежна”?

Короткий ответ - фактический предел 2 000 символов

, Если Вы сохраняете URL под 2 000 символов, они будут работать в фактически любой комбинации программного обеспечения клиента и сервера.

при предназначении для конкретных браузеров посмотрите ниже для получения дополнительной информации определенные пределы.

Более длинный ответ - сначала, стандарты...

раздел (Hypertext Transfer Protocol HTTP/1.1) RFC 2616 3.2.1 говорит

, протокол HTTP не устанавливает априорной границы длины URI. Серверы ДОЛЖНЫ смочь обработать URI любого ресурса, которому они служат и ДОЛЖНЫ смочь обработать URIs неограниченной длины, если они обеспечивают, ДОБИРАЮТСЯ - базирующиеся формы, которые могли бы генерировать такой URIs. Сервер ДОЛЖЕН возвратить 414 состояний (Request-URI Too Long), если URI длиннее, чем сервер может обработать (см. раздел 10.4.15).

, Что RFC был obsoleted RFC7230, который является обновлением спецификации HTTP/1.1. Это содержит подобный язык, но также и продолжает предлагать это:

Различные специальные ограничения на длину строки запроса найдены на практике. Рекомендуется, чтобы все отправители HTTP и получатели поддерживали, как минимум, длины строки запроса 8 000 октетов.

... и действительность

Это - то, что эти говорят стандарты . Для действительность , см. это исследование по boutell.com для наблюдения то, что будут поддерживать отдельный браузер и реализации сервера. Это стоит чтения, но резюме:

Чрезвычайно длинные URL обычно являются ошибкой. URL более чем 2 000 символов не будут работать в самых популярных веб-браузерах. не используют их, если Вы предназначаете свой сайт для работы на большинство интернет-пользователей.

(Примечание: это - кавычка от статьи, написанной в [1 119] 2006 , но в 2015 использование снижения IE означает, что более длинные URL делают работа для большинства. Однако IE все еще имеет ограничение...)

ограничения Internet Explorer...

максимальная длина URL IE8 является 2 083 символами , и это кажется , IE9 имеет подобный предел .

я протестировал IE10, и строка поиска только примет 2 083 символа. Вы можете нажимать a URL, который длиннее, чем это, но строка поиска все еще только покажет 2 083 символа этой ссылки.

существует хорошая рецензия на блоге Внутренностей IE, который входит в некоторые предпосылки к этому.

Там смешаны отчеты, IE11 поддерживает более длинные URL - см. комментарии ниже. Учитывая некоторых людей сообщают о проблемах, общие рекомендации все еще стоят.

Поисковые системы как URL < 2 048 символов...

знать, что эти протокол карт сайта, который позволяет сайту сообщать поисковым системам о доступных страницах, имеет предел 2 048 символов в URL. Если Вы намереваетесь использовать карты сайта, предел был решен для Вас! (см. ответ Calin-Andrei Burloiu ниже)

существует также некоторое исследование с 2010 максимальная длина URL, которую поисковые системы проверят и индекс . Они нашли, что предел был 2 047 символами, который кажется союзническим к спецификации протокола карты сайта. Однако они также нашли, что инструмент Google SERP не справится с URL дольше, чем 1 855 символов.

Дополнительная сводка новостей

браузера я протестировал следующее против сервера Apache 2.4, настроенного с очень большим LimitRequestLine и LimitRequestFieldSize.

Browser     Address bar   document.location
                          or anchor tag
------------------------------------------
Chrome          32779           >64k
Android          8192           >64k
Firefox          >64k           >64k
Safari           >64k           >64k
IE11             2047           5120
Edge 16          2047          10240

См. также этот ответ от Matas Vaitkevicius ниже.

эта актуальная информация?

Это - популярный вопрос, и как исходному исследованию ~12 лет, я попытаюсь усовершенствовать его: С [1 148] сентябрь 2018 , все еще стоит совет. Даже при том, что IE11 может возможно принять более длинные URL, повсеместность более старых установок IE плюс ограничения поисковой системы, средние остаться под 2 000 символов, является лучшей общей политикой.

7
задан Ram Rachum 19 August 2009 в 17:39
поделиться

2 ответа

Да, здесь в документации используется слово «ненадежный», чтобы передать именно это значение: например, в некотором смысле qsize не сообщает вам, сколько там записей » прямо сейчас », концепция, которая не обязательно имеет большое значение в многопоточном мире (за исключением определенных точек, где принимаются меры предосторожности при синхронизации) - она ​​сообщает вам, сколько записей было« некоторое время назад »... когда вы действуете на эта информация, даже в самом следующем коде операции, очередь может иметь больше записей, или меньше, или вообще может быть, в зависимости от того, чем занимались другие потоки за это время (если что-то; -).

10
ответ дан 6 December 2019 в 21:17
поделиться

Я не знаю, о каком модуле очереди вы имеете в виду, пожалуйста, укажите ссылку?

Один из возможных источников ненадежности: как правило, очередь читается одним потоком и написано другим. Если вы единственный поток, обращающийся к очереди, то возможны надежные реализации qsize (), empty () и full (). Но как только будут задействованы другие потоки, возвращаемое значение этих методов может быть устаревшим к тому времени, когда вы его протестируете.

2
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: