То, что кто-то говорит «не делай этого», не означает, что это невозможно сделать.
Правильное использование / реализация HTTP , как описано в официальной спецификации , не приведет к изменениям данных, вызванным запросами GET.
Нолюди, которые написали спецификацию, не являются полицейскими, поэтому люди могут написать свой серверный код, чтобы делать все, что им захочется.
Редактировать, чтобы добавить: После всего нашего предыдущего обсуждения, я думаю, мне нужно идтив глубину, чтобы объяснить это подробно.
TL; DR;- изучить, как на самом деле работает сетевой трафик.
Чтобы действительно понять, почему можно сохранять данные с помощью запроса GET, вам необходимо знать, как все это работает.
МыНачнем с самого нижнего уровня оборудования и продолжим наш путь.
Уровень 1 - ваша сетевая карта
Цель этой карты - просто предоставить путь длядвижение.Это все, что он делает.Он не выполняет никакой фильтрации - это работа верхних уровней.Микропрограмма сетевой карты не знает о first HTTP, поэтому не имеет значения, является ли запрос GET или нет.
Ваша сетевая карта будет НЕ ограничивать запрос HTTP GET от каких-либо действий.
Второй уровень - стек TCP / IP (Это несколькообобщенно. Вероятно, есть еще несколько уровней для управления некоторыми коммуникациями, о которых я не знаю, так как я не сетевой инженер. И, технически, стек TCP / IP - это два уровня.)
TCP иIP начал свою жизнь как программное обеспечение, написанное по стандартам TCP и IPТаким образом, вполне возможно, что разные поставщики программного обеспечения могут написать свои собственные интерпретации и игнорировать элементы стандарта, если они пожелают (и я не удивлюсь, если это действительно произойдет, когда стандарт станет более зрелым).В конце концов, стандарт стал настолько повсеместным, что он перешел на прошивку самих сетевых карт.На этом этапе TCP / IP можно рассматривать как аппаратную реализацию.
TCP означает протокол управления транспортом.Задача TCP - определить, как данные понимаются в сети.Это слой, который «думает», чтобы определить, предназначен ли фрагмент данных для вашего компьютера.TCP также ничего не знает о HTTP, поэтому он также не заботится о запросах GET.
IP означает Интернет-протокол.Он расположен поверх TCP, чтобы помочь определить, какая часть программного обеспечения отвечает за контент, отправляемый через TCP.IP определяет понятие IP-адреса и порта.IP отвечает за доставку предоставленного пакета данных на указанный компьютер и пакет программного обеспечения, который зарегистрирован для обработки обменов для данного порта.Именно здесь вводятся и обрабатываются концепции IP-адреса и порта.
IP работает, заключая фактические данные, отправляемые в пакет данных, добавляя направления (IP-адрес и порт, а также несколько других) дляДоставка.Фактическое содержимое пакета игнорируется, поскольку оно не входит в сферу ответственности уровня IP.
Обратите внимание, что заголовки HTTP НЕ являются частью механизма IP-адресации - они являются частью доставляемого содержимого..
Уровень три - программное обеспечение
Для обработки пакета данных IP, программы попросят зарезервировать порт для себя, сообщив стеку IP: «Отправьте любые данные, поступающие вна этот порт прямо мне ".
ЛЮБОЙ программный пакет может зарезервировать ЛЮБОЙ порт, но только привязка программного обеспечения к порту является сделкой 1: 1.Одна программа на один порт и один порт на программу.
HTTP стандарт - это порт 80, но ОЧЕНЬ распространено использовать разные порты (например, 8080) для тестирования веб-сайтов перед их развертыванием напорт 80.
Однако вполне возможно использовать порт 80 для другой цели - вы можете использовать его для сервера Telnet, FTP-сервера, пользовательского протокола - даже DNS-сервера, если хотите.Стек TCP / IP НЕ ЗАБЫВАЕТ о том, что вы делаете с портом, он ТОЛЬКО заботится о доставке данных в "парадную дверь".
Так как равен возможно (и нередко) многократное использование портов для разных вещей. TCP / IP не будет выполнять фильтрацию контента.Опять же, HTTP-запрос GET НЕ будет фильтроваться в стеке TCP / IP, потому что пакет программного обеспечения отвечает за обработку доставляемых данных.
... и теперь мы получаем то, что я 'Я пытался сказать все это время. Люди решают, какое программное обеспечение они будут писать.Существуют МНОГИЕ различных реализаций HTTP-серверов (две "стандартные" версии - Microsoft и Apache - но если вы не знаете об этом, посмотрите, что сообщество Node.JS может сделать с помощью HTTPреализации сервера. Вероятно, сейчас существуют тысячи различных пользовательских реализаций HTTP-сервера.)
Зная все этого, я попрошу вас КАК это будет ВОЗМОЖНО ограничить GET-запрос от добавления / изменения данных?Уровень IP, смотрящий на данные, основанный на порте и не разрешающий тело для запросов GET?Я могу подумать о двух «обходных путях» прямо в голове - добавить контент в URL или добавить контент в cookie.
Итак, чтобы (наконец) ответить на ваш вопрос: пока это теоретически возможно построить систему, которая будет ограничивать поведение всего программного обеспечения, которое ведет себя как HTTP-сервер, так что он будет блокировать любой запрос GET от изменения данных - это практическая невозможность.