На мгновение игнорируя ответы 3xx, мне интересно, почему заголовок местоположения HTTP используется только в сочетании с ответами POST-запросов/201 (Created).
Для ответов 201 (Создано) Location соответствует местоположению нового ресурса, который был создан по запросу.
Это широко поддерживаемое поведение, но почему бы его не использовать с другими методами HTTP? В качестве примера возьмем спецификацию JSON API:
Он определяет ссылку на себя для текущего ресурса внутри полезной нагрузки JSON (не редкость для RESTful API). Эта ссылка включена в каждую полезную нагрузку. В спецификации говорится, что вы ДОЛЖНЫ включать заголовок местоположения HTTP, если вы создаете новый документ с помощью POST, и что значение совпадает со ссылкой на саму себя в полезной нагрузке, но это ТОЛЬКО ТОЛЬКО требуется для POST. Зачем возиться с настраиваемым форматом ссылки на себя, если можно просто использовать HTTP-заголовок местоположения?
Примечание. Это не относится к JSON API. То же самое для HAL, Гиперсхема JSON или другие стандарты.
Примечание 2. Это даже не относится к заголовку местоположения HTTP, поскольку оно совпадает с заголовком ссылки HTTP. Как видите, JSON API, HAL и гиперсхема JSON не только определяют соглашения для ссылок на самих себя, но и для выражения информации о связанных ресурсах или возможных действиях для ресурса. Но кажется, что все они могли просто использовать заголовок ссылки HTTP. (Они могли бы даже поместить ссылку на себя в заголовок ссылки HTTP, если они не хотят использовать заголовок местоположения HTTP.)
Я не хочу разглагольствовать, это просто похоже на "изобретение велосипеда". Это также кажется очень ограничивающим: если вы просто используете HTTP-заголовок местоположения/ссылки, не имеет значения, запрашиваете ли вы JSON, XML или что-то еще в своем HTTP-заголовке принятия, и вы получите полезную метаинформацию о своем ресурсе на запрос HEAD, который не будет содержать ссылки, если вы будете использовать JSON API, HAL или JSON Hyper-Schema.