Почему не желательно отправлять конфиденциальные данные через GET запрос

«Почему не желательно отправлять конфиденциальные данные через GET запрос» — вопрос из категории Сети, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GET-запросы передают данные в URL, который сохраняется в истории браузера, логах сервера и может быть виден в network-инструментах разработчика. POST-запросы безопаснее, так как данные передаются в теле запроса.

Пример уязвимости:

// Небезопасно - пароль в URL
val url = "https://api.example.com/login?user=test&password=12345"

// Безопаснее - POST с телом запроса
val request = Request.Builder()
    .url("https://api.example.com/login")
    .post(FormBody.Builder()
        .add("user", "test")
        .add("password", "12345")
        .build())
    .build()

Также GET-параметры могут кэшироваться прокси-серверами и попадать в аналитику. Для конфиденциальных данных всегда используйте POST/PUT с HTTPS.