[14] [DFN[[CODE(URI)@en[[[http:]]]]]] は、 [[HTTP]] によってアクセスできる[[資源]]を表す [[URL scheme]] です。 ;; [15] [[Semantic Web]] の世界では、実際には [[HTTP]] でアクセスしても存在していない[[資源]]や、 [[HTTP]] によって[[メタデータ]]が取得できるに過ぎない[[資源]]にも [CODE(URI)@en[[[http:]]]] [[URL]] が濫用されています。 * 仕様書 - [18] [CITE@en[RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1]] * 意味 [19] [CODE(HTTP)@en[[[http:]]]] [[URL]] は、指定された [[host]]、[[port]] に [[HTTP]] over [[TCP]] で接続し、 [[path]] と [[query]] を [CODE(ABNF)@en[[[Request-URI]]]] として指定したときに得られる[[資源]]を識別しています。 [SRC[>>18, [[RFC 2616]] 正誤表]] ** Semantic Web 界での解釈 [5] [CITE[What do HTTP URIs Identify? - Design Issues]] ([[名無しさん]]) [6] [CITE[What do HTTP URIs Identify? - Design Issues]] ([[名無しさん]]) [7] [CITE[TAG Issues List]] ([[名無しさん]]) [8] [CITE@EN[URNs, Namespaces and Registries]] ([CODE[2006-09-01 17:51:46 +09:00]] 版) * path [12] [CODE(URI)@en[[[/.well-known/]]]] ではじまる [[path]] は予約されています。 * 処理モデル ** フォーム提出 [11] [CITE@en-GB-x-Hixie[Web Forms 2.0]] ([TIME[2009-01-05 20:07:15 +09:00]] 版) * 不思議解釈 [4] > RFC 2616 には HTTPプロトコルに関することが書かれており,3.2.2 http URL に書かれている http URL も,HTTPプロトコルの中での話になります.一般に,HTML のリンクに使用されるものは,純粋に HTTPプロトコルの中で使用される http URL ではなく, scheme が http であるURI References です. 出典: [CITE[Perlメモ]] (2005年3月現在) このような解釈は正しく'''ありません'''。 [[IANA]] の [[URI scheme]] 登録簿に拠れば [CODE(URI)[[[http]]:]] URI scheme の出典は [[RFC 2616]] であり、 [[IETF]] 的に有効な [CODE(URI)[[[http]]:]] [[URI]] の規定は ([[HTTP]] であれ [[HTML]] であれ、その他の文脈であれ) [[RFC 2616]] だけです。 更に > たとえば http://user:passwd@www.din.or.jp/~ohzaki/perl.htm#URI は URI References ですが,user:passwd@ の部分,すなわち,userinfo や,#URI の部分,すなわち, Fragment Identifier は HTTPプロトコルの中で使用される http URL としては不正なものとなります.しかし,HTML のリンクとしては問題ありません.なぜなら,クライアント(ブラウザ)が HTTPプロトコルで通信する際にはそれらを削除しているからです. と説明がありますが、このような議論は実装がそうであるというだけで、 仕様がそうであるとの根拠はありません。 ([[RFC 2396]] の時代に [[URI参照]]の一部分ではあっても [[URI]] の一部分ではなかった[[素片識別子]]は別として、) 単に仕様と実世界が整合していないというだけであって、 [[HTTP]] で使うか [[HTML]] で使うかは関係ありません。 個々の [[URI scheme]] の規定は [[RFC 2396]] (や新しい [[RFC 3986]]) の一般の規定に優先するので、 [[RFC 2396]] で許されるように見えても [[RFC 2616]] で許されないものは、すべて認められません。 ([CODE(URI)[[[ftp]]:]] [[URI]] に関する部分にも同様の指摘ができます。 ただし [CODE(URI)[[[ftp]]:]] [[URI scheme]] の仕様は未だにいにしえの [[RFC 1738]] のままで、実装とまったく整合していません。) * 歴史 ** RFC 2068 の定義 [2] [[RFC 2068]] 3.2 で規定されています。 ただし、 [[HTTP]] で使うための [[URI]] の定義であって、一般の場面の URI としての定義ではないことに注意が必要です。 具体的には、本来 URI では使えないはずの [[national]] の文字が認められていたりします。 - http_URL = "http:" "//" host [ ":" port ] [ abs_path ] - host = -- = uri.[[host]] ;; = hostname / [[IPv4address]] - port = *DIGIT - relativeURI = net_path | abs_path | rel_path - net_path = "//" net_loc [ abs_path ] - abs_path = "/" rel_path - rel_path = [ path ] [ ";" params ] [ "?" query ] - path = fsegment *( "/" segment ) - fsegment = 1*pchar -- = 1*((OCTET - unsafe) / escaped) - segment = *pchar -- = *((OCTET - unsafe) / escaped) - params = param *( ";" param ) - param = *( pchar | "/" ) -- = *((OCTET - unsafe) / escaped) - scheme = 1*( ALPHA | DIGIT | "+" | "-" | "." ) - net_loc = *( pchar | ";" | "?" ) -- = *((OCTET - unsafe) / escaped) - query = *( uchar | reserved ) -- = *(([[OCTET]] - [[unsafe]]) / [[escaped]]) - fragment = *( uchar | reserved ) -- = *((OCTET - unsafe) / escaped) なんかこの構文破綻してる気がしますが。。。 例えば [CODE(ABNF)[segment = 2068.segment - "/"]] と定義しておかないと[[欲張り]]過ぎるんじゃ? * テスト・ケース [1] ''Another HTML-lint : Explanation'' 正しくない [[URI]] の例が幾つかあります。 * 関連 [16] [CODE(URI)@en[[[http:]]]] に非常によく似た [[URL scheme]] として、 [[HTTP/TLS]] を表す [CODE(HTTP)@en[[[https:]]]]、 [[SHTTP]] を表す [CODE(HTTP)@en[[[shttp:]]]] があります。 [17] [[Web]] の[[掲示板]]などでは、 [CODE(HTTP)@en[[[http:]]]] [[URL]] を検知して自動的に[[ハイパーリンク]]として解釈する機能が適用されることを防ぐため、 [CODE(HTTP)@en[[[ttp:]]]]、[CODE(HTTP)@en[[[tp:]]]]、[CODE(HTTP)@en[[[p:]]]] といった [[URL scheme]] を用いたり、 [[URL scheme]] を省略して [CODE(URI)[[[:]]]] から始めたり、 「[CODE(HTTP)@en[[[http]]]]」の一部又は全部を[[全角]]で表記したりすることがあります。 [13] [[HTTPにおけるURL]]の項もご覧ください。