Есть ли разница между параметрами в URL и <form method = "get">? - PullRequest
6 голосов
/ 05 ноября 2008

Теперь я знаю разницу между параметрами в URL-адресе и параметром POST: некоторые браузеры могут вести себя неправильно, если URL-адрес слишком длинный, поэтому не рекомендуется вставлять сотни параметров в URL-адрес, даже если ваше приложение может ответить на запрос GET.

Для обсуждения давайте предположим следующее веб-приложение: пользователь может ввести серию (возможно, сотни) координат X, Y. Сервер выводит их на график, который возвращается в виде изображения.

Это явно пример идемпотентной операции , поэтому, согласно HTTP-спецификации , рекомендуется выполнять ее как операцию GET. Однако вы не можете создать URL со всеми параметрами, так как он будет слишком длинным. Может ли обрабатывать столько параметров?

Я также слышал, что полностью эквивалентно размещению параметров в URL? Теперь, это правда для некоторых браузеров или для всего протокола HTTP? Максимальная длина запроса?

Ответы [ 8 ]

7 голосов
/ 05 ноября 2008

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

Браузер создаст длинный URL, если для формы задан метод GET, поэтому действуют вышеуказанные ограничения.

3 голосов
/ 05 ноября 2008

Спецификация HTTP явно не требует помещения параметров запроса GET в URI. Было бы законно отправлять тело сообщения в GET-запросе, например, формы, используя POST do.

Однако браузеры реализуют GET-формы таким образом по очень веской причине: кеширование. Ожидается, что запросы GET будут обрабатываться на сервере без побочных эффектов. Таким образом, ответы на запросы GET могут быть кэшированы. Эта опция улучшения производительности мгновенно теряется, если вы начнете использовать тела сообщений при запросах GET.

Если вы планируете создавать API для диаграмм, вы можете взглянуть на Google . Они уже предлагают очень хороший для публики. Даже если это только для изучения того, как упаковать как можно больше информации в параметры URI, это стоит посмотреть.

alt text alt text alt text alt text

2 голосов
/ 05 ноября 2008

То, что на самом деле делает ваш браузер, это выстраивает очень длинный URL из форм ввода. Следовательно, не будет разницы между URL и формой Method = "GET". Любой из них приведет к загрузке одного и того же URL.

1 голос
/ 05 ноября 2008

Нет, сервер не видит разницы между помещением параметров в URL и использованием FORM с методом GET. Таким образом, если заданный URL-адрес с параметрами будет слишком длинным, использование FORM с методом GET не поможет.

POST или GET следует выбирать в основном по их семантике. GET для «безопасных» действий. То есть пользователи не должны нести ответственность за операцию, выполняемую GET-запросом. Метод POST используется для операций, за которые пользователь должен нести ответственность.

Очень неприятно, например, когда функция поиска использует POST. Пользователь не ожидает, что простой запрос изменит какое-либо важное состояние системы - он ожидает, что поиск будет «безопасной» операцией.

С другой стороны, существует множество уязвимостей, поскольку небезопасные операции доступны через запросы GET, а также через POST. Это способствует появлению таких уязвимостей, как XSRF, когда злоумышленнику просто нужно вставить вредоносный URL-адрес «src» в тег IMG на легитимном сайте.

Для вашего случая использования Ajax может быть подходящим решением. Вы можете сделать запрос GET для каждой выбранной точки, сохраняя их в сеансе на сервере. Когда пользователь заканчивает вводить точки, окончательный запрос GET возвращает готовый продукт.

1 голос
/ 05 ноября 2008

GET и url? Name = value & ... - это одно и то же, поскольку браузер просто конвертирует форму GET в URL перед отправкой запроса.

Максимальная длина URL-адреса определяется на уровне браузера и сервера, поэтому для данного браузера / сервера она меньше из двух.

В этом сообщении есть хороший список текущих максимальных длин URL-адресов

1 голос
/ 05 ноября 2008

form method = get будет помещать все входные данные формы в URL.

Это правда, что браузеры имеют максимальную длину для URL. Он изменяется от браузеров к браузерам и, конечно, от версии браузеров к версии браузеров.

Если вы можете, я бы порекомендовал вам использовать POST для вашей формы.

НТН

0 голосов
/ 05 ноября 2008

Это не ответ на ваш вопрос о получении и публикации, но в описываемой вами ситуации довольно часто проще хранить более сложные данные на сервере и связывать их с идентификатором сеанса или учетной записью пользователя. чем положить его в URL каждый раз. Затем вы можете использовать только идентификатор для этого сеанса в файле cookie или в качестве параметра url для получения изображения.

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

0 голосов
/ 05 ноября 2008

Я также слышал, что полностью эквивалентно размещению параметров в URL?

Это правда, вот соответствующий RFC раздел

Есть ли максимальная длина запроса?

spec гласит: «Протокол HTTP не устанавливает никаких априорных ограничений на длину URI.»

Однако у Internet Explorer 6 есть ограничение в 2083 символа. Другие браузеры допускают больше символов, но если вы пойдете по этому пути, вам, в основном, придётся разработать для ie6

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