【问题标题】:Which HTTP status code should be used for a UPLOAD_ERR_PARTIAL?UPLOAD_ERR_PARTIAL 应该使用哪个 HTTP 状态代码?
【发布时间】:2013-08-16 10:56:06
【问题描述】:

我正在开发一个RESTAPI,我有一些文件上传

当文件仅部分上传时,PHP 会生成UPLOAD_ERR_PARTIAL 错误,我不确定在这种情况下应该使用哪个HTTP status code

如果用户取消上传,通常会发生这种情况(参见Why might a file only be partially uploadedfile upload errors on php.net

UPLOAD_ERR_PARTIAL 在文件数据后未找到 mime 边界时给出。造成这种情况的一个可能原因是用户取消了上传(按 ESC 等)。

【问题讨论】:

  • 如果文件被部分上传,它甚至会执行你的 php 代码吗?
  • 是的,问题是当我检测到 PHP 错误时,我不想捕获它并将正确的 http 状态代码发送回用户。
  • 我仍然不了解您的用例,唯一可能发生的方法是浏览器故意发送部分数据。因为所有其他类型,例如浏览器断开连接,您将无法提供反馈
  • @DevZer0 我已经更新了问题,如果用户取消上传,通常会发生这种情况。
  • 你在想206,“部分内容”吗?

标签: php rest http-status-codes


【解决方案1】:

如果用户上传失败是因为他们上传的内容有问题,只需说:400 Bad Request

【讨论】:

    【解决方案2】:

    我认为标题应该基于错误上下文:

    如果文件上传不是允许的类型:

    • HTTP_415 = '不支持的媒体类型'

    如果文件上传太大:

    • HTTP_413 = '请求实体太大'

    如果服务器在上传时遇到问题:

    • HTTP_500 = '内部服务器错误'

    如果上传超时:

    • HTTP_504 = '网关超时'

    但总的来说,我会说 500 是相当标准的。

    【讨论】:

    • 我知道这一切并且我已经处理了所有这些,我特意询问UPLOAD_ERR_PARTIAL案例
    • 错误415不是当上传的文件是不允许的类型时。当您使用无效的Content-Type 标头时使用它。 5xx 错误也用于指示服务器端的错误 - 但这是客户端的错误。
    【解决方案3】:

    我会选择 422(由于语义错误而无法执行请求)或 449(执行操作后应重试请求)。

    看看httpstatuses.com

    【讨论】:

      【解决方案4】:

      您不必发送任何状态码,因为客户端已经断开连接。

      【讨论】:

      • 这是一个很好的答案,在这种情况下,客户端永远不会收到状态码,所以你可以这样做exit();
      【解决方案5】:

      我会用

      408 请求超时。 因为它表明请求仅被部分发送(在这种情况下不支持)

      400 错误请求 看起来像是另一种选择。

      您也可以使用非保留号码创建自己的号码。

      但是如果请求被取消,你会将响应发送到哪里?

      【讨论】:

        【解决方案6】:

        UPLOAD_ERR_PARTIAL 是在文件数据后未找到 mime 边界时给出的。

        需要 411 长度

        请求没有指定其内容的长度,这是请求的资源所需要的

        【讨论】:

          【解决方案7】:

          对于这种情况,您应该使用 409 状态码。

          根据http://www.ietf.org/rfc/rfc2616.txt

          由于与当前的冲突,请求无法完成 资源的状态。此代码仅在以下情况下允许使用
          预计用户可能能够解决冲突
          并重新提交请求。响应正文应包含足够的内容
          供用户识别冲突来源的信息。
          理想情况下,响应实体将包含足够的信息 用户或用户代理来解决问题;但是,那可能不是
          可能但不是必需的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-14
            • 2015-01-03
            • 2017-03-12
            相关资源
            最近更新 更多