-
Notifications
You must be signed in to change notification settings - Fork 4
/
58.txt
88 lines (62 loc) · 4.53 KB
/
58.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[406] [[HTTP]] の[[状態符号]] [DFN[[CODE(HTTP)[[[501]]]]]] は、[[要求]]で指定された機能が[[鯖]]側で実装されていないことを表します。
* 仕様書
[REFS[
- [536] '''[CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-08-07 05:54:02 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-6.6.2>'''
- [508] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-3.1.1>
- [534] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-4>
]REFS]
* 意味
[537] [CODE(HTTP)[[[501]]]] は、[[鯖]]が[[要求]]を処理するために必須の機能に対応していないことを示します
[SRC[>>536]]。
* 文脈
[502] 例えば、[[要求]]で指定された[[メソッド]]が実装されていないときに使います。
[507] 実装しているどの[[メソッド]]よりも長い[[メソッド]]を受信した[[鯖]]は、
[CODE(HTTP)[[[501]]]] を返す[['''べきです''']] [SRC[>>508]]。
[532] [[起源鯖]]は、[[要求メソッド]]を認識できないか、実装していない時は、
[CODE(HTTP)[[[501]]]] [[応答]]を返す[['''べきです''']] [SRC[>>534]]。
;;
[533] [[起源鯖]]は、[[要求メソッド]]を知っているものの、[[対象資源]]に対して認めていない時は、
[CODE(HTTP)[[[405]]]] [[応答]]を返す[['''べきです''']] [SRC[>>534]]。
;; [539] 実際のところ [CODE(HTTP)[[[405]]]] と [CODE(HTTP)[[[501]]]]
を分ける意味があるのかは謎ですが...
* 構文
[542] 実装している[[メソッド]]の一覧が[[応答]]の [CODE(HTTP)@en[[[Allow:]]]]
[[ヘッダー]]により明示されることがあります。しかし仕様上は要求されてはいないようです。
* 処理モデル
[538] [CODE(HTTP)[[[501]]]] [[応答]]は[[キャッシュ可能]]です [SRC[>>536]]。
* 歴史
[FIG(quote)[
[FIGCAPTION[
[509] RFC 1945 (HTTP/1.0); RFC 2068・RFC 2616 (HTTP/1.1) 10.5.2 501 Not Implemented
]FIGCAPTION]
> The server does not support the functionality required to fulfill the request.
This is the appropriate response when the server does not
recognize the request method and is not capable of supporting it for any resource.
サーバーは、要求を満たすのに必要な機能に対応していません。
これは、サーバーが要求 method を認識せず、どの資源もそれに対応する能力がないときに適切な応答です。
]FIG]
[REFS[
- [535] [CITE@en[RFC 7252 - The Constrained Application Protocol (CoAP)]]
( ([TIME[2014-06-27 00:59:37 +09:00]] 版))
<http://tools.ietf.org/html/rfc7252#section-5.9.3.2>
]REFS]
* 実装
[540] [[Apache]] は未知の[[要求メソッド]]を指定すると
[CODE(HTTP)[[[501]]]] を返します。 [CODE(HTTP)@en[[[Allow:]]]]
[[ヘッダー]]もあります。 [TIME[2014-08-28T12:04:26.400Z]]
[541] [[nginx]] は未知の[[要求メソッド]]を指定すると
[CODE(HTTP)[[[405]]]] を返します。 [CODE(HTTP)@en[[[Allow:]]]]
[[ヘッダー]]はありません。[[要求メソッド]]の名前に[[小文字]]が含まれると[[要求行]]を受け取った時点で
[CODE(HTTP)[[[400]]]] を返します。 [TIME[2014-08-28T12:05:04.700Z]]
* 関連
[503] 不適当な[[メソッド]]の時に返され得る[[メソッド]]には、他に [CODE(HTTP)[[[405]]]]
があります。 [[HTTP]] 仕様上は、[[メソッド]]を知っているものの当該[[資源]]に対する動作が未定義の時は
[CODE(HTTP)[[[405]]]] を、そもそも存在さえ知らず扱い方がわからない[[メソッド]]の時は
[CODE(HTTP)[[[501]]]] を返す、とされています。
;; [506] [[CGI]] の [[RFC]] は[[メソッド]]未対応の場合にこれら2つの[[状態符号]]が使えることを述べています
[SRC[>>505]] が、その両者の違いは説明していません。
[REFS[
- [505] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]] ([TIME[2011-11-20 06:09:05 +09:00]] 版) <http://tools.ietf.org/html/rfc3875#page-27>
]REFS]
[504] 現実には、[[HTTP鯖]]や[[CGIスクリプト]]などの鯖側の実装が、未知の[[メソッド]]の指定は無視して
[CODE(HTTP)@en[[[GET]]]] など既知の[[メソッド]]であるものとみなして処理することもあります。