Важно отметить, что коды состояния, такие как заголовки, представляют собой метаданные, которые принадлежат , транспортирующему документы по сетевому домену . Аудитория для кода состояния - это не только ваш заказной клиент, но и все компоненты общего назначения, участвующие в обмене сообщениями.
Мой вопрос: какой код статуса HTTP подойдет для этой ошибки? что пользователь C должен получить?
Первое, над чем нужно поработать, это соответствующий класс кода состояния, который нужно использовать. Для небезопасных запросов основной вопрос, который нужно задать, это «изменил ли этот запрос представление ресурса?» Если это так, то вам нужно подумать об использовании кода состояния 2xx, поскольку вам нужно, чтобы компоненты общего назначения использовали аннулирование кэша, чтобы исключить устаревшие представления в своих кэшах. Если ресурс не изменил состояние, то вы хотите просмотреть код состояния 4xx.
В любом случае вы можете получить представление о возможностях, просмотрев реестр кодов состояния . , решив, какие описания кажутся вероятными, затем просмотрите авторитетную ссылку, чтобы увидеть, соответствует ли семантика тому, что вы ищете.
Чаще всего вы можете обмануть и сразу перейти к RF C 7231 - наиболее известные коды состояния определены стандартом HTTP.
Это не ошибка клиента, поэтому коды 4xx не кажутся подходящими.
Вероятно, это правильный выбор. 5xx - «Я хотел сделать то, что вы просили, но не смог», вряд ли будет правильным выбором.
403 Запрещено - довольно хороший вариант, который говорит: «Я понял, что Вы хотели, но я не собираюсь этого делать. Это чаще всего связано с проблемой учетных данных, но стандарт явно позволяет нам использовать этот код в других местах
запрос может быть запрещен по причинам, не связанным с к учетным данным.
409 Конфликт является разумным кандидатом.
Хорошая новость заключается в том, что, кроме человеческой семантики, на самом деле нет Много различий в том, как кандидаты общего назначения обрабатывают эти два кода состояния. Например, они имеют одинаковое поведение по умолчанию для кэширования.
HTTP имеет стандартизированную обработку условных запросов ; "apply это изменение ресурса только в том случае, если указанный предикат имеет значение true ". Это, по сути, дает вам операцию сравнения и обмена - вы помечаете свой запрос как выполненный adata указывает на то, какую версию ресурса вы просматриваете локально.
Условные запросы имеют собственный специальный код ошибки для обработки устаревшего запроса: 412 Ошибка предварительного условия . Также есть код состояния 428 Необходимое условие , если в запросе отсутствует предикат, и вы хотите настаивать. Ожидается, что клиент будет включать соответствующий заголовок предварительного условия для продолжения.
Как отметил Андрей Драготониу, коды состояния не предназначены для описания поведения вашего домена. Поэтому иногда вам нужно подумать, что 2xx подходит, потому что сервер выполнил то, что вы просили, даже если то, что вы просили, не дало желаемого результата.
Представьте, например, игру в Интернете ; вы делаете легальный ход, и в результате вы теряете игру. Какой код статуса следует использовать? Вероятно, в этом случае 200 - конечный автомат сервера перешел от игры в игру к проигрышу, и это идеальный результат git для правильно обработанного HTTP-запроса.
Не думаю, что это применимо в твоем случае; но у вас есть больше информации, чтобы принять решение.