[10] [[URL]] の長さは理論上は無制限ですが、現実には制限があります。
実装はその都合に応じて適当な上限を設けることができます。

[17] [[サーバー]]のような [[URL]] を受信し、自身の権限でその [[URL]]
に応じた処理を行う[[ソフトウェア]]は、任意の上限を設定できます。

[EG[
[18] 例えば [[Webサーバー]]は、自身が扱う[[資源]]の [[URL]] がすべて500文字以下なら、
[[URL]] の長さ上限を512文字とし、それ以上は一律でエラーとすることができます。
]EG]

[19] [[Webブラウザー]]のような他者が提供した任意の [[URL]]
を扱えるべき[[ソフトウェア]]は、実世界での用法を鑑みて十分長い [[URL]]
も扱える必要があります。

[EG[
[20] [[Webサーバー]]によっては (例えば) 1024文字程度の長い [[URL]]
を生成するものもありますから、512文字以上の [[URL]] を扱えない
[[Webブラウザー]]や[[ソーシャルブックマークサービス]]などは、
[[Web互換]]とは言えません。
]EG]

[21] [[URL]] は[[文字]]の列ですが、実装の都合で[[文字]]数ではなく、
[[バイト]]数で上限が設定されていることも少なくありません。

* HTTP における URL の長さの制限

[3] [[HTTP]] で扱う [[URL]] に関しては、仕様上は長さの制限が設けられていませんが、
実装上は上限を設けることが認められています。その場合 [CODE(HTTP)[[[414]]]]
[[応答]]を返すことになっています。

[415] 詳しくは[[要求対象]]の項を参照してください。

;; [13] [[要求行]]全体で8000バイトは最低でも対応するべきとされています。


[22] [[URI]] の長さには本来制限はありません。
HTTP においても、処理系的にやむを得ない場合を除いて任意の長さを扱えるようにするべきだとどっか他の章に書いてあったと思います。

[23] 
現実には、 [[WWWブラウザ]]で一定長までしか扱えないのがよく使われていますし、
サーバー側にしてもファイル・システムに写像しているのならファイル・システム側のファイル名の長さ制限に引っかかることが考えられます。
[WEAK[(但し、ファイル・システムの制限ならサーバー側のどうでも良い事情ですから、隠匿して [CODE(HTTP)[[[404]]]] でも送っておくのが筋でしょう。)]]


[DEL[
[4] [[鯖]]は提供する[[資源]]の [[URL]] を扱うことができなければ[['''なりません''']]。
[CODE(HTTP)@en[[[GET]]]] を使った[[フォーム]]を提供していて、
それがいくらでも長い [[URL]] を生成し得るのであれば、それを扱うことができる[['''べきです''']]。
[SRC[>>5]]

;; [6] [[鯖]]は自分が何を提供し何を提供しないか自ら決められるわけですから、
長い [[URL]] の[[資源]]は提供しないと決めても何ら問題なく (というか外部からは観測不能だし[[相互運用性]]にはまったく寄与しない)、
>>4 のようなぱっとしない MUST 要件になっているのでしょうね。しかし自ら決められるといっても、
[CODE(HTTP)@en[[[GET]]]] [[フォーム]]については例外で、 [[URL]] がユーザーの入力によって決まるので、
そこは[[相互運用性]]に影響するものであり、 SHOULD 要件で例外として補足しているのでしょうな。

[7] [[鯖]]は、 [[URL]] が扱える長さの上限を超えていれば、 [CODE(HTTP)[[['''414''']]]]
を返す[['''べきです''']]。 [SRC[>>5]]

[8] 古い[[クライアント]]や[[串]]は255バイトよりも長い [[URL]] をうまく扱えないので、
[[鯖]]は注意したほうが[RUBYB[よいです]@en[ought to]]。 [SRC[>>5]]

[9] でもこれ、 >>6 のようなややこしいことを考えずとも、
[[鯖]]と[[串]]は任意の長さの [[URL]] を扱えなければならず、通常通り処理できなければ
[CODE(HTTP)[[['''414''']]]] を返すべきである、と規定するだけでいい気がするのですがね。

** 仕様書

- [11] [DEL[[CITE@en[RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1]] <http://tools.ietf.org/html/rfc2068#section-3.2.2>]]
- [5] [CITE@en[RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1]] 
<http://tools.ietf.org/html/rfc2616#section-3.2.1>

;; [12] [[RFC 1945]] にはありませんでした。
]DEL]

* WAP における URL の長さの制限

[1] [[WAE利用者エージェント]]および [[WAP串]]は、最低1024オクテットの [[URI]] を扱えなければなりません: <http://www.openmobilealliance.org/wapdocs/wap-236-waespec-20020207-a.pdf> 7.2

* [CODE(JS)@en[Location]] オブジェクトにおける長さ制限

[2]
[CITE[URL の GET での長さの制約 - 8時40分が超えられない - subtech]] ([TIME[2009-03-31 08:40:19 +09:00]] 版) <http://subtech.g.hatena.ne.jp/secondlife/20090121/1232507478>


[FIG(quote)[
[FIGCAPTION[
[14] [CITE@en[RFC 2911 - Internet Printing Protocol/1.1: Model and Semantics]]
([TIME[2015-02-15 17:22:27 +09:00]] 版)
<https://tools.ietf.org/html/rfc2911#section-4.1.5>
]FIGCAPTION]

> The maximum length of URIs used as values of IPP
>    attributes is 1023 octets.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[15] [CITE@en[RFC 3510 - Internet Printing Protocol/1.1: IPP URL Scheme]]
([TIME[2014-12-21 20:19:26 +09:00]] 版)
<https://tools.ietf.org/html/rfc3510#section-4.5>
]FIGCAPTION]

> Note:  IPP Printers ought to be cautious about depending on URI lengths above 255 bytes, because some older client implementations might not properly support these lengths.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[16] [CITE@ja[PocketやYahoo!ブックマークにも対応! 他ブックマークサービスからの移行方法 - はてなブックマーク開発ブログ]]
([TIME[2015-12-25 13:21:44 +09:00]] 版)
<http://bookmark.hatenastaff.com/entry/import_from_pocket>
]FIGCAPTION]

> 
> URLは255バイトに制限されます

]FIG]
