Skip to content

Commit 022ba6d

Browse files
authored
gh-102247: http: support rfc9110 status codes (GH-117611)
rfc9110 obsoletes the earlier rfc 7231. This document also includes some status codes that were previously only used for WebDAV and assigns more generic names to these status codes. ref: https://www.rfc-editor.org/rfc/rfc9110.html#name-changes-from-rfc-7231 - http.HTTPStatus.CONTENT_TOO_LARGE (413, previously REQUEST_ENTITY_TOO_LARGE) - http.HTTPStatus.URI_TOO_LONG (414, previously REQUEST_URI_TOO_LONG) - http.HTTPStatus.RANGE_NOT_SATISFYABLE (416, previously REQUEST_RANGE_NOT_SATISFYABLE) - http.HTTPStatus.UNPROCESSABLE_CONTENT (422, previously UNPROCESSABLE_ENTITY) The new constants are added to http.HTTPStatus and the old constant names are preserved for backwards compatibility. References in documentation to the obsoleted rfc 7231 are updated
1 parent dd72423 commit 022ba6d

File tree

6 files changed

+94
-78
lines changed

6 files changed

+94
-78
lines changed

Doc/library/http.rst

+64-60
Original file line numberDiff line numberDiff line change
@@ -59,63 +59,63 @@ available in :class:`http.HTTPStatus` are:
5959
======= =================================== ==================================================================
6060
Code Enum Name Details
6161
======= =================================== ==================================================================
62-
``100`` ``CONTINUE`` HTTP/1.1 :rfc:`7231`, Section 6.2.1
63-
``101`` ``SWITCHING_PROTOCOLS`` HTTP/1.1 :rfc:`7231`, Section 6.2.2
62+
``100`` ``CONTINUE`` HTTP Semantics :rfc:`9110`, Section 15.2.1
63+
``101`` ``SWITCHING_PROTOCOLS`` HTTP Semantics :rfc:`9110`, Section 15.2.2
6464
``102`` ``PROCESSING`` WebDAV :rfc:`2518`, Section 10.1
6565
``103`` ``EARLY_HINTS`` An HTTP Status Code for Indicating Hints :rfc:`8297`
66-
``200`` ``OK`` HTTP/1.1 :rfc:`7231`, Section 6.3.1
67-
``201`` ``CREATED`` HTTP/1.1 :rfc:`7231`, Section 6.3.2
68-
``202`` ``ACCEPTED`` HTTP/1.1 :rfc:`7231`, Section 6.3.3
69-
``203`` ``NON_AUTHORITATIVE_INFORMATION`` HTTP/1.1 :rfc:`7231`, Section 6.3.4
70-
``204`` ``NO_CONTENT`` HTTP/1.1 :rfc:`7231`, Section 6.3.5
71-
``205`` ``RESET_CONTENT`` HTTP/1.1 :rfc:`7231`, Section 6.3.6
72-
``206`` ``PARTIAL_CONTENT`` HTTP/1.1 :rfc:`7233`, Section 4.1
66+
``200`` ``OK`` HTTP Semantics :rfc:`9110`, Section 15.3.1
67+
``201`` ``CREATED`` HTTP Semantics :rfc:`9110`, Section 15.3.2
68+
``202`` ``ACCEPTED`` HTTP Semantics :rfc:`9110`, Section 15.3.3
69+
``203`` ``NON_AUTHORITATIVE_INFORMATION`` HTTP Semantics :rfc:`9110`, Section 15.3.4
70+
``204`` ``NO_CONTENT`` HTTP Semantics :rfc:`9110`, Section 15.3.5
71+
``205`` ``RESET_CONTENT`` HTTP Semantics :rfc:`9110`, Section 15.3.6
72+
``206`` ``PARTIAL_CONTENT`` HTTP Semantics :rfc:`9110`, Section 15.3.7
7373
``207`` ``MULTI_STATUS`` WebDAV :rfc:`4918`, Section 11.1
7474
``208`` ``ALREADY_REPORTED`` WebDAV Binding Extensions :rfc:`5842`, Section 7.1 (Experimental)
7575
``226`` ``IM_USED`` Delta Encoding in HTTP :rfc:`3229`, Section 10.4.1
76-
``300`` ``MULTIPLE_CHOICES`` HTTP/1.1 :rfc:`7231`, Section 6.4.1
77-
``301`` ``MOVED_PERMANENTLY`` HTTP/1.1 :rfc:`7231`, Section 6.4.2
78-
``302`` ``FOUND`` HTTP/1.1 :rfc:`7231`, Section 6.4.3
79-
``303`` ``SEE_OTHER`` HTTP/1.1 :rfc:`7231`, Section 6.4.4
80-
``304`` ``NOT_MODIFIED`` HTTP/1.1 :rfc:`7232`, Section 4.1
81-
``305`` ``USE_PROXY`` HTTP/1.1 :rfc:`7231`, Section 6.4.5
82-
``307`` ``TEMPORARY_REDIRECT`` HTTP/1.1 :rfc:`7231`, Section 6.4.7
83-
``308`` ``PERMANENT_REDIRECT`` Permanent Redirect :rfc:`7238`, Section 3 (Experimental)
84-
``400`` ``BAD_REQUEST`` HTTP/1.1 :rfc:`7231`, Section 6.5.1
85-
``401`` ``UNAUTHORIZED`` HTTP/1.1 Authentication :rfc:`7235`, Section 3.1
86-
``402`` ``PAYMENT_REQUIRED`` HTTP/1.1 :rfc:`7231`, Section 6.5.2
87-
``403`` ``FORBIDDEN`` HTTP/1.1 :rfc:`7231`, Section 6.5.3
88-
``404`` ``NOT_FOUND`` HTTP/1.1 :rfc:`7231`, Section 6.5.4
89-
``405`` ``METHOD_NOT_ALLOWED`` HTTP/1.1 :rfc:`7231`, Section 6.5.5
90-
``406`` ``NOT_ACCEPTABLE`` HTTP/1.1 :rfc:`7231`, Section 6.5.6
91-
``407`` ``PROXY_AUTHENTICATION_REQUIRED`` HTTP/1.1 Authentication :rfc:`7235`, Section 3.2
92-
``408`` ``REQUEST_TIMEOUT`` HTTP/1.1 :rfc:`7231`, Section 6.5.7
93-
``409`` ``CONFLICT`` HTTP/1.1 :rfc:`7231`, Section 6.5.8
94-
``410`` ``GONE`` HTTP/1.1 :rfc:`7231`, Section 6.5.9
95-
``411`` ``LENGTH_REQUIRED`` HTTP/1.1 :rfc:`7231`, Section 6.5.10
96-
``412`` ``PRECONDITION_FAILED`` HTTP/1.1 :rfc:`7232`, Section 4.2
97-
``413`` ``REQUEST_ENTITY_TOO_LARGE`` HTTP/1.1 :rfc:`7231`, Section 6.5.11
98-
``414`` ``REQUEST_URI_TOO_LONG`` HTTP/1.1 :rfc:`7231`, Section 6.5.12
99-
``415`` ``UNSUPPORTED_MEDIA_TYPE`` HTTP/1.1 :rfc:`7231`, Section 6.5.13
100-
``416`` ``REQUESTED_RANGE_NOT_SATISFIABLE`` HTTP/1.1 Range Requests :rfc:`7233`, Section 4.4
101-
``417`` ``EXPECTATION_FAILED`` HTTP/1.1 :rfc:`7231`, Section 6.5.14
76+
``300`` ``MULTIPLE_CHOICES`` HTTP Semantics :rfc:`9110`, Section 15.4.1
77+
``301`` ``MOVED_PERMANENTLY`` HTTP Semantics :rfc:`9110`, Section 15.4.2
78+
``302`` ``FOUND`` HTTP Semantics :rfc:`9110`, Section 15.4.3
79+
``303`` ``SEE_OTHER`` HTTP Semantics :rfc:`9110`, Section 15.4.4
80+
``304`` ``NOT_MODIFIED`` HTTP Semantics :rfc:`9110`, Section 15.4.5
81+
``305`` ``USE_PROXY`` HTTP Semantics :rfc:`9110`, Section 15.4.6
82+
``307`` ``TEMPORARY_REDIRECT`` HTTP Semantics :rfc:`9110`, Section 15.4.8
83+
``308`` ``PERMANENT_REDIRECT`` HTTP Semantics :rfc:`9110`, Section 15.4.9
84+
``400`` ``BAD_REQUEST`` HTTP Semantics :rfc:`9110`, Section 15.5.1
85+
``401`` ``UNAUTHORIZED`` HTTP Semantics :rfc:`9110`, Section 15.5.2
86+
``402`` ``PAYMENT_REQUIRED`` HTTP Semantics :rfc:`9110`, Section 15.5.3
87+
``403`` ``FORBIDDEN`` HTTP Semantics :rfc:`9110`, Section 15.5.4
88+
``404`` ``NOT_FOUND`` HTTP Semantics :rfc:`9110`, Section 15.5.5
89+
``405`` ``METHOD_NOT_ALLOWED`` HTTP Semantics :rfc:`9110`, Section 15.5.6
90+
``406`` ``NOT_ACCEPTABLE`` HTTP Semantics :rfc:`9110`, Section 15.5.7
91+
``407`` ``PROXY_AUTHENTICATION_REQUIRED`` HTTP Semantics :rfc:`9110`, Section 15.5.8
92+
``408`` ``REQUEST_TIMEOUT`` HTTP Semantics :rfc:`9110`, Section 15.5.9
93+
``409`` ``CONFLICT`` HTTP Semantics :rfc:`9110`, Section 15.5.10
94+
``410`` ``GONE`` HTTP Semantics :rfc:`9110`, Section 15.5.11
95+
``411`` ``LENGTH_REQUIRED`` HTTP Semantics :rfc:`9110`, Section 15.5.12
96+
``412`` ``PRECONDITION_FAILED`` HTTP Semantics :rfc:`9110`, Section 15.5.13
97+
``413`` ``CONTENT_TOO_LARGE`` HTTP Semantics :rfc:`9110`, Section 15.5.14
98+
``414`` ``URI_TOO_LONG`` HTTP Semantics :rfc:`9110`, Section 15.5.15
99+
``415`` ``UNSUPPORTED_MEDIA_TYPE`` HTTP Semantics :rfc:`9110`, Section 15.5.16
100+
``416`` ``RANGE_NOT_SATISFIABLE`` HTTP Semantics :rfc:`9110`, Section 15.5.17
101+
``417`` ``EXPECTATION_FAILED`` HTTP Semantics :rfc:`9110`, Section 15.5.18
102102
``418`` ``IM_A_TEAPOT`` HTCPCP/1.0 :rfc:`2324`, Section 2.3.2
103-
``421`` ``MISDIRECTED_REQUEST`` HTTP/2 :rfc:`7540`, Section 9.1.2
104-
``422`` ``UNPROCESSABLE_ENTITY`` WebDAV :rfc:`4918`, Section 11.2
103+
``421`` ``MISDIRECTED_REQUEST`` HTTP Semantics :rfc:`9110`, Section 15.5.20
104+
``422`` ``UNPROCESSABLE_CONTENT`` HTTP Semantics :rfc:`9110`, Section 15.5.21
105105
``423`` ``LOCKED`` WebDAV :rfc:`4918`, Section 11.3
106106
``424`` ``FAILED_DEPENDENCY`` WebDAV :rfc:`4918`, Section 11.4
107107
``425`` ``TOO_EARLY`` Using Early Data in HTTP :rfc:`8470`
108-
``426`` ``UPGRADE_REQUIRED`` HTTP/1.1 :rfc:`7231`, Section 6.5.15
108+
``426`` ``UPGRADE_REQUIRED`` HTTP Semantics :rfc:`9110`, Section 15.5.22
109109
``428`` ``PRECONDITION_REQUIRED`` Additional HTTP Status Codes :rfc:`6585`
110110
``429`` ``TOO_MANY_REQUESTS`` Additional HTTP Status Codes :rfc:`6585`
111111
``431`` ``REQUEST_HEADER_FIELDS_TOO_LARGE`` Additional HTTP Status Codes :rfc:`6585`
112112
``451`` ``UNAVAILABLE_FOR_LEGAL_REASONS`` An HTTP Status Code to Report Legal Obstacles :rfc:`7725`
113-
``500`` ``INTERNAL_SERVER_ERROR`` HTTP/1.1 :rfc:`7231`, Section 6.6.1
114-
``501`` ``NOT_IMPLEMENTED`` HTTP/1.1 :rfc:`7231`, Section 6.6.2
115-
``502`` ``BAD_GATEWAY`` HTTP/1.1 :rfc:`7231`, Section 6.6.3
116-
``503`` ``SERVICE_UNAVAILABLE`` HTTP/1.1 :rfc:`7231`, Section 6.6.4
117-
``504`` ``GATEWAY_TIMEOUT`` HTTP/1.1 :rfc:`7231`, Section 6.6.5
118-
``505`` ``HTTP_VERSION_NOT_SUPPORTED`` HTTP/1.1 :rfc:`7231`, Section 6.6.6
113+
``500`` ``INTERNAL_SERVER_ERROR`` HTTP Semantics :rfc:`9110`, Section 15.6.1
114+
``501`` ``NOT_IMPLEMENTED`` HTTP Semantics :rfc:`9110`, Section 15.6.2
115+
``502`` ``BAD_GATEWAY`` HTTP Semantics :rfc:`9110`, Section 15.6.3
116+
``503`` ``SERVICE_UNAVAILABLE`` HTTP Semantics :rfc:`9110`, Section 15.6.4
117+
``504`` ``GATEWAY_TIMEOUT`` HTTP Semantics :rfc:`9110`, Section 15.6.5
118+
``505`` ``HTTP_VERSION_NOT_SUPPORTED`` HTTP Semantics :rfc:`9110`, Section 15.6.6
119119
``506`` ``VARIANT_ALSO_NEGOTIATES`` Transparent Content Negotiation in HTTP :rfc:`2295`, Section 8.1 (Experimental)
120120
``507`` ``INSUFFICIENT_STORAGE`` WebDAV :rfc:`4918`, Section 11.5
121121
``508`` ``LOOP_DETECTED`` WebDAV Binding Extensions :rfc:`5842`, Section 7.2 (Experimental)
@@ -137,22 +137,26 @@ equal to the constant name (i.e. ``http.HTTPStatus.OK`` is also available as
137137
.. versionadded:: 3.9
138138
Added ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` status codes.
139139

140+
.. versionchanged:: 3.13
141+
Implemented RFC9110 naming for status constants. Old constant names are preserved for
142+
backwards compatibility.
143+
140144
HTTP status category
141145
--------------------
142146

143147
.. versionadded:: 3.12
144148

145149
The enum values have several properties to indicate the HTTP status category:
146150

147-
==================== ======================== ===============================
151+
==================== ======================== ======================================
148152
Property Indicates that Details
149-
==================== ======================== ===============================
150-
``is_informational`` ``100 <= status <= 199`` HTTP/1.1 :rfc:`7231`, Section 6
151-
``is_success`` ``200 <= status <= 299`` HTTP/1.1 :rfc:`7231`, Section 6
152-
``is_redirection`` ``300 <= status <= 399`` HTTP/1.1 :rfc:`7231`, Section 6
153-
``is_client_error`` ``400 <= status <= 499`` HTTP/1.1 :rfc:`7231`, Section 6
154-
``is_server_error`` ``500 <= status <= 599`` HTTP/1.1 :rfc:`7231`, Section 6
155-
==================== ======================== ===============================
153+
==================== ======================== ======================================
154+
``is_informational`` ``100 <= status <= 199`` HTTP Semantics :rfc:`9110`, Section 15
155+
``is_success`` ``200 <= status <= 299`` HTTP Semantics :rfc:`9110`, Section 15
156+
``is_redirection`` ``300 <= status <= 399`` HTTP Semantics :rfc:`9110`, Section 15
157+
``is_client_error`` ``400 <= status <= 499`` HTTP Semantics :rfc:`9110`, Section 15
158+
``is_server_error`` ``500 <= status <= 599`` HTTP Semantics :rfc:`9110`, Section 15
159+
==================== ======================== ======================================
156160

157161
Usage::
158162

@@ -203,13 +207,13 @@ available in :class:`http.HTTPMethod` are:
203207
=========== =================================== ==================================================================
204208
Method Enum Name Details
205209
=========== =================================== ==================================================================
206-
``GET`` ``GET`` HTTP/1.1 :rfc:`7231`, Section 4.3.1
207-
``HEAD`` ``HEAD`` HTTP/1.1 :rfc:`7231`, Section 4.3.2
208-
``POST`` ``POST`` HTTP/1.1 :rfc:`7231`, Section 4.3.3
209-
``PUT`` ``PUT`` HTTP/1.1 :rfc:`7231`, Section 4.3.4
210-
``DELETE`` ``DELETE`` HTTP/1.1 :rfc:`7231`, Section 4.3.5
211-
``CONNECT`` ``CONNECT`` HTTP/1.1 :rfc:`7231`, Section 4.3.6
212-
``OPTIONS`` ``OPTIONS`` HTTP/1.1 :rfc:`7231`, Section 4.3.7
213-
``TRACE`` ``TRACE`` HTTP/1.1 :rfc:`7231`, Section 4.3.8
210+
``GET`` ``GET`` HTTP Semantics :rfc:`9110`, Section 9.3.1
211+
``HEAD`` ``HEAD`` HTTP Semantics :rfc:`9110`, Section 9.3.2
212+
``POST`` ``POST`` HTTP Semantics :rfc:`9110`, Section 9.3.3
213+
``PUT`` ``PUT`` HTTP Semantics :rfc:`9110`, Section 9.3.4
214+
``DELETE`` ``DELETE`` HTTP Semantics :rfc:`9110`, Section 9.3.5
215+
``CONNECT`` ``CONNECT`` HTTP Semantics :rfc:`9110`, Section 9.3.6
216+
``OPTIONS`` ``OPTIONS`` HTTP Semantics :rfc:`9110`, Section 9.3.7
217+
``TRACE`` ``TRACE`` HTTP Semantics :rfc:`9110`, Section 9.3.8
214218
``PATCH`` ``PATCH`` HTTP/1.1 :rfc:`5789`
215219
=========== =================================== ==================================================================

Lib/http/__init__.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class HTTPStatus:
99
1010
Status codes from the following RFCs are all observed:
1111
12-
* RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616
12+
* RFC 9110: HTTP Semantics, obsoletes 7231, which obsoleted 2616
1313
* RFC 6585: Additional HTTP Status Codes
1414
* RFC 3229: Delta encoding in HTTP
1515
* RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518
@@ -26,7 +26,6 @@ class HTTPStatus:
2626
def __new__(cls, value, phrase, description=''):
2727
obj = int.__new__(cls, value)
2828
obj._value_ = value
29-
3029
obj.phrase = phrase
3130
obj.description = description
3231
return obj
@@ -115,22 +114,25 @@ def is_server_error(self):
115114
'Client must specify Content-Length')
116115
PRECONDITION_FAILED = (412, 'Precondition Failed',
117116
'Precondition in headers is false')
118-
REQUEST_ENTITY_TOO_LARGE = (413, 'Request Entity Too Large',
119-
'Entity is too large')
120-
REQUEST_URI_TOO_LONG = (414, 'Request-URI Too Long',
117+
CONTENT_TOO_LARGE = (413, 'Content Too Large',
118+
'Content is too large')
119+
REQUEST_ENTITY_TOO_LARGE = CONTENT_TOO_LARGE
120+
URI_TOO_LONG = (414, 'URI Too Long',
121121
'URI is too long')
122+
REQUEST_URI_TOO_LONG = URI_TOO_LONG
122123
UNSUPPORTED_MEDIA_TYPE = (415, 'Unsupported Media Type',
123124
'Entity body in unsupported format')
124-
REQUESTED_RANGE_NOT_SATISFIABLE = (416,
125-
'Requested Range Not Satisfiable',
125+
RANGE_NOT_SATISFIABLE = (416, 'Range Not Satisfiable',
126126
'Cannot satisfy request range')
127+
REQUESTED_RANGE_NOT_SATISFIABLE = RANGE_NOT_SATISFIABLE
127128
EXPECTATION_FAILED = (417, 'Expectation Failed',
128129
'Expect condition could not be satisfied')
129130
IM_A_TEAPOT = (418, 'I\'m a Teapot',
130131
'Server refuses to brew coffee because it is a teapot.')
131132
MISDIRECTED_REQUEST = (421, 'Misdirected Request',
132133
'Server is not able to produce a response')
133-
UNPROCESSABLE_ENTITY = 422, 'Unprocessable Entity'
134+
UNPROCESSABLE_CONTENT = 422, 'Unprocessable Content'
135+
UNPROCESSABLE_ENTITY = UNPROCESSABLE_CONTENT
134136
LOCKED = 423, 'Locked'
135137
FAILED_DEPENDENCY = 424, 'Failed Dependency'
136138
TOO_EARLY = 425, 'Too Early'
@@ -177,7 +179,7 @@ class HTTPMethod:
177179
178180
Methods from the following RFCs are all observed:
179181
180-
* RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616
182+
* RFF 9110: HTTP Semantics, obsoletes 7231, which obsoleted 2616
181183
* RFC 5789: PATCH Method for HTTP
182184
"""
183185
def __new__(cls, value, description):

Lib/test/test_httplib.py

+14-7
Original file line numberDiff line numberDiff line change
@@ -651,22 +651,25 @@ def is_server_error(self):
651651
'Client must specify Content-Length')
652652
PRECONDITION_FAILED = (412, 'Precondition Failed',
653653
'Precondition in headers is false')
654-
REQUEST_ENTITY_TOO_LARGE = (413, 'Request Entity Too Large',
655-
'Entity is too large')
656-
REQUEST_URI_TOO_LONG = (414, 'Request-URI Too Long',
657-
'URI is too long')
654+
CONTENT_TOO_LARGE = (413, 'Content Too Large',
655+
'Content is too large')
656+
REQUEST_ENTITY_TOO_LARGE = CONTENT_TOO_LARGE
657+
URI_TOO_LONG = (414, 'URI Too Long', 'URI is too long')
658+
REQUEST_URI_TOO_LONG = URI_TOO_LONG
658659
UNSUPPORTED_MEDIA_TYPE = (415, 'Unsupported Media Type',
659660
'Entity body in unsupported format')
660-
REQUESTED_RANGE_NOT_SATISFIABLE = (416,
661-
'Requested Range Not Satisfiable',
661+
RANGE_NOT_SATISFIABLE = (416,
662+
'Range Not Satisfiable',
662663
'Cannot satisfy request range')
664+
REQUESTED_RANGE_NOT_SATISFIABLE = RANGE_NOT_SATISFIABLE
663665
EXPECTATION_FAILED = (417, 'Expectation Failed',
664666
'Expect condition could not be satisfied')
665667
IM_A_TEAPOT = (418, 'I\'m a Teapot',
666668
'Server refuses to brew coffee because it is a teapot.')
667669
MISDIRECTED_REQUEST = (421, 'Misdirected Request',
668670
'Server is not able to produce a response')
669-
UNPROCESSABLE_ENTITY = 422, 'Unprocessable Entity'
671+
UNPROCESSABLE_CONTENT = 422, 'Unprocessable Content'
672+
UNPROCESSABLE_ENTITY = UNPROCESSABLE_CONTENT
670673
LOCKED = 423, 'Locked'
671674
FAILED_DEPENDENCY = 424, 'Failed Dependency'
672675
TOO_EARLY = 425, 'Too Early'
@@ -1718,13 +1721,17 @@ def test_client_constants(self):
17181721
'GONE',
17191722
'LENGTH_REQUIRED',
17201723
'PRECONDITION_FAILED',
1724+
'CONTENT_TOO_LARGE',
17211725
'REQUEST_ENTITY_TOO_LARGE',
1726+
'URI_TOO_LONG',
17221727
'REQUEST_URI_TOO_LONG',
17231728
'UNSUPPORTED_MEDIA_TYPE',
1729+
'RANGE_NOT_SATISFIABLE',
17241730
'REQUESTED_RANGE_NOT_SATISFIABLE',
17251731
'EXPECTATION_FAILED',
17261732
'IM_A_TEAPOT',
17271733
'MISDIRECTED_REQUEST',
1734+
'UNPROCESSABLE_CONTENT',
17281735
'UNPROCESSABLE_ENTITY',
17291736
'LOCKED',
17301737
'FAILED_DEPENDENCY',

Lib/test/test_httpservers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1205,7 +1205,7 @@ def test_request_length(self):
12051205
# Issue #10714: huge request lines are discarded, to avoid Denial
12061206
# of Service attacks.
12071207
result = self.send_typical_request(b'GET ' + b'x' * 65537)
1208-
self.assertEqual(result[0], b'HTTP/1.1 414 Request-URI Too Long\r\n')
1208+
self.assertEqual(result[0], b'HTTP/1.1 414 URI Too Long\r\n')
12091209
self.assertFalse(self.handler.get_called)
12101210
self.assertIsInstance(self.handler.requestline, str)
12111211

Lib/test/test_wsgiref.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def test_environ(self):
137137
def test_request_length(self):
138138
out, err = run_amock(data=b"GET " + (b"x" * 65537) + b" HTTP/1.0\n\n")
139139
self.assertEqual(out.splitlines()[0],
140-
b"HTTP/1.0 414 Request-URI Too Long")
140+
b"HTTP/1.0 414 URI Too Long")
141141

142142
def test_validated_hello(self):
143143
out, err = run_amock(validator(hello_app))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
the status codes enum with constants in http.HTTPStatus are updated to include the names from RFC9110. This RFC includes some HTTP statuses previously only used for WEBDAV and assigns more generic names to them.
2+
3+
The old constants are preserved for backwards compatibility.

0 commit comments

Comments
 (0)