1// Copyright 2009 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package http
6
7// HTTP status codes as registered with IANA.
8// See: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
9const (
10	StatusContinue           = 100 // RFC 7231, 6.2.1
11	StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
12	StatusProcessing         = 102 // RFC 2518, 10.1
13	StatusEarlyHints         = 103 // RFC 8297
14
15	StatusOK                   = 200 // RFC 7231, 6.3.1
16	StatusCreated              = 201 // RFC 7231, 6.3.2
17	StatusAccepted             = 202 // RFC 7231, 6.3.3
18	StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
19	StatusNoContent            = 204 // RFC 7231, 6.3.5
20	StatusResetContent         = 205 // RFC 7231, 6.3.6
21	StatusPartialContent       = 206 // RFC 7233, 4.1
22	StatusMultiStatus          = 207 // RFC 4918, 11.1
23	StatusAlreadyReported      = 208 // RFC 5842, 7.1
24	StatusIMUsed               = 226 // RFC 3229, 10.4.1
25
26	StatusMultipleChoices   = 300 // RFC 7231, 6.4.1
27	StatusMovedPermanently  = 301 // RFC 7231, 6.4.2
28	StatusFound             = 302 // RFC 7231, 6.4.3
29	StatusSeeOther          = 303 // RFC 7231, 6.4.4
30	StatusNotModified       = 304 // RFC 7232, 4.1
31	StatusUseProxy          = 305 // RFC 7231, 6.4.5
32	_                       = 306 // RFC 7231, 6.4.6 (Unused)
33	StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7
34	StatusPermanentRedirect = 308 // RFC 7538, 3
35
36	StatusBadRequest                   = 400 // RFC 7231, 6.5.1
37	StatusUnauthorized                 = 401 // RFC 7235, 3.1
38	StatusPaymentRequired              = 402 // RFC 7231, 6.5.2
39	StatusForbidden                    = 403 // RFC 7231, 6.5.3
40	StatusNotFound                     = 404 // RFC 7231, 6.5.4
41	StatusMethodNotAllowed             = 405 // RFC 7231, 6.5.5
42	StatusNotAcceptable                = 406 // RFC 7231, 6.5.6
43	StatusProxyAuthRequired            = 407 // RFC 7235, 3.2
44	StatusRequestTimeout               = 408 // RFC 7231, 6.5.7
45	StatusConflict                     = 409 // RFC 7231, 6.5.8
46	StatusGone                         = 410 // RFC 7231, 6.5.9
47	StatusLengthRequired               = 411 // RFC 7231, 6.5.10
48	StatusPreconditionFailed           = 412 // RFC 7232, 4.2
49	StatusRequestEntityTooLarge        = 413 // RFC 7231, 6.5.11
50	StatusRequestURITooLong            = 414 // RFC 7231, 6.5.12
51	StatusUnsupportedMediaType         = 415 // RFC 7231, 6.5.13
52	StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4
53	StatusExpectationFailed            = 417 // RFC 7231, 6.5.14
54	StatusTeapot                       = 418 // RFC 7168, 2.3.3
55	StatusMisdirectedRequest           = 421 // RFC 7540, 9.1.2
56	StatusUnprocessableEntity          = 422 // RFC 4918, 11.2
57	StatusLocked                       = 423 // RFC 4918, 11.3
58	StatusFailedDependency             = 424 // RFC 4918, 11.4
59	StatusTooEarly                     = 425 // RFC 8470, 5.2.
60	StatusUpgradeRequired              = 426 // RFC 7231, 6.5.15
61	StatusPreconditionRequired         = 428 // RFC 6585, 3
62	StatusTooManyRequests              = 429 // RFC 6585, 4
63	StatusRequestHeaderFieldsTooLarge  = 431 // RFC 6585, 5
64	StatusUnavailableForLegalReasons   = 451 // RFC 7725, 3
65
66	StatusInternalServerError           = 500 // RFC 7231, 6.6.1
67	StatusNotImplemented                = 501 // RFC 7231, 6.6.2
68	StatusBadGateway                    = 502 // RFC 7231, 6.6.3
69	StatusServiceUnavailable            = 503 // RFC 7231, 6.6.4
70	StatusGatewayTimeout                = 504 // RFC 7231, 6.6.5
71	StatusHTTPVersionNotSupported       = 505 // RFC 7231, 6.6.6
72	StatusVariantAlsoNegotiates         = 506 // RFC 2295, 8.1
73	StatusInsufficientStorage           = 507 // RFC 4918, 11.5
74	StatusLoopDetected                  = 508 // RFC 5842, 7.2
75	StatusNotExtended                   = 510 // RFC 2774, 7
76	StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6
77)
78
79var statusText = map[int]string{
80	StatusContinue:           "Continue",
81	StatusSwitchingProtocols: "Switching Protocols",
82	StatusProcessing:         "Processing",
83	StatusEarlyHints:         "Early Hints",
84
85	StatusOK:                   "OK",
86	StatusCreated:              "Created",
87	StatusAccepted:             "Accepted",
88	StatusNonAuthoritativeInfo: "Non-Authoritative Information",
89	StatusNoContent:            "No Content",
90	StatusResetContent:         "Reset Content",
91	StatusPartialContent:       "Partial Content",
92	StatusMultiStatus:          "Multi-Status",
93	StatusAlreadyReported:      "Already Reported",
94	StatusIMUsed:               "IM Used",
95
96	StatusMultipleChoices:   "Multiple Choices",
97	StatusMovedPermanently:  "Moved Permanently",
98	StatusFound:             "Found",
99	StatusSeeOther:          "See Other",
100	StatusNotModified:       "Not Modified",
101	StatusUseProxy:          "Use Proxy",
102	StatusTemporaryRedirect: "Temporary Redirect",
103	StatusPermanentRedirect: "Permanent Redirect",
104
105	StatusBadRequest:                   "Bad Request",
106	StatusUnauthorized:                 "Unauthorized",
107	StatusPaymentRequired:              "Payment Required",
108	StatusForbidden:                    "Forbidden",
109	StatusNotFound:                     "Not Found",
110	StatusMethodNotAllowed:             "Method Not Allowed",
111	StatusNotAcceptable:                "Not Acceptable",
112	StatusProxyAuthRequired:            "Proxy Authentication Required",
113	StatusRequestTimeout:               "Request Timeout",
114	StatusConflict:                     "Conflict",
115	StatusGone:                         "Gone",
116	StatusLengthRequired:               "Length Required",
117	StatusPreconditionFailed:           "Precondition Failed",
118	StatusRequestEntityTooLarge:        "Request Entity Too Large",
119	StatusRequestURITooLong:            "Request URI Too Long",
120	StatusUnsupportedMediaType:         "Unsupported Media Type",
121	StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable",
122	StatusExpectationFailed:            "Expectation Failed",
123	StatusTeapot:                       "I'm a teapot",
124	StatusMisdirectedRequest:           "Misdirected Request",
125	StatusUnprocessableEntity:          "Unprocessable Entity",
126	StatusLocked:                       "Locked",
127	StatusFailedDependency:             "Failed Dependency",
128	StatusTooEarly:                     "Too Early",
129	StatusUpgradeRequired:              "Upgrade Required",
130	StatusPreconditionRequired:         "Precondition Required",
131	StatusTooManyRequests:              "Too Many Requests",
132	StatusRequestHeaderFieldsTooLarge:  "Request Header Fields Too Large",
133	StatusUnavailableForLegalReasons:   "Unavailable For Legal Reasons",
134
135	StatusInternalServerError:           "Internal Server Error",
136	StatusNotImplemented:                "Not Implemented",
137	StatusBadGateway:                    "Bad Gateway",
138	StatusServiceUnavailable:            "Service Unavailable",
139	StatusGatewayTimeout:                "Gateway Timeout",
140	StatusHTTPVersionNotSupported:       "HTTP Version Not Supported",
141	StatusVariantAlsoNegotiates:         "Variant Also Negotiates",
142	StatusInsufficientStorage:           "Insufficient Storage",
143	StatusLoopDetected:                  "Loop Detected",
144	StatusNotExtended:                   "Not Extended",
145	StatusNetworkAuthenticationRequired: "Network Authentication Required",
146}
147
148// StatusText returns a text for the HTTP status code. It returns the empty
149// string if the code is unknown.
150func StatusText(code int) string {
151	return statusText[code]
152}
153