Одни и те же данные передаются по проводам независимо от того, используете ли вы GET или POST. Вот пример запроса GET, который является результатом отправки формы [вынул значение User-Agent, потому что оно было длинным]:
GET /Testing/?foo=bar&submit=submit HTTP/1.1
Host: localhost
User-Agent: ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://localhost/Testing/demoform.html
Теперь вот тот же запрос, что и POST:
POST /Testing/ HTTP/1.1
Host: localhost
User-Agent: ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://localhost/Testing/demoform.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 21
foo=bar&submit=submit
Обратите внимание, что это то, что видит сервер, когда вы отправляете запрос, или то, что злоумышленник в середине может видеть при перехвате запроса.
В GET мы видим, что foo = bar
и submit = submit
в первой строке запроса. В POST мы должны посмотреть на последнюю строку, чтобы увидеть это ... эй! foo = bar
и submit = submit
. То же самое.
На уровне браузера разница проявляется в адресной строке. Первый запрос показывает строку ?foo=bar&submit=submit
, а второй - нет. Злоумышленник, который хочет перехватить эти данные, не заботится о том, что появляется в адресной строке браузера. Основная опасность возникает из-за того, что любой может скопировать URL-адрес из адресной строки и передать его таким образом, что утечка параметров; на самом деле люди очень часто делают это.
Единственный способ помешать нашему злоумышленнику увидеть любой из этих типов запросов - все это должно быть зашифровано перед отправкой на сервер. Сервер предоставляет открытый ключ, который используется (через протокол https и SSL / TLS). Браузер использует ключ для шифрования запроса, а сервер расшифровывает его своим закрытым ключом. На стороне клиента все еще существует проблема относительно того, принадлежит ли ключ, полученный от сервера, людям, работающим на сервере. Это должно быть проверено с помощью какой-либо внеполосной системы доверия, такой как проверка третьей стороной или сравнение отпечатков пальцев или что-то в этом роде.
Все это полностью ортогонально REST. Независимо от того, как вы это делаете, если вы передаете информацию по сети через HTTP, у вас возникнет эта проблема, и вам нужно будет зашифровать запросы / ответы, чтобы злоумышленники не могли их увидеть.