/
868.txt
629 lines (473 loc) · 29.2 KB
/
868.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
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
[1] [[HTTP]] や [[822]] ([[電子メイル]]・[[電子ニュース]])
の [DFN[[CODE(HTTP)[Link:]] [[実体頭欄]]]]は、
[[実体]]と他の[[資源]]との関係を表現します。
* 仕様書
[REFS[
- [833] [CITE@en[RFC 5988 - Web Linking]]
<http://tools.ietf.org/html/rfc5988#section-5>
]REFS]
* 意味
[838] [CODE(HTTP)@en[[[Link:]]]] 欄は、 [[Web Linking]] における[[リンク]]を [[HTTP]]
[[ヘッダー]]として[[直列化]]する方法です。 [SRC[>>833]]
[839] これは [[HTML]] の [CODE(HTMLe)@en[[[link]]]] [[要素]]や [[Atom]]
の[[フィード]]の [CODE(XMLe)@en[[[atom:link]]]] [[要素]]と意味的に同じ [SRC[>>833]]
とされています。
;; [840] しかし [[HTML]] も [[Atom]] も、それぞれの [CODE[link]] [[要素]]が同じ意味だとは一言も述べていません。
確かに類似していることは確かですし、歴史的に関連していることも疑いようがありませんが・・・。
(であるにも関わらず、 [[HTML]] と [[Atom]] と [[HTTP]] の[[リンク]]がすべて同じであり、
統一して規定しようとしているのが [[Web Linking]] の狙いですね・・・。)
* 構文
[856] [CODE(HTTP)@en[[[Link:]]]] 欄の構文は、まず[[対象URL]]を指定し、
その後に1つ以上の[[引数]]を指定する、という[[リンク]]を零個以上、
[CODE(HTTP)@en[[[,]]]] で区切って並べる形となっています。
* 文脈
[52] [CODE(HTTP)@en[[[Link:]]]] [[ヘッダー]]は様々な場面で [[HTTP応答]]の[[ヘッダー]]として使われています。
詳しくは各[[リンク型]]の項を参照してください。
* 対象 URL
[841] [CODE(HTTP)@en[[[Link:]]]] 欄は先頭に [[URL]] を [CODE(URI)[[[<]]]] と [CODE(URI)[[[>]]]]
で括って指定します。
;; [842] このように [[URL]] を記述する構文は珍しいです。 [[URI]] の [[RFC]] は歴史的に
[CODE(URI)[[[<]]]] と [CODE(URI)[[[>]]]] で括って [[URL]] を記述することを薦めてきましたが、
実際には一部の人達を除いて必ずしも普及しているとは言えません。[[プロトコル要素]]としても、
[[電子メール]]の [CODE(822)@en[[[List-*:]]]] や [[RDF]] の [[N3]] で使われているくらいで、
記号なし、あるいは [CODE[[["]]]] で括るのが多いです。そんな中で [CODE(HTTP)@en[[[Link:]]]]
欄の構文は異質です。
[843] これは [[Web Linking]] [[リンク]]の[[対象IRI]]を表すもので、必要なら [[RFC 3987]]
が定める [[IRI]] から [[URI]] への変換を行うことにより、 [[RFC 3986]] [[URI参照]]としたものです。
[SRC[>>833]]
;; [844] 一見、 [[RFC]] の規定は [[RFC 3986]] の [CODE(ABNF)[[[URI-Reference]]]]
の構文に従う以上のことを要求していないように思えますが [WEAK[([[IETF]] では一般的な曖昧な仕様書ですねw)]]、
[[対象IRI]]を [[URI]] に変換したものであると説明されていること、[[対象IRI]]
が [[RFC 3987]] [[IRI]] と説明されていることから、構文以外の [[RFC 3986]]/[[RFC 3987]]
の規定も適用されるものと一応解釈可能です。
[845] [[相対参照]]である場合にあっては、 [[RFC 3986]] に従って[[解決]]しなければ[['''なりません''']]。
[[メッセージ]]の[[内容]]からの[[基底IRI]]は適用されません。 [SRC[>>833]]
[846] というように [[RFC]] の規定は [[RFC 3986]] に丸投げしており、
一方で [[RFC 3986]] は一般的な説明しかしていないので、具体的にどのように[[解決]]されるべきなのか不明確ですが
[WEAK[([[IETF]] ではよくあること)]]、これは [[HTTP]] [[ヘッダー]]における通常の[[基底URL]]
に基づき[[解決]]されると解釈されるべきです。すなわち、 [CODE(HTTP)@en[[[Content-Location:]]]],
[CODE(HTTP)@en[[[Content-Base:]]]], [CODE(ABNF)[[[Request-URI]]]] の順で解決されることになります。
[WEAK[(ただし [CODE(HTTP)@en[[[Content-Location:]]]] は仕様上存在するだけで実際には使いものにならないとみなされており、 [CODE(HTTP)@en[[[Content-Base:]]]] は仕様上も廃止されていますwwww)]]
* 引数
[28] [CODE(HTTP)@en[[[Link:]]]] では次の[[引数]]が定義または利用されています。
[FIG(short list)[
- [CODE(HTTP)@en[[[anchor]]]]
- [CODE(HTTP)@en[[[datetime]]]]
- [CODE(HTTP)@en[[[depth]]]]
- [CODE(HTTP)@en[[[from]]]]
- [CODE(HTTP)@en[[[geo]]]]
- [CODE(HTTP)@en[[[href]]]]
- [CODE(HTTP)@en[[[license]]]]
- [CODE(HTTP)@en[[[rel]]]]
- [CODE(HTTP)@en[[[rev]]]]
- [CODE(HTTP)@en[[[media]]]]
- [CODE(HTTP)@en[[[name]]]]
- [CODE(HTTP)@en[[[pref]]]]
- [CODE(HTTP)@en[[[pri]]]]
- [CODE(HTTP)@en[[[title]]]] / [CODE(HTTP)@en[[[title*]]]]
- [CODE(HTTP)@en[[[type]]]]
- [CODE(HTTP)@en[[[until]]]]
]FIG]
[857] [[RFC 5988]] では、標準の[[引数]] ([CODE(HTTP)@en[[[anchor]]]],
[CODE(HTTP)@en[[[rel]]]], [CODE(HTTP)@en[[[rev]]]], [CODE(HTTP)@en[[[media]]]],
[CODE(HTTP)@en[[[title]]]], [CODE(HTTP)@en[[[title*]]]], [CODE(HTTP)@en[[[type]]]])
の構文を定義し、それ以外の[[引数]]の構文を [DFN[[CODE(ABNF)@en[[[link-extension]]]]]]
として定義しています。
;; [858] この種の [[RFC]] ではよくあることですが、 [CODE(ABNF)@en[[[link-extension]]]]
が標準の[[引数]]の構文を含んでいるので、構文の定義として実質的に意味をなさなくなっていますw
[859] [[RFC 5988]] の[[附属書]]によれば、 [[HTML]] や [[Atom]] の[[属性]]で >>857
に含まれていないものを [CODE(ABNF)@en[[[link-extension]]]] として表して良いことになっています。
[860] それ以外に [CODE(ABNF)@en[[[link-extension]]]] の使い方について規定はありません。
[[リンク関係型]]と違って[[IANA登録簿]]さえありません。
;; [861] [[RFC]] としては標準的な品質ですwwww
[863] [[CoRE Link Format]] は [CODE(HTTP)@en[[[Link:]]]] 欄の構文をベースに拡張した別仕様ですが、
次の[[引数]]を定義しています。これが [[HTTP]] でも使えるかについては言及されていません。
[FIG(short list)[
- [CODE(HTTP)@en[[[rt]]]]
- [CODE(HTTP)@en[[[if]]]]
- [CODE(HTTP)@en[[[sz]]]]
]FIG]
[864] 次の[[引数]]は [[CoRE Link Format]] で使うことを想定して定義されているようですが、
[[HTTP]] でも利用することを想定されているかどうかが定義上曖昧です。
[FIG(short list)[
- [CODE(HTTP)@en[[[ct]]]]
- [CODE(HTTP)@en[[[obs]]]]
]FIG]
* 文脈 URL
[847] [[Web Linking]] [[リンク]]における[[文脈IRI]]は、既定ではその[[要求]]された[[資源]]ですが、
[CODE(HTTP)@en[[[anchor]]]] [[引数]]により上書きすることもできます。
[848] 詳しくは [CODE(HTTP)@en[[[anchor]]]] の項を参照してください。
** HTTP Link: と HTML <link>
[36] [CODE(HTTP)[Link:]] 欄は、 [CODE(HTMLe)[[[link]]]]
要素と同じ効果を持ちます。複数の [CODE(HTTP)[Link:]]
欄は同じ順の [CODE(HTMLe)[link]] 要素と等価です。 [SRC[HTML 4, 14.6]]
[33] [[HTML]] [[UA]] は、 [CODE(HTTP)[Link:]] 欄の[[相対URI参照]]を
[CODE(HTMLe)[[[link]]]] と同じように扱うべきです。 [SRC[HTML 4, 12.4.1]]
[29] >>33
HTML 4 の基底 URI の章のメモには釈然としないものがあります。
HTTP の頭欄の内容の解釈に HTML の
[CODE(HTMLe)[[[base]]]] 要素が介入するというのは、ちょっと。
[CODE(HTTP)[Link:]] 欄は別に HTML 専用ではなくて、
他の[[媒体型]]の実体に対しても使えるはずなのに、
どうして HTML の時だけ特別扱いなのか。。。
(実体本体を見ずに頭部だけの処理をしたい時にも問題になります。)
鯖側としては、相対 URI 参照を使わないか、 [CODE(HTTP)[[[Content-Base]]:]]
欄または [CODE(HTTP)[[[Content-Location]]:]] 欄を必ず併用することにすれば安全ですね。
[[#comment]]
** 電子メイルでの使用
[39] [CODE(822)[Link:]] 欄は、 HTML
文書を[[電子メイル]]で送信した時にも機能するべきです。 [SRC[HTML 4, 14.6]]
[13]
HTML 4 仕様書だから HTML 文書に限定していますが、
一般に [CODE(822)[Link:]] 欄に対応した [[MUA]] はどんな[[媒体型]]の[[実体]]でも
[CODE(822)[Link:]] 欄を機能させて構わないでしょう。
[8] [[RFC 822]] メッセージは配送途中で頭欄の順序が入れ替えられてしまうことが
(本来は禁止されていますが、) あります。
これは[RUBYB[段階付け] [cascade]]に影響しますから、
[[著者]]は[Q[同じ頭欄の複数の実現値を併合するために頭連結を使用]<IW:HTML4:"present/styles.html#idx-HTTP-2">]
しても構いません。 [SRC[HTML 4, 14.6]]
何のことかと思ってしまいますが、 HTTP
では[CODE(math)[同じ名前の頭欄が複数個使える ⇔ 値をいくつも読点で区切って指定できる]]と規定されていますから、
これが [[822]] メッセージでも使えるという表明でしょう。
* 歴史
** [CODE(HTTP)@en[WWW-Link:]] ヘッダー
[27] [[HTTP92]] は [[HTML]] の[[メタ情報]][[要素]]を [[HTTPヘッダー]]とすることが提案されているとして、
[CODE(HTTP)@en[[[Link:]]]]/[DFN[[CODE(HTTP)@en[[[WWW-Link:]]]]]] を挙げていました。
[CODE(HTTP)[WWW-]] を付けるべきかどうかは議論があるとしていました。 [SRC[>>40]]
;; [43] [[RFC 4229]] は [[HTTP92]] を出典として使っていますが、なぜか
[CODE(HTTP)@en[[[WWW-Link:]]]] は[[IANA登録簿]]に登録していません。
[42] >>32, >>41 でも [CODE(HTTP)@en[[[WWW-Link:]]]] に言及されていました。
[REFS[
- [40] [CITE[Object Header lines in HTTP]] ([TIME[2002-04-11 00:31:17 +09:00]] 版) <http://www.w3.org/Protocols/HTTP/Object_Headers.html#link>
- [32] [CITE[HTTP: A protocol for networked information: LINK Method]]
( ([TIME[2012-02-19 23:38:36 +09:00]] 版))
<http://www.w3.org/Protocols/HTTP/Methods/Link.html>
- [41] ''Dealing with Large Documents'' <http://www.w3.org/MarkUp/HTMLPlus/htmlplus_55.html>
]REFS]
** I-D
[18] 昔の HTTP の仕様書では [CODE(HTTP)[Link:]] 欄には
[CODE(HTTP)[[[href]]]] 属性もあって、
リンク先 URI はこちらに指定したんだそうです。
[26] '''HTTP and HTML Metadata Linking Mechanism'''
I-D 1997-05, <urn:ietf:id:draft-daviel-metadata-link-00>。
<http://www.watersprings.org/pub/id/draft-daviel-metadata-link-00.txt>。
[22] ''An Entity Header for Linked Resources'' <http://www.w3.org/Protocols/9707-link-header.html>: [[I-D]] の draft。
最終修正1999年4月。
[24] >>22 には拡張 (未定義) 引数の例として
[CODE(HTTP)[[[type]]]] と [CODE(HTTP)[[[media]]]] が挙げられています。
[25] [[WebDAV]] は最終仕様では[[リンク]]は [[XML]] の要素で表現してますが、
当初は HTTP の [CODE(HTTP)[Link:]] 欄を使う予定だったようで、
仕様の検討が行われています。
''Thread index of w3c-dist-auth@w3.org mailing list'' <http://lists.w3.org/Archives/Public/w3c-dist-auth/threads.html#01482>
[48]
[CITE[Links for Web Authoring]] ([CODE[1996-12-09 12:09:32 +09:00]] 版) <http://www.w3.org/Authoring/WD-authlink.html>
[FIG(quote)[
[FIGCAPTION[
[7] RFC 1945 (HTTP/1.0) D.2.6 Link
]FIGCAPTION]
> The Link entity-header field provides a means for describing a
relationship between the entity and some other resource. An entity
may include multiple Link values. Links at the metainformation level
typically indicate relationships like hierarchical structure and
navigation paths.
[2] Link 実体頭欄は[[実体]]と何か他の資源との間の関係を記述する手段を提供するものです。実体は複数の
Link 値を持っていても構いません。メタ情報水準のリンクは典型的には階層構造や案内経路のような関係を示します。
]FIG]
[REFS[
- [23] [CITE@en[RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1]] ([TIME[2014-09-29 05:21:03 +09:00]] 版) <http://tools.ietf.org/html/rfc2068#section-19.6.2.4>
]REFS]
[FIG(quote)[
[FIGCAPTION[
[12] RFC 2068 (HTTP/1.1) 19.6.2.4 Link
]FIGCAPTION]
> The Link entity-header field provides a means for describing a
relationship between two resources, generally between the requested
resource and some other resource. An entity MAY include multiple Link
values. Links at the metainformation level typically indicate
relationships like hierarchical structure and navigation paths. The
Link field is semantically equivalent to the <LINK> element in
HTML.[5]
[4] Link 実体頭欄は[[実体]]と何か他の資源との間の関係を記述する手段を提供するものです。実体は複数の
Link 値を持っていても'''構いません'''。メタ情報水準のリンクは典型的には階層構造や案内経路のような関係を示します。
Link 欄は意味的には HTML の <LINK> 要素と同等です。
[10]
>
- Link = "Link" ":" #("<" URI ">" *( ";" link-param )
>
-
[PRE[
link-param = ( ( "rel" "=" relationship )
| ( "rev" "=" relationship )
| ( "title" "=" quoted-string )
| ( "anchor" "=" <"> URI <"> )
| ( link-extension ) )
]PRE]
>
- link-extension = token [ "=" ( token | quoted-string ) ]
>
- relationship = sgml-name | ( <"> sgml-name *( SP sgml-name) <"> )
>
- sgml-name = ALPHA *( ALPHA | DIGIT | "." | "-" )
[INS[
注意: RFC 2068 の [Q[URI]] とは、 [[URI参照]]
(URI と[[素片識別子]]の一方または両方) のことです。
]INS]
> Relationship values are case-insensitive and MAY be extended within
the constraints of the sgml-name syntax. The title parameter MAY be
used to label the destination of a link such that it can be used as
identification within a human-readable menu. The anchor parameter MAY
be used to indicate a source anchor other than the entire current
resource, such as a fragment of this resource or a third resource.
[5] 関係値は大文字・小文字を区別せず、 sgml-name 構文に従う範囲で拡張'''しても構いません'''。
title パラメーターは link 対象に札付けするのに使って'''構いません'''。これは人可読メニュー中で識別するのに使用出来ます。
[CODE(HTTP)[anchor]] パラメーターは、現在の資源全体でない、
当該資源の断片や第3の資源を始点アンカーとして示すのに使用しても'''構いません'''。
> Examples of usage include:
- Link: <http://www.cern.ch/TheBook/chapter2>; rel="Previous"
- Link: <mailto:timbl@w3.org>; rev="Made"; title="Tim Berners-Lee"
> The first example indicates that chapter2 is previous to this
resource in a logical navigation path. The second indicates that the
person responsible for making the resource available is identified by
the given e-mail address.
[6] 最初の例は第2章が論理案内経路中でこの資源の前であることを示します。
2つ目は資源を利用可能にした責任者が示された電子メイル・アドレスで識別されることを示します。
]FIG]
** RFC 2616 (HTTP/1.1)
[3] [[RFC 2616]] は、 [[RFC 2068]] には書いてあるけどあまり実装されていないから説明しないよん
[SRC[>>17]]、と言っています。
[REFS[
- [17] [CITE@en[RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1]] ([TIME[2014-09-07 04:14:53 +09:00]] 版) <http://tools.ietf.org/html/rfc2616#page-175>
]REFS]
** HTML4
[REFS[
- [30] [[HTML 4]]
-- [CSECTION@en[12.4.1 Resolving relative URIs]]
<http://www.w3.org/TR/html4/struct/links.html#h-12.4.1>
-- [CSECTION@en[14.6 Linking to style sheets with HTTP headers]]
<http://www.w3.org/TR/html4/present/styles.html#idx-HTTP-2>
]REFS]
[9] 引数値の引用符は、[[空白]]を含まない限り省略できます。
[SRC[HTML 4, 14.6]]
HTML 4 のこの規定は [[HTTP]] の規定に反します。
本来引数値の引用符が省略できるのは値が [CODE(ABNF)[[[token]]]]
であるときのみです。
大体、 [CODE(char)[;]] や [CODE(char)["]]
が値に含まれていたら困るとわかりそうなものですが。
[11] HTTP や電子メイルの頭で認められていない文字や[[関門]]を通過できなさそうな文字を参照するために
[Q[SGML 実体]<IW:HTML4:"present/styles.html#idx-HTTP-2">]を使っても構いません。
[SRC[HTML 4, 14.6]]
何の断りも無く [Q[SGML 実体]<IW:HTML4:"present/styles.html#idx-HTTP-2">]が使えると言われましても、
何が使えるのかわかりません。まさか任意の実体を参照できるわけではあるまいし。
おそらくは HTML 4 [[文字実体参照]]のことを指すのでしょう。
でも HTML 4 の文字実体参照はすべての[[文字]]に用意されているわけではありません。
どうせなら[[文字参照]]も認めてくれても良いのに。
もちろんそれ以前に、 HTTP のプロトコル要素の整合性という意味で、
他の頭欄では使えない [Q[SGML 実体]<IW:HTML4:"present/styles.html#idx-HTTP-2">]なるものが使えるというのは問題です。
** RFC 4229
[21] [[RFC 4229]] は [[IANA登録簿]]に [[RFC 2068]] を出典として登録しました [SRC[>>19]]。
状態は「[[標準]]」とされていました [SRC[>>19]]。
[REFS[
- [19] [CITE@en[RFC 4229 - HTTP Header Field Registrations]] ([TIME[2014-11-02 09:53:20 +09:00]] 版) <http://tools.ietf.org/html/rfc4229#section-2.1.62>
]REFS]
** 独立 RFC へ
[REFS[
- [825]
<http://tools.ietf.org/html/draft-nottingham-http-link-header>
- [46] [CITE@en[draft-nottingham-http-link-header-00 - Web Linking]]
([TIME[2006-07-08 03:53:38 +00:00]])
<http://tools.ietf.org/html/draft-nottingham-http-link-header-00>
- [837] [CITE@en[RFC 5988 - Web Linking]]
<http://tools.ietf.org/html/rfc5988>
]REFS]
[835] [[RFC 5988]] として2010年10月に発行されました。 [[RFC 5988]] は [[Web Linking]]
として「書式に依存しない」[[リンク]]の概念を定義し、その一表現形式として [[HTTP]]
の [CODE(HTTP)@en[[[Link:]]]] 欄を定義していました。
[836] [[RFC 5988]] は、 [[RFC 2616]] の削除の後に [CODE(HTTP)@en[[[Link:]]]]
欄の実装が現れたこと、その一方で削除によって状態が不明確になり、本来
[CODE(HTTP)@en[[[Link:]]]] 欄を使うべき用途で個別の独自の欄を定義して用いるケースが見られることを指摘しています。
[SRC[>>837 1.]]
[855] [[RFC 5988]] は [[IANA登録簿]]における [CODE(HTTP)@en[[[Link:]]]] 欄の出典となっています
[SRC[>>837 6.1.]]。
;; [862] 初期は [[URL雛形]]を使った [DFN[[CODE(HTTP)@en[[[Link-Template:]]]]]] 欄も提案されていました。 [SRC[>>46, >>15, >>16]]
[REFS[
- [15] [CITE[mnot’s Web log: Bringing Back the Link - With a Twist]] ([TIME[2007-02-17 07:20:15 +09:00]] 版) <http://www.mnot.net/blog/2006/06/22/link>
([[名無しさん]] [WEAK[2007-02-22 00:45:26 +00:00]])
- [16] [CITE@en[draft-nottingham-link-template-01 - The Link-Template HTTP Header Field]] ([TIME[2014-10-17 15:01:26 +09:00]] 版) <http://tools.ietf.org/html/draft-nottingham-link-template-01>
]REFS]
* 関連
[31] HTML 4 仕様書は、
[Q[[CODE(HTTP)[Link]] 頭を定義する版の HTTP では[INS[[VAR[〜]]]]]]
と前置きして [CODE(HTTP)[Link]] 欄を説明しています。 RFC 1945 や RFC 2068
の実装なら使えて RFC 2616 の実装では使えないような言い方ですが、
HTTP の版と頭欄の使用の可否は関係がありません。 RFC 2616
の実装が [CODE(HTTP)[Link]] を使うことに何ら問題はありません。
(版が問題となるのは、非互換な変更が導入された時だけです。
詳しくは [[RFC 2145]] を読んでください。)
[44]
HTTP 頭欄により暗示される [CODE(HTMLe)[link]] 要素や [CODE(HTMLe)[[[meta]]]]
要素は、 [CODE(HTMLe)[[[head]]]] 要素で明示されているものより前に出現したと定義します。
[SRC[HTML 4, 14.6]]
ところで、 [CODE(HTTP)[Link:]] 欄の説明で唐突に [CODE(HTMLe)[meta]]
要素型が登場するわけでありますが、一体何を意味しているのでしょう?
[51] [[CoRE]] は [CODE(HTTP)@en[[[Link:]]]] [[ヘッダー]]の構文を元に
[[UTF-8]] 化したり、[[引数]] ([[対象属性]]) を追加したりして拡張した構文
([[ヘッダー]]ではなく[[本体]]の書式) です。
;; [[CoRE]] を参照。
;; [53] [[UTF-8]] 化されているにも関わらず、 [[引数]]の [[RFC 5987]]
拡張構文 ([CODE(HTTP)@en[[[title*]]]]) もなぜか含まれています。
互換性のため、あるいは[[言語タグ]]の指定のためなのでしょうか。
* 実装
[20] [ABBR[[[LWP]]]] (というか [CODE(perl)[[[HTML::HeadParser]]]]) は
HTML 中に [CODE(HTMLe)[[[link]]]] 要素があると、 [CODE(HTMLa)[[[href]]]]
属性は所定の形式に変換して、残りの属性は全て ([CODE(HTTP)[;]] 区切りに直した上で)
そのまま引数としてつけていきます。
* 例
[34] HTTP Link: 欄の例 [SRC[HTML 4, 14.6、改]]
[PRE(HTTP)[
Link: <http://www.acme.example/corporate.css>; REL=stylesheet
]PRE]
[35] >>34 を HTML 4 で書いた例 [SRC[HTML 4, 14.6、改]]
[PRE(HTML)[
<LINK rel="stylesheet" href="http://www.acme.example/corporate.css">
]PRE]
[38] 複数のスタイル・シートを指定する例 [SRC[HTML 4, 14.6、改]]
[PRE(HTTP)[
Link: <compact.css>; rel="stylesheet"; title="compact"
Link: <bigprint.css>; rel="alternate stylesheet"; title="big print"
]PRE]
この例では、 [SAMP(URI)[compact.css]] が[[優先スタイル]]で、
[SAMP(URI)[bigprint.css]] が[[代替スタイル]]です。
[824]
[CITE@en[W3C mobileOK Scheme 1.0]] ([TIME[2009-06-24 01:35:08 +09:00]] 版) <http://www.w3.org/TR/2009/NOTE-mobileOK-20090625/#linkingClaims>
>
[PRE(HTTP bad example code)[
Link: <powder.xml>; rel="describedby" type="text/powder+xml";
]PRE]
構文的におかしいですw
[EG[
[851] 次の例は、[RUBYB[論理的なナビゲーション経路]@en[logical navigation path]]上で前に当たる
[[URL]] を表しています。 [SRC[>>833]]
[PRE(HTTP example code)[
Link: <http://example.com/TheBook/chapter2>; rel="previous";
title="previous chapter"
]PRE]
]EG]
[EG[
[852] 次の例 [SRC[>>833]] は、[[拡張関係型]] [CODE(URI)@en[http://example.net/foo]] の[[リンク]]です。
[[相対URL]]は当該[[資源]]の[[要求URL]]に対して[[解決]]されて解釈されます。
[PRE(HTTP example code)[
Link: </>; rel="http://example.net/foo"
]PRE]
]EG]
[EG[
[853] 次の例は [[RFC 2231]] [[符号化]]により [CODE(HTTP)@en[[[title*]]]] [[引数]]を使って
[[UTF-8]] [[文字列]]を言語情報付きで記述しています [SRC[>>833]]。また [CODE(HTTP)[[[,]]]]
による連結で、2つの[[リンク]]を1つの[[ヘッダー]]で表しています。
[PRE(HTTP example code)[
Link: </TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
]PRE]
]EG]
[EG[
[854] 次の例 [SRC[>>833]] は2つの[[リンク型]]の2つの[[リンク]]を1つの[[ヘッダー]]で表しています。
[PRE(HTTP example code)[
Link: <http://example.org/>;
rel="start http://example.net/relation/other"
]PRE]
;; 1つの[[リンク]]に2つの[[リンク型]]が指定されているのではなく、2つの[[リンク]]があると解釈されます。
]EG]
** メモ
[37] [CODE(HTTP)[Link:]] 欄は、
複数の文書群にまとめて同じスタイル・シートを指定したいようなときに特に有用です。
[SRC[HTML 4, 14.6]]
[14] 2002-10-20 (日) 07:00 ''[[>>10-11]]'':
使わないといけないのか否かはっきりしないと、 [CODE(char)[&]]
なんてのはよく使いそうな文字ですから、問題になります。
[45]
[[Google]]の調査によれば、[CODE(HTTP)@en[[[Link]]:]] 欄もいくらかは使われているらしいです。
;; [CITE@en[Google Code: Web Authoring Statistics: HTTP Headers]]
<http://code.google.com/webstats/2005-12/httpheaders.html>
([[名無しさん]] [sage] [WEAK[2006-02-07 03:41:51 +00:00]])
[47]
[CITE@en[Re: http-link-header in GRDDL]] ([[Harry Halpin]] 著, [CODE[2007-02-11 12:53:51 +09:00]] 版) <http://lists.w3.org/Archives/Public/ietf-http-wg/2007JanMar/0153.html>
([[名無しさん]] [WEAK[2007-02-18 09:29:00 +00:00]])
[49]
[CITE[LinkHeader - ESW Wiki]] ([CODE[2007-09-29 19:05:27 +09:00]] 版) <http://esw.w3.org/topic/LinkHeader>
([[名無しさん]])
[50]
[CITE@en[Content Transformation Guidelines 1.0]] ([TIME[2008-08-01 01:46:12 +09:00]] 版) <http://www.w3.org/TR/2008/WD-ct-guidelines-20080801/#d2e1267>
[823] [CITE@en[draft-roach-sip-http-subscribe-00 - A SIP Event Package for Subscribing to Changes to an HTTP Resource]] ([TIME[2008-12-10 18:35:00 +09:00]] 版) <http://tools.ietf.org/html/draft-roach-sip-http-subscribe-00>
[826] [CITE[IRC logs: freenode / #whatwg / 20091010]]
([TIME[2009-12-08 08:22:26 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091010>
[827] [CITE[IRC logs: freenode / #whatwg / 20091013]]
([TIME[2009-12-09 08:43:01 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091013#l-225>
[828] [CITE[IRC logs: freenode / #whatwg / 20100807]]
([TIME[2010-08-13 08:31:42 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100807#l-270>
[829] [CITE[IRC logs: freenode / #whatwg / 20101210]]
( ([TIME[2011-01-03 16:38:05 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20101210>
[830] [CITE[Bug 102907 – Link toolbar doesn't support HTTP links headers]]
( ([TIME[2011-01-03 16:42:39 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=102907>
[831] [CITE[An Entity Header for Linked Resources]]
( ([TIME[1999-04-01 07:22:44 +09:00]] 版))
<http://www.w3.org/Protocols/9707-link-header.html>
[832] [CITE@en[Web Applications 1.0 r5798 Remove the text that was trying to handwave the Link: header's non-existence, now that it exists formally again.]]
( ([TIME[2011-01-22 08:43:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5797&to=5798>
[834] [CITE@en[PROV-AQ: Provenance Access and Query]]
( ([TIME[2012-01-07 07:17:25 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-prov-aq-20120110/#resource-accessed-by-http>
[849] [CITE[IRC logs: freenode / #whatwg / 20120424]]
( ([TIME[2012-05-02 15:41:14 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120424#l-458>
[850] [CITE[587928 – Disable support for <meta http-equiv="Link">]]
( ([TIME[2012-05-02 17:15:43 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=587928>
[865] [CITE@en[Events | GitHub API]]
( ([TIME[2012-09-04 23:14:17 +09:00]] 版))
<http://developer.github.com/v3/events/>
[866] [CITE@en[748294 – remove support for Link HTTP header]]
( ([TIME[2013-06-22 09:23:28 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=748294>
[867] [CITE@en-US[Link prefetching FAQ | MDN]]
( ([TIME[2012-11-14 08:17:09 +09:00]] 版))
<https://developer.mozilla.org/en-US/docs/Link_prefetching_FAQ>
[868] [CITE@en[Re: Behavior of <meta> elements linking in stylesheets]]
( ([[Ian Hickson]] 著, [TIME[2004-04-11 04:56:28 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-style/2004Apr/0072.html>
[869] [CITE[IRC logs: freenode / #whatwg / 20130823]]
( ([TIME[2013-08-26 12:15:51 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130823#l-709>
[870] [CITE@en[3248 – HTTP headers are not passed on to main NGLayout code ''''''[''''''IMPORT'''''']'''''']]
( ([TIME[2013-08-29 23:51:08 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=3248>
[871] [CITE@en[Linked Data Platform 1.0]]
( ([TIME[2014-03-05 18:42:42 +09:00]] 版))
<http://www.w3.org/TR/2014/WD-ldp-20140311/#h5_ldpr-gen-linktypehdr>
[872] [CITE[Buzzword.org.uk Draft: jsonGRDDL]]
( ([TIME[2010-09-03 07:08:39 +09:00]] 版))
<http://buzzword.org.uk/2008/jsonGRDDL/spec#sec_syntax_headers>
[873] [CITE[Issue 58456 - chromium - Link HTTP header - An open-source project to help move the web forward. - Google Project Hosting]]
( ([TIME[2014-07-31 09:00:36 +09:00]] 版))
<https://code.google.com/p/chromium/issues/detail?id=58456>
[874] [CITE[Index of /tests/evil/acid/004]]
( ([TIME[2014-10-18 09:20:03 +09:00]] 版))
<http://hixie.ch/tests/evil/acid/004/>
[875] [CITE[ORE User Guide - Resource Map Discovery]]
( ([TIME[2008-10-18 04:19:46 +09:00]] 版))
<http://www.openarchives.org/ore/1.0/discovery#HTTPLinkHeader>
[876] [CITE[RFC Errata Report]]
( ([TIME[2014-12-03 17:38:22 +09:00]] 版))
<http://www.rfc-editor.org/errata_search.php?rfc=4229>
[877] [CITE@en[Collections - Mendeley Developer Portal]]
( ([TIME[2014-11-26 21:17:00 +09:00]] 版))
<http://dev.mendeley.com/reference/topics/pagination.html>
[878] [CITE@en-gb[GoCardless API Docs]]
( ([TIME[2014-12-17 20:02:10 +09:00]] 版))
<https://developer.gocardless.com/#pagination>