-
Notifications
You must be signed in to change notification settings - Fork 4
/
146.txt
147 lines (109 loc) · 6.85 KB
/
146.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
* 仕様書
[REFS[
- [21] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-14 22:44:13 +09:00]] 版) <https://html.spec.whatwg.org/#dom-location-pathname>
]REFS]
* 比較
[9] [[Path]] に関する[[比較演算]]として [[path一致]]があります。
[11] [[隣接異体]]の定義では、[[HTTPにおけるURLの比較]]を用いつつ、
[[ディレクトリー]]部分までの[[パス]]の一致を使っています。
* プロトコル
[19]
[FIG(list short)[
- [CODE(HTTP)@en[Path]] [[属性]] ([[Cookie]])
- [CODE(JS)@en[location.pathname]] ([[DOM]])
- [CODE(HTTP)@en[:path]] [[擬似ヘッダー]] ([[HTTP/2]])
]FIG]
* [CODE(DOMi)@en[Location]] インターフェイス [CODE(DOMa)@en[pathname]] 属性
** 性質
[23] この[[属性]]は、 [CODE(xattr IDL)@en[Unforgeable]] です [SRC[>>21]]。
** 取得器
[25] [CODE(JS)@en[location.pathname]] の[[取得器]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>21]]。
[FIG(steps)[
= [24] [[文脈オブジェクト]]の[F[[[関係する[CODE(DOMi)@en[Document]]]]]]の[F[実効スクリプト起源]]と[[入口設定群オブジェクト]]の[F[実効スクリプト起源]]が[[同じ起源]]でなければ、
== [26] [CODE(DOMe)@en[SecurityError]] [[例外]]を[[投げ]]、ここで停止します。
= [27] [VAR[URL]]を、[[文脈オブジェクト]]の[F[URL][Location (DOM)]] に設定します。
= [28] [VAR[URL]]の[F[非相対フラグ]]が設定されていれば、
== [29] [VAR[URL]]の[F[path]]の最初の[[文字列]]を返します。
= [30] それ以外なら、
== [31] [VAR[結果]]を、 [CODE[/]] に設定します。
== [32] [VAR[URL]]の[F[path]]の各[[文字列]][VAR[文字列]]について、順に、
=== [33] [VAR[結果]]の末尾に [CODE[/]] を追加します。
=== [34] [VAR[結果]]の末尾に[VAR[文字列]]を追加します。
== [35] [VAR[結果]]を返します。
]FIG]
** 設定器
[36] [CODE(JS)@en[location.pathname]] の[[設定器]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>21]]。
[FIG(steps)[
= [43] [VAR[入力]]を、与えられた値を [CODE(IDL)@en[USVString]] として解釈した結果に設定します。
= [37] [[文脈オブジェクト]]の[F[[[関係する[CODE(DOMi)@en[Document]]]]]]の[F[実効スクリプト起源]]と[[入口設定群オブジェクト]]の[F[実効スクリプト起源]]が[[同じ起源]]でなければ、
== [38] [CODE(DOMe)@en[SecurityError]] [[例外]]を[[投げ]]、ここで停止します。
= [39] [VAR[複製]]を、[[文脈オブジェクト]]の[F[URL][Location (DOM)]] に設定します。
= [40] [VAR[複製]]の[F[非相対フラグ]]が設定されていれば、ここで停止します。
= [41] [VAR[入力]]に[[基本URL構文解析]]を適用します。
[VAR[URL]] は[VAR[複製]]、[VAR[状態上書き]]は [[path start state]] とします。
= [42] [[文脈オブジェクト]]と [VAR[複製]]について
[[[CODE(DOMi)@en[Location]]-object-setter navigate]] を実行します。
]FIG]
* 関連
[10] [CODE(URI)@en[[[/]]]] から始まる [[path]] を[[絶対パス]]といいます。
* 歴史
- [1] [CODE(ABNF)[[DFN[path]] = [[fsegment]] *( "/" [[segment]] ) ;; [[RFC 1808]]]]
- [5] [CODE(ABNF)[[DFN[path]] := [ abs_path / opaque_part ] ;; [[RFC 2396]]]]
[4] RFC 1808 の [CODE(ABNF)[path]] は、 2396 では [CODE(ABNF)[[[path_segments]]]] に当たります。
[2] >>1 [CODE(ABNF)[[DFN[fsegment]] := 1*[[pchar]]]], [CODE(ABNF)[[DFN[segment]] := *pchar]] です。
最初の部分が必ず1文字ないといけないのは、
空を許すとすると [CODE(ABNF)[[[abs_path]]]] で
[SAMP(URI)[//foo]] のようなものが認められることなり、
[CODE(ABNF)[[[net_path]]]] と区別できなくなってしまうからでしょう。
[3] [[RFC 2396]] では、 [CODE[<path>]] は
[CODE(ABNF)[[[abs_path]]]] 又は [CODE(ABNF)[[[opaque_part]]]]
のことを指します。これらは排他的なので曖昧なく区別できます。
(RFC 2396 3.)
[6] 2396 によれば、 path segment では [CODE(regex)[ [/;=?] ]]
が[[予約]]されています。 [CODE(URI)[=]]
は[[引数]]で使われるのですが、
最初の引数のセミコロンより前では意味を持たないはずです。
それでも予約されています。
あ、よくみると、引数でも [CODE(URI)[=]] は定義されていませんね。
つまり、引数だろうがなかろうが、経路 segment 内では
[CODE(URI)[=]] と [CODE(URI)[%3D]] は必ずしも等価ではなく、
うかつに (un)escape してはいけないということです。
[7]
[CITE[The Path URN Specification]] ([CODE[1999-03-16 02:27:52 +09:00]] 版) <http://www.hypernews.org/~liberte/www/path.html>
([[名無しさん]])
[8]
<urn:ietf:id:draft-ietf-uri-urn-path-01>
[FIG(quote)[
[FIGCAPTION[
[12] [CITE[DUPLICITY(1) manual page]]
([TIME[2015-05-07 01:40:02 +09:00]] 版)
<http://duplicity.nongnu.org/duplicity.1.html#sect7>
]FIGCAPTION]
> In protocols that support it, the path may be preceded by a single slash, ’/path’, to represent a relative path to the target home directory, or preceded by a double slash, ’//path’, to represent an absolute filesystem path.
]FIG]
[20] [CITE[JavaScript - IEはanchorタグのpathnameとlocationのpathnameで違う値を返す - Qiita ''''''[''''''キータ'''''']'''''']]
( ([TIME[2013-09-17 05:16:32 +09:00]] 版))
<http://qiita.com/opengl-8080/items/b582bdc2b5923e7ca2aa>
** [CODE(XMLe)@en[cloud]] 要素 [CODE(XMLa)@en[path]] 属性
[13] [[RSS]] の [CODE(XMLe)@en[[[cloud]]]] [[要素]]の
[DFN[[CODE(XMLa)@en[[[path]]]] [[属性]]]]は、
[[Webサービス]]の[[経路]]を表します
[SRC@en[[[RSS Best Practices Profile]]]]。
[14] 仕様書:
[REFS[
- [15] [CITE@en[RSS Best Practices Profile]] ([TIME[2008-11-21 15:11:45 +09:00]] 版) <http://www.rssboard.org/rss-profile#element-channel-cloud>
]REFS]
[2] この[[属性]]は [[RSS 2.0]] でも定義されていましたが、
存在すること以外は何も規定されていませんでした。
[16] [CODE(XMLe)@en[cloud]] [[要素]]は [[XML-RPC]] または [[SOAP]]
の接続先を指定することになっています。 [CODE[path]] [[属性値]]はそのうち
[[path]] 部分を表すもので、事実上、 [[HTTP]] の [[URL]] の [F[path]]
を指定するものです。
;; [17] 理論上 [[SOAP]] は [[HTTP]] 以外でも使うことができますが、
[[RSS]] がそれを想定しているかどうかは疑問で、 [[HTTP]] 以外の場合に
[CODE[path]] [[属性]]に何を指定するのかはよくわかりません。
[22] この[[属性]]は必須です [SRC@en[[[RSS Best Practices Profile]]]]。
[18] 現在も [[RSS]] の仕様書には含まれていますが、
もはや誰も使っておらず、実質的に[[廃止]]状態にあります。