Я заметил, что многие http-клиенты, в том числе Firefox и Chrome, не позволяют загружать файлы для кодов ответов http с 4XX и 5XX.Однако некоторые клиенты разрешают такие загрузки, например, curl и wget (с опцией --content-on-error
).
И Chrome, и Firefox не предоставляют хороших сообщений об исключениях.Chrome не работает с ERR_INVALID_RESPONSE
.Firefox не работает с File not found
.Как указано выше для curly и wget работают для одного и того же URL.
Мне было интересно, существует ли спецификация, определяющая правильное поведение в этом случае?Существуют ли веские причины, по которым Chrome и Firefox не могут обработать запрос?Кроме того, кажется странным, что они не обеспечивают надлежащую обратную связь.
Я думаю, что в большинстве случаев загрузка для неудачных запросов не имеет смысла, но в некоторых случаях это было бы полезно.Один хороший пример, где загрузка файла даже в случае ошибки была бы, если есть клиент, который только общается с сервером, используя некоторый сторонний формат.Клиент должен будет загрузить сгенерированный файл для запроса.В случае ошибки клиент должен загрузить файл, содержащий описание ошибки.
Например, RFC7231 состояния
Ответные сообщения со статусом ошибкикод обычно содержит полезную нагрузку, представляющую состояние ошибки, так что он описывает состояние ошибки и возможные дальнейшие шаги для его устранения.
Класс 4xx (ошибка клиента)кода состояния указывает, что клиент, похоже, ошибся.За исключением случаев ответа на запрос HEAD, сервер ДОЛЖЕН послать представление, содержащее объяснение ситуации с ошибкой, и является ли это временным или постоянным условием.Эти коды состояния применимы к любому методу запроса.Пользовательские агенты ДОЛЖНЫ отображать любое включенное представление пользователю.
Это не запрещает загрузку в случае ошибки.
Редактировать из-за первогоответ:
Я не думаю, что это поведение удобно для пользователя, и я не думаю, что дружелюбие пользователя действительно является причиной этого.Например, было бы более целесообразно показывать код ошибки и сообщение об ошибке (предоставляется в заголовке) пользователю.Или, по крайней мере, укажите ошибку с сообщением об ошибке, например «невозможно загрузить файл, потому что сервер ответил с ошибкой».Могут быть серверы, которые могут отвечать только XML или любым другим произвольным форматом файла.
Больше всего меня беспокоит то, что оба браузера отвечают разными, но произвольными ошибками, которые не намекают на информацию о лежащей в основе проблеме.
Может случиться так, что это недокументированный крайний случай, и Chrome и Firefox просто возвращаются к ошибке по умолчанию, но это кажется маловероятным, особенно потому, что это крайний случай, который имеет специальный флаг в wget.
4XX: Почему вы предполагаете загрузку файла, если ваш клиент сделал что-то не так?
Если мы предположим, что API имеет конечную точку, которая отвечает с определенным форматом файла,Справедливо предположить, что в этом формате также имеется сообщение об ошибке, включающее подсказку о том, что клиент сделал неправильно.Таким образом, файл может помочь исправить ошибку клиента.