ошибка AJAX GET-запроса с большим количеством параметров - PullRequest
0 голосов
/ 28 января 2011

Отправка запроса с длиной URL-адреса ~ 4950 символов.

Получение следующего XMLHTTPRequest.ResponseText:

ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: ##my long url##
The following error was encountered:
Invalid URL
Some aspect of the requested URL is incorrect. Possible problems:
Missing or incorrect access protocol (should be `http://'' or similar)
Missing hostname
Illegal double-escape in the URL-Path
Illegal character in hostname; underscores are not allowed
Your cache administrator is webmaster. 

Но когда я ввожу тот же URL-адрес в браузере, он работает очень хорошо,Я проверил на возможные ошибки (которые перечислены в тексте ответа) - все в порядке.

Когда число параметров меньше ~ 200, скрипт работает, поэтому ключ должен находиться в некоторых пределах.С другой стороны, в apache, php или js нет никаких настроек.

Какие-нибудь советы или где мне искать (какие-то дополнительные конфиги или что-то еще) для решения?

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Отправка запроса с длиной URL ~ 4950 символов.

Это все равно слишком много для Internet Explorer. Также возможно для Opera, для которой IIRC имеет ограничение в 4096 байт для запросов GET.

Вы должны использовать POST для этого количества данных.

Максимальная длина URL-адреса составляет 2 083 символа в Internet Explorer

0 голосов
/ 28 января 2011

Apache отвечает с 413 Entity Too Large, если URL превышает приблизительно 4000 символов (строки запроса ограничены 8190 байтами ).

Использование директивы LimitRequestLine не поможет, вам придется перекомпилировать Apache с -D DEFAULT_LIMIT_REQUEST_LINE=some huge value, если вы абсолютно хотите отправлять большие запросы GET.

РЕДАКТИРОВАТЬ: Некоторые мысли о ограничении ~ 4000 символов: 8190 выглядит очень похоже на 8192 with two bytes reserved for the string terminator, поэтому есть большая вероятность, что Apache использует UCS-2 или аналог хранить строки запроса, поскольку DEFAULT_LIMIT_REQUEST_LINE выражается в байтах, а не в символах.

Это дало бы ограничение в 4095 символов на строку запроса, т. Е. Максимальная длина URL-адреса 4079 символов (с учетом начальной GET и конечной пары CR/LF), что имело бы смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...