Я изучаю методы HTTP. Я прочитал, что запрос GET можно пометить, а запрос POST не может быть помечен в закладки. Может ли кто-нибудь объяснить это с помощью примера?
Спасибо
Я изучаю методы HTTP. Я прочитал, что запрос GET можно пометить, а запрос POST не может быть помечен в закладки. Может ли кто-нибудь объяснить это с помощью примера?
Спасибо
HTTP POST можно занести в закладки, но поскольку закладка состоит только из URL-адреса, все параметры формы будут потеряны. Это часто означает, что веб-сервер не знает, что делать с запросом, поскольку он ожидал некоторых параметров формы.
Если вы отправляете форму через запрос GET, все параметры формы попадают в URL-адрес (после?), поэтому закладка будет содержать всю информацию, необходимую веб-серверу для повторной настройки страницы во второй раз (кроме для файлов cookie, возможно, но веб-сервер с большей вероятностью справится с этим изящно)
Невозможно создать закладку POST. Попытка закладки POST просто приведет к операции GET в URL-адресе. Для этого есть очень веская причина. Запросы GET должны быть идемпотентными, то есть повторение одного и того же запроса GET в несколько раз должно приводить к тому же ответу. С другой стороны, запросы POST - нет. Разрешить закладку POSTs может привести к тому, что вы заплатите за что-то дважды, снова переведя деньги из своего банковского счета и т.д.
Это не значит, что та или иная не может быть помечена закладкой. Более того, нажатие закладки будет всегда запускать запрос GET
! Нажав на ссылку простой ваниль, закладку, кнопку навигации браузера, войдя в адресную строку браузера, и т.д. Все вызовет запрос GET
. Они никогда не запускают запрос POST
. Запрос POST
обычно запускается только при отправке HTML <form>
, который установлен с помощью method="post"
. Вы можете отлично программировать программное обеспечение для закладки запроса POST
, но это не сделано из-за чувствительных причин.
Однако особенная особенность заключается в том, что запрос GET
idempotent. Другими словами, он гарантированно дает тот же результат каждый раз, когда вы его вызываете. Это довольно просто, поскольку все параметры запроса доступны только в URL-адресе запроса. Вы можете использовать его для preprocess данных перед отображением. В мире Java Servlet обычно используется метод doGet()
для этого, который предварительно загружает некоторые вещи на основе параметров запроса в конце, пересылает запрос в JSP файл для отображения.
А POST
запрос, однако, не идемпотент. Другими словами, гарантированно не давать тот же результат каждый раз, когда вы его вызываете. Все параметры запроса включены в тело запроса. Он не отображается для конечного пользователя, а также не отображается в URL-адресе запроса. Другими словами, вы не можете добавить закладку. Вы можете использовать данные ro postprocess после отправки формы. В мире Java Servlet обычно используется метод doPost()
для этого, который собирает параметры запроса и сохраняет его в некоторой базе данных, а в конце пересылает или перенаправляет запрос в JSP файл для результата/подтверждения/отображения.
В запросе GET
вся информация для запроса закодирована в URL-адресе. В запросе POST
запрос делается с указанным URL-адресом, но вся информация, связанная с запросом, например, form content, передается в теле запроса.
При закладке URL-адреса вы указываете только URL-адрес, а не тело запроса. Например. если вы заполните форму на веб-странице, которая затем будет передана на веб-сервер в виде запроса POST
, а затем закладите страницу ответа в браузере, браузер заметит только URL-адрес, но не тело формы.
Кроме того, при закладке страницы в браузере закладка включает только URL-адрес, но не метод запроса. Браузер всегда использует GET
для всех закладок.
Фактически, что запросы не являются закладками, а URI.
Параметры GET отправляются как часть URL-адреса, тогда как параметры POST отправляются в тело запроса HTTP. POST похож на GET со вторым скрытым набором аргументов, которые не видны пользователю. Вот почему вы можете сделать запрос POST по URL-адресу, содержащему параметры GET.
Подробнее см. Как параметры передаются в запросе HTTP POST?
Хотя обычно закладки содержат URL-адреса, они также могут содержать код JavaScript (так называемые букмарклеты), и есть хаки для создания закладок, которые будут делать запрос POST вместо GET.
Подробнее см. Как сохранить закладку в Firefox с данными POST?