/
551.txt
174 lines (127 loc) · 10.4 KB
/
551.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
[22] [[Web]] における[[クライアント]]は、[[鯖]]に対してサービスの提供を要求する[[ソフトウェア部品]]です。
* 仕様書
[REFS[
- [2] '''[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-2.1>'''
- [7] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-8.2>
- [59] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-17>
- [11] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-18>
- [13] [CITE@en[RFC 5849 - The OAuth 1.0 Protocol]]
([TIME[2014-12-28 14:19:21 +09:00]] 版)
<http://tools.ietf.org/html/rfc5849#section-1.1>
- [18] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-1.1>
- [21] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-2>
- [29] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-10.11>
- [31] [CITE@en[Final: OpenID Connect Core 1.0 incorporating errata set 1]] ([TIME[2014-11-09 04:00:29 +09:00]] 版) <http://openid.net/specs/openid-connect-core-1_0.html#rfc.section.1>
- [33] [CITE@en[Final: OpenID Connect Core 1.0 incorporating errata set 1]] ([TIME[2014-11-09 04:00:29 +09:00]] 版) <http://openid.net/specs/openid-connect-core-1_0.html#Terminology>
- [34] [CITE@en[RFC 6455 - The WebSocket Protocol]] ([TIME[2015-03-11 20:42:50 +09:00]] 版) <http://tools.ietf.org/html/rfc6455#section-4>
- [42] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-2.2>
- [44] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-3>
]REFS]
* HTTP クライアント
[3] [DFN[[RUBYB[[[クライアント]]]@en[client]]]]は、
一つ[[以上]]の[[HTTP要求]]を[[送信]]するために[[鯖]]に[[接続]]を[[確立]]する[[プログラム]]です
[SRC[>>2]]。
[4] 「[[利用者エージェント]]」も同じような定義になっていますが、
[[利用者エージェント]]だけでなく[[串]]や[[関門]]も、
[[上流]]に対しては[[クライアント]]とみなされるようです。
;; [24] しかし一般的には[[串]]のことを考慮せず、[[クライアント]]と[[利用者エージェント]]を同義語として使うことが多いようです。
例えば以降で示す [[WebDAV]] や [[OAuth]] の[[クライアント]]が[[串]]も含むとは考え難いです。
[43] [[HTTP/2]] の[DFN[[RUBYB[[[クライアント]]]@en[client]]]]は、
[[HTTP/2接続]]を[RUBYB[開始]@en[initiate]]する[[エンドポイント]]です [SRC[>>42]]。
[[クライアント]]は、[[HTTP要求]]を送信し、[[HTTP応答]]を受信します [SRC[>>42]]。
[[クライアント]]は、 [[TCP接続]]の [[initiator]] です [SRC[>>44]]。
[45] [[HTTP]] の仕様では、 [[クライアント]]の挙動が (各プロトコル要素をどう送受信するべきかなど)
断片的に規定されています。
[46] [[Fetch Standard]] では、[[利用者エージェント]]がどのように[[要求]]を生成し、
[[応答]]を処理するべきかが規定されています。
[47] その他の [[HTTP]] を使った[[アプリケーション]] ([[WebDAV]] や [[OAuth]] など)
では、それぞれの技術を実装する[[クライアント]]の挙動が規定されています。
* WebDAV クライアント
[23] [[WebDAV]] [[クライアント]]は、 [[HTTP]] 本体に加えて [[WebDAV]]
を実装する[[クライアント]]です。
[12] [[WebDAV]] [[クライアント]]は、 [[HTTP/1.1]] に適合しなければ[['''なりません''']]
[SRC[>>11]]。
[8] [[WebDAV]] [[クライアント]]は、 [[XML 1.0]] と [[XML名前空間 1.0]]
を実装しなければ[['''なりません''']] [SRC[>>7]]。
[9] [[WebDAV]] [[クライアント]]は、[[応答]]が[[整形式]]でなければ、
[[要求メソッド]]が実行されたかどうかを仮定しては[['''ならず''']]、
[[鯖]]の動作がおかしいと考える[['''べきです''']] [SRC[>>7]]。
[60] [[WebDAV]] [[クライアント]]は、 [[WebDAV]] の [[XML文書]] ([[死特性]]以外)
の未知の[[要素]]や[[属性]]、既知ながら想定されていない場所で使われている[[要素]]や[[属性]]について、
無視して処理しなければ[['''なりません''']] [SRC[>>59]]。
[[生特性]]の値でも原則として無視する[['''べきです''']] [SRC[>>59]]。
[10] [[処理指令]]は無視する[['''べきです''']] [SRC[>>59]]。
* OAuth 1.0 クライアント (消費者)
[15] [[OAuth 1.0]] における[DFN[[RUBYB[[[クライアント]]]@en[client]]]]は、
[[OAuth]] の[[認証された要求]]を使うことができる [[HTTPクライアント]]です [SRC[>>13]]。
;; [14] 元々は[DFN[[RUBYB[[[消費者]]]@en[consumer]]]]ともいいました [SRC[>>13]]。
[16] [[Webアプリケーション]]が他の [[Webアプリケーション]]の [[Web API]]
を [[OAuth]] により使う場合だと、最初の [[Webアプリケーション]]が[[クライアント]]に当たります。
両 [[Webアプリケーション]]を使う[[利用者]]は[[資源所有者]]に当たり、
[[OAuth]] における[[クライアント]]で無いので注意が必要です。
;; [17] [[OAuth]] の元の用語では[[消費者]]と言っていたので混同の虞は無かったのですが、
[[IETF]] で変更されてしまいました。
[27] [[クライアント]]は、次の[[エンドポイント]]を持つことができます。
[FIG(short list)[
- [[コールバックURL]]
]FIG]
* OAuth 2.0 クライアント
[19] [DFN[[RUBYB[[[クライアント]]]@en[client]]]]は、[[資源所有者]]にかわって、その[[認可]]に基づき[[被保護資源要求]]を行う[[応用]]です [SRC[>>18]]。
;; [20] 実装の性質は特に制限されず、[[鯖]]、[[デスクトップ]]、その他どの[[装置]]で実行される[[応用]]であっても構いません [SRC[>>18]]。
[25] [[OAuth 2.0]] の利用に先立ち[[クライアント]]は[[認可鯖]]に登録することになっています
[SRC[>>21]]。
;; [[クライアントの登録]]参照。
[26] [[クライアント]]は、次の[[エンドポイント]]を持つことができます。
[FIG(short list)[
- [[リダイレクトエンドポイント]]
]FIG]
[28] [[クライアント]]は、[[クライアント型]]により分類されます。
[30] [[クライアント]]の開発者は、[[フィッシング]]防止のため、
[[利用者エージェント]]を埋め込むか外部のものを利用するかの判断や[[認可鯖]]が正しいサーバーか検証する手段の提供など配慮するべきです [SRC[>>29]]。
[32] [[OpenID Connect]] を実装する [[OAuth 2.0]] [[クライアント]]を
[DFN[[[Relying Party]]]] ([DFN[[[RP]]]]) といいます [SRC[>>31]]。
すなわち、 [[OpenID Provider]] による[[末端利用者]]の[[認証]]と [[claim]]
が必要な[[応用]]をいいます [SRC[>>33]]。
* WebSocket クライアント
[41] [[WebSocket handshake]] を開始して[[WebSocketサーバー]]と通信するものを、
[[WebSocketクライアント]]といいます。
[35] 特定[[通信事業者]]の[[携帯電話]]上の[[ブラウザー]]など、
管理された環境下で動作する[[クライアント]]は、ネットワーク上の他者に
[[WebSocket接続]]の管理を委託しても構いません。その場合、
[[携帯電話]]上のソフトウェアと委託先を含めた全体を[[クライアント]]といいます [SRC[>>34]]。
[36] 元々 [[WebSocket]] は [[Webブラウザー]]と[[サーバー]]との通信のためのプロトコルですが、
[[Webブラウザー]]以外の[[クライアント]]が使うこともできます。
;; [37] 例えば、[[Webブラウザー]]と専用クライアントとで共通した
[[WebSocket]] を用いたチャットアプリケーションを実装できます。
;; [38] [[Webブラウザー]]で使わないなら、 [[TCP]] を普通に使えば良いので、
[[WebSocket]] を使う利点は特にありません。 [[Webブラウザー]]ではセキュリティー上の理由から
[[TCP]] を[[著者]]にそのまま使わせることができないため、
[[WebSocket]] が開発されました。
[39] [[HTML Standard]] は [[Webブラウザー]]向けの [[WebSocketクライアント]]として
[CODE(DOMi)@en[[[WebSocket]]]] [[インターフェイス]]を規定しています。
[40] [[Webブラウザー]]以外の[[クライアント]]はこの規定に従う必要はありませんが、
実用上、同様のものを (各[[プログラミング言語]]や[[フレームワーク]]などに合わせた形にして)
実装するのが好ましいと思われます。
[FIG(list short)[
- [[WebSocket接続の確立]]
- [[WebSocketメッセージ受信]]
- [[WebSocketメッセージ送信]]
- [[[CODE[Ping]]フレーム]]送信
- [[[CODE[Pong]]フレーム]]送信
- [[WebSocket closing handshake]]
]FIG]
* 歴史
[FIG(quote)[
[FIGCAPTION[
[1] [[HTTP]] ([[RFC 1945]] 1.2, [[RFC 2068]] 1.3, [[RFC 2616]] 1.3)
]FIGCAPTION]
>
:client: A[DEL[n application [INS[{1945}]]]]
program that establishes connections for the purpose of sending requests.
:クライアント:
[[要求]]を送信する目的で[[接続]]を確立する[DEL[応用]]プログラム。
]FIG]
* 関連
[5] [[クライアント]]からの[[HTTP要求]]を受け取って[[HTTP応答]]を[[クライアント]]に送信するものを、
[[鯖]]といいます。
[6] [[クライアント]]は[[HTTP要求]]に関しては[[送信者]]、[[HTTP応答]]に関しては[[受信者]]となります。