未知(不存在)HTTP方法的HTTP响应状态



假设我有路线/posts。它只实现了GETHTTP方法。

如果有人试图用不同的,现有的方法(POST,PUT等)访问它,我返回405。

如果有人尝试使用一些不支持的,不存在的方法,如MYCUSTOMMETHODSFASFS,我应该返回什么?405方法不允许或更确切地说,501未实现或甚至可能400错误请求(似乎是节点express的默认行为),因为这些方法不在HTTP规范中?

我今天发现了这篇文章,但这是一个有趣的问题,因此回答了一个非常古老的问题,因为这里没有单一的答案。

我在推特上找到了关于这个问题的地方,大多数投票都是给405 - Method Not Allowed的,因为这不是服务器端问题,而是客户端用糟糕的方法发送请求。

但是MDN文档的表述完全相反。

501是服务器无法识别请求方法并且无法支持任何资源的请求方法时的适当响应。服务器唯一需要支持的方法(因此不能返回501)是GET和HEAD。

如果服务器确实识别该方法,但故意不支持该方法,则适当的响应是405 method not Allowed。

因此,它给开发人员造成了一个困境。405和501之间该选哪个?但说实话,我会选择MDN。

原因如下:

  • 客户端发送未知方法的请求。
  • 一个好的服务器关心客户端发送的一切!
  • 服务器响应:"嘿,客户端!我不知道。它没有被执行。501
  • 粗心的服务器忽略了一些未知的问题。
  • 服务器响应:"嘿,客户端!你不能这么做!这是不允许的。405

结论:为UNKNOWN方法选择501 - Method Not Implemented

最新更新