-
Notifications
You must be signed in to change notification settings - Fork 1
/
draft-yoshino-wish.txt
392 lines (248 loc) · 14.3 KB
/
draft-yoshino-wish.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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
Network Working Group T. Yoshino
Internet-Draft W. Zhu
Intended status: Standards Track Google, Inc.
Expires: November 11, 2017 May 10, 2017
WiSH: A General Purpose Message Framing over Byte-Stream Oriented Wire
Protocols (HTTP)
draft-yoshino-wish-03
Abstract
This document defines a general purpose message framing named WiSH
which supports bi-directional (bidi) message-based communication over
byte-stream oriented protocols such as HTTP (in its standard
semantics). WiSH is designed to be compatible with WebSocket. WiSH
can be viewed as a binary and bidi alternative to the framing defined
for the server-sent events (SSE, EventSource) Web API [SSE].
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on November 11, 2017.
Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
Yoshino & Zhu Expires November 11, 2017 [Page 1]
Internet-DrWiSH: A General Purpose Message Framing over Byte- May 2017
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Background . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Conformance Requirements and Terminology . . . . . . . . . . 3
4. WiSH Protocol . . . . . . . . . . . . . . . . . . . . . . . . 4
5. Framing . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
6. Using WiSH over HTTP . . . . . . . . . . . . . . . . . . . . 5
7. WebSocket Compatibility Consideration . . . . . . . . . . . . 5
7.1. Valid UTF-8 Requirement . . . . . . . . . . . . . . . . . 5
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 6
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 6
9.1. Normative References . . . . . . . . . . . . . . . . . . 6
9.2. Non-normative References . . . . . . . . . . . . . . . . 6
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 7
1. Introduction
The WebSocket protocol was proposed to provide native client-server
bidi messaging for the Web. It has been implemented and deployed
widely, but there are still missing semantics and features. See
[BidiwebSurvey].
WiSH is a general purpose message framing for use over the standard
HTTP semantics to provide bidi messaging semantics. WiSH stands for
Web in Strict HTTP.
The communication protocol providing the standard HTTP semantics can
be HTTP/1.1 [RFC7231], HTTP/2 [RFC7540], HTTP/2 + QUIC [QUIC], or any
future protocols. Wire protocol features such as multiplexing,
session priority, etc. are provided by the underlying protocol
[TransportAbstraction]. Unlike HTTP/2, HTTP/1.1 doesn't specify if
earlier 2xx responses are allowed [RFC7540]. Therefore, when
HTTP/1.1 is used as the underlying protocol, full-duplex
communication may be broken if the client, server or any intermediary
chooses to buffer or reject earlier 2xx responses. Since
intermediaries may buffer response bodies, bidi communication over
WiSH may experience extra latency compared to WebSocket. When HTTPS
is used, response body buffering by intermediaries is less likely to
happen.
The wire protocol features of WebSocket, such as handshake or control
messages, are all dropped. WiSH respects the semantics of the
underlying protocol (as opposed to turning it to a transport
protocol). The concept of fragmentation is retained for enabling
Yoshino & Zhu Expires November 11, 2017 [Page 2]
Internet-DrWiSH: A General Purpose Message Framing over Byte- May 2017
starting message transmission before determining the final length of
the message.
Application-level protocols may use WiSH as the framing protocol to
support bidi communication over HTTP and for Web and Internet
clients.
2. Background
There has been several attempts to improve bidi message-based
communication on the Web.
The server-sent events (SSE) [SSE] realized message-based
communication in the server-to-client direction, by introducing a new
Web API and a special message framing format while using HTTP as the
wire protocol. Except for the issue of possible buffering by
intermediaries, SSE works well with existing intermediaries and
frameworks that support HTTP.
WebSocket realized bidi message-based communication by introducing
both a new Web API and a new wire protocol. Because the wire
protocol is incompatible with HTTP, intermediaries and frameworks
have to be upgraded to understand the wire protocol to support
WebSocket.
In parallel to the development of WebSocket, HTTP has been greatly
improved with HTTP/2. There are more improvements upcoming to the
HTTP e.g. QUIC.
It's desirable that normal HTTP traffic and bidi message-based
communication on the Web share further evolution to reduce cost of
development and standardization. Bidi message-based communication on
the Web should be multiplexed with normal HTTP traffic and should
benefit from future transport-level improvements such as QUIC.
WiSH is designed based on the above analysis. Use of the standard
HTTP semantics as-is reduces cost and makes the Web simpler.
3. Conformance Requirements and Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
Requirements phrased in the imperative as part of algorithms (such as
"strip any leading space characters" or "return false and abort these
steps") are to be interpreted with the meaning of the key word
("MUST", "SHOULD", "MAY", etc.) used in introducing the algorithm.
Yoshino & Zhu Expires November 11, 2017 [Page 3]
Internet-DrWiSH: A General Purpose Message Framing over Byte- May 2017
Conformance requirements phrased as algorithms or specific steps can
be implemented in any manner, so long as the end result is
equivalent. In particular, the algorithms defined in this
specification are intended to be easy to understand and are not
intended to be performant.
4. WiSH Protocol
WiSH frames messages over an HTTP request body or response body using
the framing defined in Section 5.
The "Content-Type" header value of the underlying HTTP request or
response message for which WiSH is used MUST be "application/web-
stream".
5. Framing
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|C|0|0|opcode |0|Payload |Extended payload length |
|I|M| | |4 bit | |length |16 bit if payload length is 126|
|N|P| | | | |7 bit |64 bit if payload length is 127|
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Payload Data |
+-------------------------------+ - - - - - - - - - - - - - - - +
| |
+---------------------------------------------------------------+
WiSH is compatible with the framing of the WebSocket protocol
[RFC6455].
The opcode field indicates how to interpret the payload data field.
WiSH uses the following opcodes.
o %x0 denotes a continuation frame
o %x1 denotes the initial frame of a text message
o %x2 denotes the initial frame of a binary message
o %x3 denotes the initial frame of a text metadata message
o %x4 denotes the initial frame of a binary metadata message
Any values not listed here are reserved.
Yoshino & Zhu Expires November 11, 2017 [Page 4]
Internet-DrWiSH: A General Purpose Message Framing over Byte- May 2017
The FIN bit together with the continuation frame opcode, payload
length and extended payload length work in the same way as the
WebSocket protocol to represent messages. The fragmentation
mechanism allows for flushing part of a large message payload without
waiting for the total size of the message to be determined.
The CMP bit indicates whether the message is compressed. The CMP bit
of the first frame MUST be set to 1 when compression is enabled for
the message. Otherwise, it MUST be set to 0. The CMP bit of non-
first frames MUST be always set to 0.
The message type distinction by the opcode field (text and binary) is
kept to allow better Web support.
The two metadata opcodes can be used for exchanging metadata e.g.
using messages with opcode set to %x3 with metadata encoded in JSON
in its payload field.
The status code and status reason defined in the WebSocket protocol
are dropped.
The ping and pong control message of the WebSocket protocol are
dropped. If such a feature is needed, it should be provided by
underlying protocols.
The permessage-deflate extension [RFC7692] is defined for the
WebSocket protocol, to add a compression mechanism to it. The
permessage-deflate extension can be applied to WiSH. The details are
to be specified.
What contents are exchanged and in what encoding they are exchanged
over WiSH are to be defined by the application layer.
6. Using WiSH over HTTP
The standard HTTP (REST) semantics should be followed, especially the
choice of the HTTP method. Some HTTP semantics may not be
applicable, e.g. the "Cache-Control" header, when the body is
streamed. However, such limitation is not specific to WiSH.
7. WebSocket Compatibility Consideration
7.1. Valid UTF-8 Requirement
In RFC6455, endpoints are required to _Fail the WebSocket Connection_
when they find that the byte stream in a text message is not a valid
UTF-8 stream. To conform to the requirement, RFC6455 server
frameworks check UTF-8 validness. The contents of text messages of
Yoshino & Zhu Expires November 11, 2017 [Page 5]
Internet-DrWiSH: A General Purpose Message Framing over Byte- May 2017
WiSH also MUST be a valid UTF-8 stream. However, WiSH endpoints are
not required to check UTF-8 validness. This provides more
flexibility to server development. For example, a server may choose
to check UTF-8 validness inside a JSON parser.
8. Acknowledgements
Thank you to the following people for giving feedback to the
document: Ben Christensen, Costin Manolache, Kari Hurtta, Loic
Hoguin, Roberto Peon, Van Catha.
9. References
9.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/
RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", RFC
6455, DOI 10.17487/RFC6455, December 2011,
<http://www.rfc-editor.org/info/rfc6455>.
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Semantics and Content", RFC 7231, DOI
10.17487/RFC7231, June 2014,
<http://www.rfc-editor.org/info/rfc7231>.
[RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
Transfer Protocol Version 2 (HTTP/2)", RFC 7540, DOI 10
.17487/RFC7540, May 2015,
<http://www.rfc-editor.org/info/rfc7540>.
[RFC7692] Yoshino, T., "Compression Extensions for WebSocket", RFC
7692, DOI 10.17487/RFC7692, December 2015,
<http://www.rfc-editor.org/info/rfc7692>.
9.2. Non-normative References
[SSE] WHATWG, "HTML Living Standard - Server-sent events", May
2017, <https://html.spec.whatwg.org/multipage/comms.html
#server-sent-events>.
Yoshino & Zhu Expires November 11, 2017 [Page 6]
Internet-DrWiSH: A General Purpose Message Framing over Byte- May 2017
[BidiwebSurvey]
Yoshino, T. and W. Zhu, "Non Request-Response
Communication over the Web, and What's Missing", January
2014, <https://github.com/bidiweb/bidiweb-semantics/blob/
master/SurveyOfProtocolGaps.md>.
[TransportAbstraction]
Zhu, W., "http-transport-abstraction", July 2016,
<https://github.com/bidiweb/http-transport-abstraction>.
[QUIC] Hamilton, R., Iyengar, J., Swett, I., and A. Wilk, "QUIC:
A UDP-Based Secure and Reliable Transport for HTTP/2",
July 2016.
Authors' Addresses
Takeshi Yoshino
Google, Inc.
Email: [email protected]
Wenbo Zhu
Google, Inc.
Email: [email protected]
Yoshino & Zhu Expires November 11, 2017 [Page 7]