-
Notifications
You must be signed in to change notification settings - Fork 4
/
146.txt
267 lines (193 loc) · 12.8 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
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
* 仕様書
[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]
* 意味
[56] [[URL path]] の意味と構文は、 [[URL scheme]] ごとに異なります。
詳しくは各 [[URL scheme]] の項を参照。
[55] [[HTTP]] での利用については、[[HTTP(S) scheme]] を参照。
[58] [[URL設計]]も参照。
* 比較
[9] [[Path]] に関する[[比較演算]]として [[path一致]]があります。
[11] [[ディレクトリーの比較]]
[48] [[PathMatch]], [[PatternMatch]]
* プロトコル
[19]
[FIG(list middle)[
- [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]]の最初の[[文字列]]を返します。
= [52] それ以外で、 [VAR[URL]] の[F[パス][URL path]]が[[空]]なら、
== [53] [[空文字列]]を返します。
= [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[cannot-be-a-base-URL flag]]が設定されていれば、ここで停止します。
= [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]] の仕様書には含まれていますが、
もはや誰も使っておらず、実質的に[[廃止]]状態にあります。
[44] [CITE@en[Editorial: non-relative flag got renamed · whatwg/html@d360c27]]
([TIME[2016-03-31 12:37:54 +09:00]] 版)
<https://github.com/whatwg/html/commit/d360c27d44c52390441b5910d39e898160ec016d>
[45] [CITE@en[Merge effective script origin into origin · whatwg/html@8a843f2]]
([TIME[2016-03-31 18:09:32 +09:00]] 版)
<https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>
[46] [CITE@en[EE: Path matching fix (#167)]]
([[Sun77789]]著, [TIME[2016-12-13 18:18:49 +09:00]])
<https://github.com/w3c/webappsec-csp/commit/30d0b902eab1c8ade6f6cba50aed608a5ae090b4>
[47] [CITE@en[Editorial: clarify the "shorten a path" algorithm]]
([[domenic]]著, [TIME[2016-12-20 03:21:52 +09:00]])
<https://github.com/whatwg/url/commit/65dcfbc17248fa761904dff42e4bd1efcff3a30f>
[49] [CITE@en[Stop decoding all %2e's in paths]]
([[annevk]]著, [TIME[2016-10-28 20:46:47 +09:00]])
<https://github.com/whatwg/url/commit/fbff6834a8a03576261f777d0e0afea5c1bc5a09>
[50] [CITE@en[Change path parsing for non-special URLs]]
([[annevk]]著, [TIME[2017-01-31 19:41:51 +09:00]])
<https://github.com/whatwg/url/commit/b087fe2ab215caf656a94b067c9a69ae78f03c8f>
[51] [CITE@en[Align <a>/<area>/Location's pathname getter with the URL Standard]]
([[TRowbotham]]著, [TIME[2017-02-08 03:46:57 +09:00]])
<https://github.com/whatwg/html/commit/037e082d30b21271bd410fc2f45d2b4f0bcbce9d>
[54] [CITE@en[Editorial: use the Infra Standard for URL's path]]
([[annevk]]著, [TIME[2017-02-10 02:32:12 +09:00]])
<https://github.com/whatwg/url/commit/2f99502dc12b781f5bf6a062257ba031c7129c1e>
[57] [CITE@en[Single and double dot segments in paths cannot be represented – Premature decoding of %2e character sequences. · Issue #281 · whatwg/url]]
([TIME[2017-03-28 20:25:51 +09:00]])
<https://github.com/whatwg/url/issues/281>
[FIG(quote)[
[FIGCAPTION[
[59] [CITE@ja[記事を配信するディレクトリを変更する - はてなブログ ヘルプ]]
([TIME[2017-06-05 14:05:44 +09:00]])
<http://help.hatenablog.com/entry/import/directory>
]FIGCAPTION]
> 他のサービスやソフトウェアからブログを移転する際に、記事を配信するディレクトリを変更できます。
> 記事を配信するディレクトリとは、はてなブログの記事URL(例えばexample.hatenablog.com/entry/2016/09/01/000000)のうち、ドメイン名に続くentryの部分です。
]FIG]
[FIG(quote)[
[FIGCAPTION[
[60] [CITE@ja[はてなブログの記事URLのカスタマイズで入力できない文字 - すなばいじり]]
([TIME[2017-06-05 14:43:23 +09:00]])
<http://psn.hatenablog.jp/entry/2017/01/10/233001>
]FIGCAPTION]
> 記事のディレクトリを空欄で設定して、記事の「カスタムURL」の先頭に「entry/」を追加したURLにすると、記事が読めなくなってしまう。
]FIG]
[61] [CITE@ja[はてなブログで「記事(/entry/)」のディレクトリが変更できるようになった - すなばいじり]]
([TIME[2017-06-05 14:44:51 +09:00]])
<http://psn.hatenablog.jp/entry/2016/09/01/160001>
[FIG(quote)[
[FIGCAPTION[
[62] [CITE@ja[ブラウザのキャッシュを活用する | PageSpeed Insights | Google Developers]]
([TIME[2014-04-12 05:27:25 +09:00]])
<https://developers.google.com/speed/docs/insights/LeverageBrowserCaching?hl=ja#url->
]FIGCAPTION]
> たとえば、「my_stylesheet.css」というリソースがあるとします。このファイル名を「my_stylesheet_fingerprint.css」に変更できます。リソースが変更されると、フィンガープリントも変更されるため、URL も変わります。URL が変更されるとすぐに、ブラウザはリソースの再取得を強制されます。フィンガープリントを使用すると、頻繁に変更されるリソースでも、有効期限をそれより先の方の日付に設定できるようになります。
> フィンガープリントの一般的な方法として、ファイルのコンテンツのハッシュをコード化した 128 ビットの 16 進数が使用されます。
> もう 1 つの方法は、アプリケーションの新しいバージョンごとに新しいリリース ディレクトリを作成して、各バージョンのすべてのアセットをバージョン別のディレクトリに格納することです。
]FIG]
[FIG(quote)[
[FIGCAPTION[
[63] [CITE@ja[固定ページを作成できるようにしました(はてなブログPro) - はてなブログ開発ブログ]]
([TIME[2017-06-27 17:29:32 +09:00]])
<http://staff.hatenablog.com/entry/2017/06/27/152000>
]FIGCAPTION]
> ページを作成するには、まずその「URL」を指定します。URLは、はてなブログの通常の記事のカスタムURLと同じように指定できますが、記事の配信ディレクトリー(デフォルトではentry)を含まないパスを自由に作成できます。
> ※はてなブログのシステムで使用しているaboutやarchiveといったパス名の固定ページを作成することもできますが、表示する際にはシステムのパスが優先されます。
]FIG]
[64] [CITE@en[Navigation scope: Avoid using pathname field.]]
([[mgiuca]]著, [TIME[2017-07-26 16:16:41 +09:00]])
<https://github.com/w3c/manifest/commit/c5d899cf9b04e8166ffb1f1a7ea2cb8cf8f5d0ca>
[FIG(quote)[
[FIGCAPTION[
[65] [CITE@en[Markers | Maps JavaScript API | Google Developers]]
([TIME[2022-01-11T22:50:50.000Z]], [TIME[2022-01-12T07:06:58.988Z]])
<https://developers.google.com/maps/documentation/javascript/markers?hl=ja>
]FIGCAPTION]
> You can define a custom path using SVG path notation, or use one of the predefined paths in google.maps.SymbolPath.
]FIG]