В запросе HTTP GET пары ключ / значение указываются в URL:
<a href="http://server/something?value1=foo&value2=bar" rel="noreferrer">http://server/something?value1=foo&value2=bar</a>
.
В запросе HTTP POST пары ключ / значение отправляются как часть HTTP-запроса после заголовков. Например:
POST /something HTTP/1.1
Host: server
Content-Length: 21
Content-Type: application/x-www-form-urlencoded
value1=foo&value2=bar
Трудно действительно описать одно как более или менее безопасное, чем другое, но данные HTTP POST не видны в URL, и при отправке данных на веб-сайт HTTP POST обычно может быть выполнен только в результате взаимодействие с пользователем (например, нажав кнопку «Отправить»).
Это означает, что пользователь не может быть обманут в посещении URL-адреса, подобного <a href="http://server/update_profile?name=I_suck" rel="noreferrer">http://server/update_profile?name=I_suck</a>
, и конфиденциальные данные не отображаются в URL-адресе.
Вы также можете использовать nonces и другие токены защиты от подделки с HTML-формами (использующими POST) для предотвращения других форм подделки межсайтовых запросов.
Как правило, POST следует использовать для запросов, которые потенциально могут изменять состояние на сервере, а GET следует использовать для операций только для чтения.