[1] protocol は、プロトコルの名前と版を表す構文です。
[3] protocol やそれに類する構文は、
次の場面で利用されます。
[4] product (User-Agent:, Server:,
Via: の注釈) も類似した構文を採用していますが、
プロトコルではなく製品を表すものとなっています。
[5] protocol は、プロトコル名のみか、またはプロトコル名とプロトコル版を/ で区切ったものです
>>2。
[6] プロトコル名とプロトコル版は、いずれも字句です >>2。
[7] 大文字と小文字の区別の有無は明記されておらず、区別するものとみられます。 HTTPの版では区別すると明記されています >>9。
[13] SERVER_PROTOCOL では、値に更に制限があります。
[12] HTTPの版では、プロトコル版の値に更に制限があります。
[10] Via: では、プロトコル名が HTTP
の場合、プロトコル名と / を省略できることになっています。
プロトコル版は省略できません。
[15] この他に、 HTTP の RFC には例示として
HTTP/2.0, IRC/6.9,
SHTTP/1.3, RTA/x11
という架空の Upgrade: ヘッダーの値が登場します。
[16] Upgrade: の値については、 IANA登録簿 >>17 が用意されています
>>20。
[18] IANA登録簿は RFC 2817 により設けられました >>26, >>27。
[19] 2003年12月の時点で、登録簿には一つも登録されていません。
HTTP 仕様書で定義されている HTTP/* や
登録手続きを規定している RFC 2817 が定義している TLS/1.0
すら載っていないのはなんとも間抜けな話です (が、 IANAREG では良くある話です)。
[22] その後いつからか、 TLS/1.0 も登録されました。
また、 WebSocket も登録されています。
[21] RFC 7230 は新しい登録手続きを定義しています。
手続きは First Come First Served となっています >>20。
更に HTTP も登録しています >>20。
[28] 気づいたら TLS/1.0 は TLS に変わっています。
RFC 2817 は TLS/1.0 を規定していましたが、 RFC正誤表が
TLS を規定し、 TLS の版を指定できる形に改めています >>27。
[29] 現在の IANA登録簿は、 RFC 2818 (のみ) を出典に、 版は「ANY DIGIT.DIGIT (e.g.. "1.2")」と説明しています >>17。
[31] HTTP/2 において Upgrade: h2 は無視しなければならない
>>30 と規定されていますが、なぜかこの h2 という値は登録されていません。
予約状態で登録されていても良さそうなものですが。
[32] 869725 – support shoutcast streams () https://bugzilla.mozilla.org/show_bug.cgi?id=869725
SERVER_PROTOCOLの項を参照してください。 また Web Sockets は、区別しないUpgrade:の処理を定義しています。