google-chrome - 为什么无法下载状态代码为 4XX 和 5XX 的文件

标签 google-chrome http firefox curl wget

我注意到许多 http 客户端(包括 Firefox 和 Chrome)不允许下载带有 4XX 和 5XX 的 http 响应代码的文件。但是,某些客户端允许这些下载,例如 curl 和 wget(使用 --content-on-error 选项)。

Chrome 和 Firefox 都没有提供很好的异常消息。 Chrome 失败并显示 ERR_INVALID_RESPONSE。 Firefox 失败并返回 File not found。如上所述,对于同一 URL 的 curly 和 wget 工作。

我想知道在这种情况下是否有定义正确行为的规范? Chrome 和 Firefox 无法处理请求是否有充分的理由?此外,他们没有提供适当的反馈似乎很奇怪。

我认为在大多数情况下下载失败的请求没有意义,但在某些情况下它会有所帮助。一个即使在错误情况下也下载文件的好例子是,如果有一个客户端只使用某种第 3 方格式与服务器通信。客户端必须为请求下载生成的文件。如果出现错误,客户端应下载包含错误描述的文件。

例如 RFC7231

Response messages with an error status code usually contain a payload that represents the error condition, such that it describes the error state and what next steps are suggested for resolving it.


The 4xx (Client Error) class of status code indicates that the client seems to have erred. Except when responding to a HEAD request, the server SHOULD send a representation containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included representation to the user.

这并不禁止在出现错误的情况下进行下载。


编辑因为第一个答案:

我不认为这种行为是用户友好的,我也不认为用户友好性真的是这背后的原因。例如,向用户显示错误代码和错误消息(在标题中提供)会更有意义。或者至少用诸如“无法下载文件,因为服务器响应错误”之类的错误消息来指示错误。可能有些服务器只能响应 XML 或任何其他随机文件格式。

最让我烦恼的是,两种浏览器都会响应不同但任意的错误,这些错误不会暗示有关潜在问题的任何信息。

这可能是一个未记录的边缘案例,Chrome 和 Firefox 都只是回退到默认错误,但这似乎不太可能,特别是因为这是一个在 wget 中有特殊标志的边缘案例。

4XX: Why would you assume a file download if your client did something wrong?

如果我们假设一个 API 有一个以某种文件格式回复的端点,那么可以公平地假设包含提示客户端做错了什么的错误消息也以该格式提供。因此该文件可以帮助修复客户端错误。

最佳答案

我不知道该主题有任何规范。 行为应尽可能对用户友好。

4XX: 如果您的客户做错了什么,您为什么要假设文件下载?此外,客户端软件不能区分错误使用(例如无效 URL)和处理文件下载的情况。

5xx: 正如您所说,大多数 api 都提供错误信息,但您也可以区分下载的情况,例如提供文件的内部错误。

您可以像您提到的那样将此类行为与 wget 和 curl 一起使用,但以编程方式使用此类 API 对用户而言既不友好也不实用。

考虑到以上信息,Chrome 和 firefox 只是尽量做到用户友好。

我希望我能以某种方式回答你的问题或挑战它背后的想法。 :)

关于google-chrome - 为什么无法下载状态代码为 4XX 和 5XX 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617629/

相关文章:

java - Jetty 服务线程崩溃并使用 100% CPU

ruby-on-rails - 如何在 RoR 中向用户显示现有的 xml 文件

javascript - 是否有检测 Firefox 的 "good practice"方法?

google-chrome - 点击图片后youtube自动加载-Chrome/Opera

html - CSS Chrome : Cannot hide scrollbar automatically

坏数据的 HTTP 状态代码

apache - 重写规则不起作用

javascript - 谷歌浏览器 - JavaScript 版本

javascript - 如何防止过滤后 <select> 高度缩小?

Javascript、Jquery、跨浏览器问题、挫败感