你还是太嫩了,孩子。
作为一只喵,大舒的朋友们都知道402是个啥。
喔,现在大舒不是喵了,是熊喵。
版权声明:感谢评论区小恶魔的指正,本文中的图片原始来源是https://http.cat/。
图片纯属搞笑,
写过http代码仅仅是个头,他的意思都是人赋予的,
纠正几个观点,
402和“当初制定出402的那帮人是怎么想的,为什么最后没有实现,将来到底有没有一天会实现”是没有关系的,402是http规定返回的代码,一定是由程序员来实现,而不是由指定的那帮人来实现。
并不是说payment required就一定要用402,而是说,返回值是402的原因是因为payment required。
程序员可以不实现402,可以花式实现402。你没付费,我可以不让你402,从逻辑上讲,我可以让你403 forbidden,我也可以给你一个302跳转到收费界面,我也可以给你一个200界面要求充值,这个并不冲突。如果只是个json接口,那么有些情况下他们甚至在json结构体内自行定义errorCode和errorMessage,接口外部全用200,这也没什么问题。
敲黑板,相比于402,我们更需要关注5XX错误代码。
下面是干货:
(来源:go包源码,提供了RFC出处)
// HTTP status codes, defined in RFC 2616. const ( StatusContinue = 100 StatusSwitchingProtocols = 101
StatusOK = 200 StatusCreated = 201 StatusAccepted = 202 StatusNonAuthoritativeInfo = 203 StatusNoContent = 204 StatusResetContent = 205 StatusPartialContent = 206
StatusMultipleChoices = 300 StatusMovedPermanently = 301 StatusFound = 302 StatusSeeOther = 303 StatusNotModified = 304 StatusUseProxy = 305 StatusTemporaryRedirect = 307
StatusBadRequest = 400 StatusUnauthorized = 401 StatusPaymentRequired = 402 StatusForbidden = 403 StatusNotFound = 404 StatusMethodNotAllowed = 405 StatusNotAcceptable = 406 StatusProxyAuthRequired = 407 StatusRequestTimeout = 408 StatusConflict = 409 StatusGone = 410 StatusLengthRequired = 411 StatusPreconditionFailed = 412 StatusRequestEntityTooLarge = 413 StatusRequestURITooLong = 414 StatusUnsupportedMediaType = 415 StatusRequestedRangeNotSatisfiable = 416 StatusExpectationFailed = 417 StatusTeapot = 418
StatusInternalServerError = 500 StatusNotImplemented = 501 StatusBadGateway = 502 StatusServiceUnavailable = 503 StatusGatewayTimeout = 504 StatusHTTPVersionNotSupported = 505
// New HTTP status codes from RFC 6585. Not exported yet in Go 1.1. // See discussion at https://codereview.appspot.com/7678043/ statusPreconditionRequired = 428 statusTooManyRequests = 429 statusRequestHeaderFieldsTooLarge = 431 statusNetworkAuthenticationRequired = 511 )
HTTP/1.1 402 Payment Required
402 - 用户请求的内容要求付费,是一个非正式的错误编号
为什么没有正式把402加入标准之中?因为402错误没有太大的实用意义。
当用户请求了付费/会员内容时,相比返回一个“用户请求错误”,把访问者重定向到购买/会员开通页面无疑是更好的解决方法