Шифрует ли POST-запрос данные по умолчанию?

«Шифрует ли POST-запрос данные по умолчанию?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, метод HTTP POST сам по себе не шифрует данные. Безопасность передачи данных зависит исключительно от используемого протокола транспортного уровня.

Два основных сценария:

Протокол Шифрование Риск
HTTP Отсутствует. Данные передаются в открытом виде (plain text). Перехват (sniffing), подмена (MITM).
HTTPS Данные шифруются с помощью криптографических протоколов TLS/SSL. Защищённая передача.

Пример отправки POST-запроса с шифрованием (Java с HTTPS):

import java.net.URL;
import java.io.OutputStream;
import javax.net.ssl.HttpsURLConnection;

URL url = new URL("https://secure-api.example.com/login");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);

String jsonBody = "{"username":"user","password":"pass"}";
try (OutputStream os = connection.getOutputStream()) {
    byte[] input = jsonBody.getBytes("utf-8");
    os.write(input, 0, input.length); // Данные шифруются TLS
}
int responseCode = connection.getResponseCode();

Важно: Для полной безопасности необходимо также:

  1. Валидировать SSL-сертификат сервера.
  2. Использовать современные версии TLS (например, TLS 1.2+).
  3. Для сверхчувствительных данных применять дополнительное шифрование на уровне приложения (end-to-end encryption).