Как методы GET и POST относятся к вебу и протоколу HTTP?

«Как методы GET и POST относятся к вебу и протоколу HTTP?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GET и POST — это два основных метода (глагола) протокола HTTP, определяющие тип операции, которую клиент хочет выполнить с ресурсом на сервере.

Характеристика GET POST
Назначение Получение данных. Отправка данных для обработки.
Данные в запросе Параметры передаются в URL (query string). Данные передаются в теле запроса (request body).
Видимость Параметры видны в адресной строке, истории браузера, логах. Данные скрыты от прямого наблюдения в UI.
Кэширование Запросы могут кэшироваться браузером и промежуточными прокси. Запросы обычно не кэшируются.
Идемпотентность Идемпотентный: Многократный вызов не должен изменять состояние сервера. Неидемпотентный: Каждый вызов может привести к изменению (например, создание новой записи).
Безопасность Считается «безопасным» (safe), не должен изменять данные. Не является «безопасным», предназначен для изменения данных.

Пример на Python (Flask):

from flask import Flask, request, jsonify

app = Flask(__name__)

# GET запрос для получения информации о товаре
@app.route('/product/<int:product_id>', methods=['GET'])
def get_product(product_id):
    # Логика получения товара из БД
    product = db.get_product_by_id(product_id)
    return jsonify(product), 200

# POST запрос для создания нового товара
@app.route('/product', methods=['POST'])
def create_product():
    # Данные приходят в теле запроса (обычно JSON)
    data = request.get_json()
    new_product = {
        'name': data['name'],
        'price': data['price']
    }
    # Логика сохранения товара в БД
    created_id = db.save_product(new_product)
    return jsonify({'id': created_id}), 201  # Код 201 Created

В RESTful API эти методы являются частью единой модели: GET для чтения, POST для создания (часто), наряду с PUT (обновление/замена), PATCH (частичное обновление) и DELETE (удаление).