[1] [DFN[[CODE(HTTP)@en[[[Refresh:]]]]]] は、指定した[[秒]]数が経過した後に
[[navigate]] を開始するべきことを示す [[HTTPヘッダー]]です。
[DFN[[CODE(HTML)@en[<[[meta]] [[http-equiv]]=Refresh>]]]] は、
同じく [[HTML]] [[プラグマ指令]]です。

* 仕様書

[REFS[
- [85] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#attr-meta-http-equiv-refresh>
]REFS]

* 構文

- [10] Refresh               = "Refresh" [FWS] ":" [FWS] refresh-content

[2] HTML 4.0 には例示 (>>8) がある (4.01 にはない) 
けど、一般に使われているパラメーター型 (>>12; 例: >>3)
ではなくて読点区切型 (>>13; 例: >>5) になってる。

- [11] refresh-content       = refresh-param-content / refresh-comma-content
- [12] refresh-param-content = refresh-second [[FWS] ";" [FWS] "URL=" value]]]
- [13] refresh-comma-content = refresh-second [FWS] "," [FWS] refresh-uri

[9] >>12 のようにパラメーターの属性名は [[URL]]
になっていて、実際中身が URL でない [[URI]]
である例は見たことが無いけど、 URL でない URI 
に対応している実装は、あえて URL に限定することなく、どんな
URI でも受け付けるのが良いと考えられる。

- [14] refresh-second        = 1*DIGIT
- [15] refresh-uri           = absoluteURI / relativeURI

[17] [VAR(ABNF)[refresh-second]] (>>14) 秒''後''に
(一度だけ) 指定 URL または自 URI を読む (そしてそれに移動する)。
([VAR(ABNF)[refresh-second]] 秒''毎''に URI
を読むわけでは'''ない'''。)

[18] [VAR(ABNF)[refresh-second]] が "0" の場合、実質的に
(標準的な) [[HTTP]] の redirect と同じになる。
でも [[Netscape]] の説明文 (>>9) はこんなことも言ってるぞ。

> a "Refresh" header can be returned as part of any HTTP response, 
including a redirection. So a single HTTP response can say 
"go get this URL now, and then go get this other URL in 10 seconds".
> [INS[("Refresh" 頭は redirect を含む任意の HTTP 応答の一部として返すことが出来ます。ですから単一の HTTP 応答で「この URL に今行き、それからこの別の URL に10秒後に行くように。」と言うことが出来ます。)]]

> This means you can have a continuous random URL generator! Have a
normal random URL generator (such as ''URouLette'' 
<http://kuhttp.cc.ukans.edu/cwis/organizations/kucia/uroulette/uroulette.html>)
that returns as part of its redirection response a "Refresh"
directive that causes the browser to go get another random URL
from the random URL generator 
in 18 seconds. 
> [INS[(これは継続無作為 URL 生成器を作れることを意味します! 普通の無作為 URL (例えば ''[RUBY[URouLette] [ルーレット] ]'') は "Refresh" 指示を redirect 応答の一部として返し、ブラウザーは他の無作為な URL を18秒後に無作為 URL 生成器から得ることになります。)'']]'']]

[19] [[WAI]] とか [[HTML4]] 
は[[アクセス性]]の観点から使用しないように薦めている。
(確かに、 >>18 の Netscape 
の言ってる例は面白いけど、遊び以外でやられたらたまらんわな。)

- [16] value                 = http-token / quoted-string / non-token

[20] [VAR(ABNF)[value]] (>>16)
の部分は、他の頭欄の作法からすると [VAR(ABNF)[http-token]]
以外の文字は [[quoted-string]] にしないといけないはず。

[21] この頭欄は [[HTML]] の [[META要素]] で使われる (例: >>6)
事が多い。 HTTP で見かけることはあまりない。 (皆無ではない。)
HTTP 頭欄なのに HTTP で使ってもらえないなんて不憫だね。

[22] META 要素の属性値で既に「"」で囲まれているので、その中で更に
(「"」で) 囲もうとする意識は無い。みっともないし。
そもそもその必要性に気付かないのだろうかね? ってことで、
主に CGI 出力 (Web chat の [[CGI]] script とか。) で、
[VAR(ABNF)[http-token]] 以外が生で出てきたりする (>>24)。

- [23] ○ <meta http-equiv="refresh" content="0;URL=&quot;foo.cgi?hoge=foo&amp;bar=aa&quot;">
- [24] × <meta http-equiv="refresh" content="0;URL=foo.cgi?hoge=foo&bar=aa">

※ (>>24) 「=」が URL に含まれるので quoted-string にするべき。
それから「&」は「&amp;」でないと HTML として異常。

[25] そもそも URI は(絶対だと)「:」を含むので http-token 
にはならないことも多いじゃないか。

- [26] non-token = absoluteURI / relativeURI  ;; 救済措置

[27] Netscape 社の説明文によると絶対 URL のみで相対 URL
は使ってはいけない。けど、現実には結構使われている。

[28] [[fragment]] は要らないでしょう。多分。
あってもそこに飛ぶのはあんまり好ましくないような...
(それを言うなら Refresh: 欄自体あっても飛ぶのは宜しくないなあ。)

[29] >>28 なんで? 
利用者にとってはちょっとあれだけど、一定時間後に下のほうに飛ぶとかあってもよさそう。

[30] 属性名が「URL」だから、URN とかは駄目なのかなあ...

[31] >>30 See >>9

- [32] non-token /= 1*octet  ;; 人にやさしく・・にも程がある。

[33] CGI の出力で、例えば Web chat CGI script で名前とかが
[[URI符号化]]されてなかったりすることもままある。
それだと URI としてすら正しくない。
そんなのまで救済 (>>32) してあげる必要があるのかどうか。
- [56] 値を [SAMP[URL=foo.html]] のように (秒なしで) 指定している文書があるようです。 [[MacIE]] 4.5 にはこの時 URL 指定を無視して''当該文書''を即座に読み込み直す不具合があるそうです。 (''Internet Explorer 4.5(Mac版)'' <http://members.jcom.home.ne.jp/pctips/ua/IE45Mac.html>)
- [66] >>2 HTML 4.01 では不適切だとして削除されたそうです。変更履歴参照。
[[#comment]]


** UA の実装

[40] [[Opera]] (6.05 で実験) は、 [CODE["]] で囲まれていると、 [CODE["]]
も [[URI]] の一部 (すなわち、 URI 符号化されていない不適切な相対 URI)
とみなして、そこに飛ぼうとしますから、 (ふつう) 404 となります。

[41] (>>40) ですから [CODE["]] をはずせばよいのですが、この時 URI に [CODE[;]]
が含まれていると、そこを [CODE[url] パラメーター (>>12)]]
の終わりとみなしてしまいます。対処法はその URI の性質に応じて [CODE[&]]
に置き換えるなり URI 符号化するなりするしかありません。

[42] [[NetscapeNavigator]] 2.01 は、 >>41 と同様に [CODE[;]]
があると問題が起こります。 (>>40 の [CODE["]] は問題ありません。)

[43] [[WinIE]] 3.02, [[WinIE]] 5.5, [[Mozilla]]
などでは今のところ問題は確認されていません。

[44] [[HTML]] の meta 要素と HTTP の頭欄の一方だけにしか対応していない
[[UA]] はまだ見つかっていません。

- [45] NN2.01 は、タイミング? により Refresh: 欄を指定しても飛んでくれないことがありました。 HTML に meta 要素でも同じ内容を指定すればちゃんと飛んでくれましたが、必ずこれで直るかはわかりません。
- [46] >>27 NN2.01 では相対 URI でも動きました。
- [47] >>28 <somewhere#fragment> に飛ばすのは NN2.01 を含めていろんなブラウザは対応していますね。
- [48] >>42 [[NC]]4 PR4 でも同様の問題が確認できました。
- [49] ''[[Amaya]] 7.0'': 未対応。Wish list には載ってましたが・・・
- [50] ''Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)'': 対応。>>40 問題がありました。 >>41 問題はありません。
- [51] ''WinIE 6.0'': 対応。WinIE5 もそうですが、 [CODE[0]] にしても表示されてから飛び始めるまでにちょっと間があります。 (Moz ならすぐに飛び始めるのに。) IE はレンダリングその他全て完了した後に処理を始めるんでしょうか? (Moz もそうだと思うんだけどなあ。) (単に IE がのろいだけとか?)
- [52] ''WinIE6'': 対応。「セキュリティ ゾーン」の設定で無効に出来ます。
- [55] ''MacIE 4.5'': 対応。変な不具合あり (>>56)
- [67] ''NC 4.01'': 対応。[SAMP(HTTP)[url='foo']] ([CODE[']] quote) でも動いてしまいました。っていうかいままでうっかり間違って [CODE[']] で quote してました。 (ってことは最新の [[Mozilla]] でも動くのか?)
- [68] ''WinIE 3.01'': 対応。>>67 のように書くと、単引用符で始まる相対 URI として扱います。 (正しい動作)
- [70] ''emacs-w3m'': 対応。>>40 emacs-w3m にもその問題がありました [emacs-w3m:06562] が、修正されました [emacs-w3m:06656]。 修正のついでに [CODE[']] で引用してもよいことにされたらしいですが、気持ち悪いなあ。 ([CODE(ABNF)[[[value]]]] として解釈するなら、 [CODE[']] は [CODE(ABNF)[[[token]]]] の一部と解釈するのが正しい。)
- [72] ''[[Lynx]]'': 対応。1996年8月2日の版で [[URI]] をレンダリングするようになったそうです。
[[#form:'%text(id=>ua,label=>"[[UA]]"); %check(label=>対応している,default,id=>support); %text(id=>condition,label=>詳細,size=>10); %submit(label=>"追加");':'-[%index;] \'\'%text(source=>ua);\'\': %iif(source=>support,true=>対応。,false=>未対応。);%text(source=>condition);':'%require(ua);']]

** [CODE(HTTP)@en[url]] 引数の引用符

[405] テスト ([[HTML]]): [CITE[Index of /~wakaba/-temp/test/html/meta/http-equiv/refresh]] ([TIME[2009-01-05 22:29:25 +09:00]] 版) <http://suika.fam.cx/~wakaba/-temp/test/html/meta/http-equiv/refresh/>
の squote、dquote

[406] ([[HTML]]) [[Firefox]] 3.0.5、[[Opera]] 9.61、[[Chrome]] 1.0.154.36、
[[WinIE7]] のいずれも、 [CODE(HTML example)@en[url="double-quoted"]] と
[CODE(HTML example)@en[url='single-quoted']] の両方に対応していました。

[408] テスト ([[HTTP]]): [CITE[Index of /~wakaba/-temp/test/http/refresh]] ([TIME[2009-01-05 22:54:49 +09:00]] 版) <http://suika.fam.cx/~wakaba/-temp/test/http/refresh/>

[409] ([[HTTP]]) [[Firefox]] 3.0.5、[[Safari]] 3.2.1、
[[WinIE7]] のいずれも、 [CODE(HTTP example)@en[url="double-quoted"]] と
[CODE(HTTP example)@en[url='single-quoted']] の両方に対応していました。
[[Opera]] 9.61 は [CODE(HTTP example)@en[url="double-quoted"]] に対応していましたが、
[CODE(HTTP example)@en[url='single-quoted']] には対応していません
([CODE(URI)@en['single-quoted']] という [[URL]] とみなします)。

[410] [CITE[Bug 6464 – Support meta refresh with quotes]] ([TIME[2009-01-26 10:42:13 +09:00]] 版) <http://www.w3.org/Bugs/Public/show_bug.cgi?id=6464>

* 文脈

[97] しばしば、[[サーバー]]側での [[HTTPリダイレクト]]を設定するのが困難な場合の代替として使われます。

[98] 何らかの [[Webページ]]の表示と[[ダウンロード]]を同時に実行したいときに使われることもあります。

* 飛び先のプロトコルに関して

[34] [[Web]] [[chat]] の [[CGI]] script などで、飛び先が
[[HTTP]] の ''304 Not Modified'' 
応答を返すように仕向けることがあるみたいです。

これを受け取ったら refresh 
元のの表示を続けるのはいいとして、また指定秒数待って飛ぶのが適切かどうかはわかりません。

[35] ''205 No Content'' も考慮する必要がありますね。

* 処理

[86] [[構文解析器]]または [[DOM]] 操作により [CODE(HTTP)@en[[[Refresh]]]]
の [CODE(HTMLe)@en[[[meta]]]] [[要素]]が[[文書に挿入]]された場合、
[CODE(HTMLa)@en[[[content]]]] [[属性値]]の[[構文解析]]を行います。

[108] [VAR[要素]]が[[文書に挿入]]された時、次のようにしなければ[MUST[なりません]]
[SRC[>>85]]。

[FIG(steps)[
= [153] [VAR[入力]]を、[VAR[要素]]の [CODE(HTMLa)@en[content][<meta content>]]
[[属性値]]に設定します。
= [154] [VAR[入力]]が [CODE[null]] または[[空文字列]]の場合、
== [155] ここで停止します。
= [152] [[共有宣言的更新手順群]]を実行します。
[FIG(list members)[
: [VAR[文書]] : [VAR[要素]]の[F[節点文書]]
: [VAR[入力]] : [VAR[入力]]
: [VAR[メタ要素]] : [[真]]
]FIG]
]FIG]

[151] [DFN[[RUBYB[共有宣言的更新手順群]@en[shared declarative refresh steps]]]]は、
[VAR[文書]]、[VAR[入力]]、[VAR[メタ要素]]について、次のようにします [SRC[>>85]]。

[FIG(steps)[
= [116] [VAR[文書]]の[F[これから宣言的に更新する]]フラグが[[真]]の場合、
== [110] ここで停止します。
= [124] [VAR[時間]]と [VAR[URL]] を、
[VAR[文書]]と[VAR[入力]]を処理 (>>125) した結果に設定します。
= [123] [VAR[URL]] が[[失敗]]なら、
== [126] ここで停止します。
= [111] [VAR[文書]]の[F[これから宣言的に更新する]]フラグを、[[真]]に設定します。
= [127] 次のいずれか1つ[[以上]]を実行します。
=- 自動 [[navigate]] (>>92)
=- 手動 [[navigate]] の[[利用者インターフェイス]]を提示 (>>93)
=- 何もしない (>>94)
]FIG]

;; [156] この処理は、 [CODE(HTMLe)@en[meta]] [[要素]]が[[文書に挿入]]された場合の他に、
[[navigate]] において [CODE(HTTP)@en[Refresh:]] [[ヘッダー][HTTPヘッダー]]が指定されていた場合にも、実行されます。

[112] [[文書]]は、
[DFN[[F[[RUBYB[これから宣言的に更新する]@en[will declaratively refresh]]]]]]フラグを持ちます。
初期値は[[偽]]です。 [SRC[[CITE[HTML Standard]]]]


[125] [VAR[文書]]と[VAR[入力]]の処理は、次のようにしなければ[MUST[なりません]] [SRC[>>85]]。
[FIG(steps)[
= [117] [VAR[入力]]の先頭から、[[間隔文字]]を除去します。
= [118] [VAR[数字列]]を、[VAR[入力]]の先頭の [[ASCII数字]]列とし、それを[VAR[入力]]から除去します。
= [120] [VAR[数字列]]が[[空文字列]]なら、
== [121] ここで停止します。
= [119] [VAR[時間]]を、[VAR[数字列]]に[[非負整数を構文解析する規則]]を適用した結果に設定します。
= [122] [VAR[入力]]の先頭から、 [CODE[.]] と [[ASCII数字]]をすべて除去します。

@@
]FIG]

-*-*-

[92] [[利用者エージェント]]は、指定時間経過後に [[navigate]] することができます。

[130] これが最も一般的で、[[著者]]が想定する実装方法です。

[136] 次のようにしなければ[MUST[なりません]]。
[FIG(steps)[
= [131] [VAR[利用者による停止]]フラグを、[[偽]]に設定します。
= [137] [VAR[[DFN[[RUBYB[更新の期限が到来]@en[refresh has come due]]]]]]を、[VAR[時間]][[秒]] 
([[利用者]]および[[利用者エージェント]]の都合により調整可能。) 待つ[[タイマー]]に設定します。
[SRC[>>85]]
= [138] [VAR[文書]]の [F[completely loaded]] が[[真]]なら、
== [139] [VAR[更新の期限が到来]]の計測を開始します。
= [140] それ以外なら、
== [141] [VAR[文書]]の [F[[[completely loaded]] から起算する[[タイマー]]群]]に、
[VAR[更新の期限が到来]]を追加します。
]FIG]

;; [113] つまり、[CODE[meta]] の[[挿入][文書に挿入]]と[[completely loaded]]の遅い方から起算して[VAR[時間]][[秒]]待ちます。
[CODE[Refresh:]] [[ヘッダー]]の場合には、[[completely loaded]]から起算します。

[88] 待つ時間は[[利用者]]や[[利用者エージェント]]による調整が認められています。
[[仕様書]]にはその意図は明記されていませんが、[[利用者]]が視認できない速さで
[[navigate]] が実行されることを[[利用者]]が望まない時にこれを緩和したり、
高頻度で [[navigate]] を繰り返す悪意ある [[Webページ]]に[[利用者]]が惑わされることを防いだり、
[[裏側][document.hidden]]で動作する[[Webページ]]の [[navigate]]
を遅延させて電力消費を抑えたりできるようにすることを企図していると思われます。

[87] [VAR[[[更新の期限が到来]]]]したら、
次のようにしなければ[MUST[なりません]] [SRC[>>85]]。
[FIG(steps)[
= [132] 
[FIG(list)[
- [134] [VAR[利用者による停止]]が[[偽]]
- [109] [VAR[メタ要素]]が[[真]]の場合、
-- [135] [VAR[文書]]の[F[活性砂箱化フラグ集合]]の 
[F[sandboxed automatic features browsing context flag]] が設定されてい''ない''
]FIG]
... をすべて満たす場合、
== [133] [[navigate]] します。
[FIG(list members)[
: [VAR[[[navigate]] する[[閲覧文脈]]]] : [VAR[文書]]の[F[閲覧文脈]]
: [VAR[新しい[[資源]]]] : [VAR[URL記録]]
: [VAR[[[置換有効]]]] : [[真]]
: [VAR[[[始点閲覧文脈]]]] : [VAR[文書]]の[F[閲覧文脈]]
]FIG]
]FIG]

[104] [[利用者エージェント]]は、[[利用者]]が[VAR[利用者による停止]]フラグを[[真]]に設定する手段を提供することが認められています
[SRC[>>85]]。一般的な [[Webブラウザー]]では、[[中止]]ボタンがこの機能を持っています。

[95] [[利用者エージェント]]は、[[タイマー]]の状態や[[リダイレクト]]先などを随時表示して構いません [SRC[>>85]]。
一般的な [[Webブラウザー]]ではそのような表示は見られませんが、便利そうではあります。

-*-*-

[93] [[利用者エージェント]]は、手動で [[navigate]]
することを選択できる[[利用者インターフェイス]]を提供することができます。

[91] その場合、[[利用者]]の指示により、次のようにしなければ[MUST[なりません]] [SRC[>>85]]。
[FIG(steps)[
= [128] [[navigate]] します。
[FIG(list members)[
: [VAR[[[navigate]] する[[閲覧文脈]]]] : [VAR[文書]]の[F[閲覧文脈]]
: [VAR[新しい[[資源]]]] : [VAR[URL記録]]
: [VAR[[[始点閲覧文脈]]]] : [VAR[文書]]の[F[閲覧文脈]]
]FIG]
]FIG]

[129] 現在の [[Webブラウザー]]ではそのような[[利用者インターフェイス]]の提示は一般的ではありませんが、
かつては[[テキストブラウザー]]などで [CODE(HTTP)@en[Refresh]] を通常の[[ハイパーリンク]]のような形で表示するものがありました。

-*-*-

[94] [[利用者エージェント]]は、何もしないことも認められています。

[96] 全く何もしないのは、 [[Web互換]]では無いかもしれません。
しかし [CODE(URI)@en[[[mailto:]]]] や [CODE(URI)@en[[[telnet:]]]]
への [[navigate]] などは無効にできた方が嬉しいかもしれません。

* 利用者インターフェイス

[105] [[アドレスバー]]も参照。

* 歴史

[416] [[リンク型]] [DFN[[CODE(HTML)@en[[[redirect]]]]]] は、 [[XHTML2]]
の第4次案で検討対象として挙げられていました。

「[CODE(HTMLa)@en[[[http-equiv]]]] の機能で [[XHTML2]] に欠けているもの」
とされているので、 [CODE(HTML)@en[[[<meta http-equiv=refresh>]]]]
の代替として検討されていたものと推測されます。

[REFS[
- [417] [CITE@en[- Module Definition Conventions]] ([TIME[2003-02-01 00:24:54 +09:00]] 版) <http://www.w3.org/TR/2003/WD-xhtml2-20030131/abstraction.html#s_abstraction_issue_2>
]REFS]

* 例

- [3] Refresh: 20; URL="http://suika.fam.cx/"
- [4] Refresh: 30
- [5] Refresh: 0,refreshed.html [INS[(使用するべきではない。)]]
- [6] <meta http-equiv="refresh" content="0;URL=hoge.html">


** 実利用例


[163] [CITE[DRUDGE REPORT 2021®]], [TIME[2025-11-23T02:50:36.000Z]], [TIME[2020-11-30T23:32:05.283Z]] <https://web.archive.org/web/20201130233007/http://drudgereport.com/>

>
[PRE[
<meta http-equiv="refresh" content="105">
]PRE]

[164] 
[CITE[IBM Corporation]], [TIME[2025-11-26T04:26:13.000Z]], [TIME[1996-12-20T01:12:00.600Z]] <https://web.archive.org/web/19961220011136/http://www.ibm.com/indext.html>

>
[PRE[
<meta http-equiv="PICS-Label" content="(PICS-1.0 " http: www.rsac.org ratingsv01.html" l gen true comment "rsaci north america server" by "epc@gemini.ibm.com" for "http: www.ibm.com " on "1996.04.04t08:15-0500" exp "1997.07.01t08:15-0500" r (n 0 s 0 v 0 l 0))">
<meta http-equiv="REFRESH" content="3600">
]PRE]



* See also

- [7] <http://www.netscape.com/assist/net_sites/pushpull.html>
- [8] <http://www.w3.org/TR/1998/REC-html40-19980424/struct/global.html#h-7.4.4.2>


* メモ

- [36] 飛び先が自分自身だと無限 loop になる危険性がありますが、 Web chat のように意図的にそうしている場合もありますからどうしようもないですね。 [CODE[Refresh: 0]] が数回続いたら中断、とかがいいんでしょうか。
- [37] [[WinIE]] は [CODE[Refresh: 0]] で飛んだら履歴 (「戻る」ボタンのメニュー) から飛び元の頁を消しますね。 (WinIE 5.0 くらいからだったっけ?)
- [38] WinIE 3.0 が HTTP 頭の [CODE[Refresh:]] 欄に対応しているんを確認しました
- [53] ''Another HTML-lint : Explanation'' <http://openlab.ring.gr.jp/k16/htmllint/explain.html#refresh-link>
- [54] [CODE[Refresh:]] に対応していない UA や設定で切られている場合を考慮して、本体 ([[HTML]] など) でも[[ハイパーリンク]] ([[a]] 要素など) を用意しておくのが望ましいでしょう。
- [57] >>1 [[応答頭欄]]よりも[[実体頭欄]]かと思ったけど、 Netscape は応答頭欄だとしていますね。どっちがいいかわからなくなってきた...
- [58] >>57 実際の使い方を考えれば、「移転しますた」とかは、頁の内容の一部に近いメタ情報ということで、実体頭欄に分類できると思われ。一方 Netscape の目論見では server push もどきなんだから、プロトコル要素 (→応答頭欄) のような気もするな。
- [59] [[w3m]] や [[Lynx]] では、 [[a]] 要素のような[[ハイパーリンク]]として文書の最初に表示します。 w3m の場合は更に自動で飛ぶことも出来ます。
- [60] >>59 0 秒後とかならともかく、10秒後とかに、予告無く移動が始まると驚かされますから、他の UA であっても、画面に表示する内容に Refresh: の情報を加えて欲しいですよねえ。
- [61] [[ダウンロード]]の頁で、リンク先がダウンロードする資源そのものではなく、 HTML でその [CODE(HTTP)[Refresh]] が当該資源になっていることが、特に海外のサイトでしばしばあります。何を狙っているのか知りませんが、何か異様な気がしてすきになれません。
- [62] >>61 の「ダウンロード画面が出る」例だけではなくて、例えば大抵メイル作成画面が出るように設定されている [[mailto:]] [[URI]] などが指定されていると利用者は面食らうでしょう。
- [63] >>62 特に秒数が大きいと忘れたころ (本文読んでる途中とか。) に突然変化が起こったり。一般に秒数には制限があったほうがいいかも。
- [64] >>61 加えて、 URI を使って致命的な動作が可能な場合 (独自拡張とか。例: [[X-Becky-*:]>>2]) は非常に危険です。そのような機能は実行されないように制限する必要があるでしょう。
- [65] >>63 現在の多くの実装では [CODE(HTTP)[Refresh:]] 指定の存在を即座に示す UI が無いのももんだいでしょう。 [[w3m]] などだと [CODE(HTTP)[Refresh:]] を頁の上のほうにリンクとしてレンダリングします。
- [69] 無料サービス系 Web サイトとかで、 [CODE(HTTP)[[[404]]]] などのエラー時の出力に [CODE(HTTP)[Refresh]] で、エラー報告を数秒した後にそのサービスの[[トップ頁]]に飛ばすようなのがよくあります。これは bad practice だと思います。 URI を手入力して typo してしまって、直そうと思ったら次の URI に飛んでしまうとか。 (ブラウザの界面の実装の問題ではありますが。) 

[71]
鯖移転による URI 変更の告知などは、 [CODE(HTTP)[Refresh]] では''なく''、
[CODE(HTTP)[[[301]]]] + [CODE(HTTP)[[[Retry-After]]]] を使いましょう。
([[名無しさん]])

[73]
[CITE[netscape4.xでの動作]] <http://www.parkcity.ne.jp/~chaichan/qanda/qa6139.htm>

> METAタグよりも前にjavascriptを記述すると、画面遷移してくれないようでした。

([[名無しさん]] [sage])

[74]
[CODE(HTTP)@en[[[Refresh]]]]とは関係ありませんが、最近の[[Webブラウザ]]、特に[[タブ・ブラウザ]]には特定時間毎の自動[[再読込]]機能がついているものが多いようです。
([[名無しさん]] [sage] [WEAK[2006-02-06 14:07:50 +00:00]])

[75]
[CITE[Bug 83265 &#8211; UAAG: Add a way to disable HTTP-EQUIV=refresh (block automatic meta redirection, lock on current page)]] ([CODE[2007-02-09 08:28:26 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=83265>
([[名無しさん]])

[76]
[CITE[A blog? with Σαιτω - Kestrel - auto-refresh]] ([TIME[2007-07-21 20:19:47 +09:00]] 版) <http://d.hatena.ne.jp/saiton/20070718/1184716567>

[407] 念のため [CODE(HTML)@en[[[name]]=[[refresh]]]] として確認してみましたが、
どの [[Webブラウザ]]もちゃんと無視しました。


[411] [CITE@ja[携帯アフィリエイトバイブル -携帯で稼ぐ- 携帯・PC振分け(PC拒否)方法<初心者版>]]
([TIME[2009-12-31 19:43:01 +09:00]] 版)
<http://upup.blog3.fc2.com/blog-entry-184.html>

[412] [CITE@en-US[Techniques for WCAG 2.0]]
( ([TIME[2012-01-04 03:18:29 +09:00]] 版))
<http://www.w3.org/TR/2012/NOTE-WCAG20-TECHS-20120103/complete.html#F58-description>

[413] [CITE[IRC logs: freenode / #whatwg / 20120724]]
( ([TIME[2012-07-25 21:32:07 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120724#l-885>

[414] [CITE@en[Web Applications 1.0 r7697     Match reality]]
( ([TIME[2013-02-06 09:40:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7696&to=7697>

[415] [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>

[418] [CITE@en[The Performance Impact of META REFRESH - IEInternals - Site Home - MSDN Blogs]]
( ([TIME[2014-12-11 17:52:21 +09:00]] 版))
<http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/meta-refresh-causes-additional-http-requests.aspx>

[FIG(quote)[
[FIGCAPTION[
[39] [CITE[An Exploration of Dynamic Documents]]
([TIME[2015-01-24 22:04:43 +09:00]] 版)
<http://web.archive.org/web/19970614044340/http://home.netscape.com/assist/net_sites/pushpull.html>
]FIGCAPTION]

> Refresh

]FIG]


[77] [CITE@en[Refresh HTTP Header - otsukare]]
([TIME[2015-03-26 16:19:36 +09:00]] 版)
<http://www.otsukare.info/2015/03/26/refresh-http-header>

[78] [CITE@en[Add "metarefresh" context. Fixes https://www.w3.org/Bugs/Public/show_bug... · whatwg/fetch@be254da]]
([TIME[2015-03-29 17:00:19 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/be254dafad562943edca3541517fd8018f14f75d>

[79] [CITE@en[Bug 28361 – Ambiguity in the context value for content loaded through <meta http-equiv=refresh> in a frame/iframe]]
([TIME[2015-03-31 11:20:19 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28361>

[FIG(quote)[
[FIGCAPTION[
[80] [CITE@en[draft-ietf-http-v11-spec-00 - Hypertext Transfer Protocol -- HTTP/1.1]]
([TIME[2015-03-24 02:49:04 +09:00]] 版)
<https://tools.ietf.org/html/draft-ietf-http-v11-spec-00#section-10.35>
]FIGCAPTION]

> 10.35  Refresh
>    TBS

]FIG]


[FIG(quote)[
[FIGCAPTION[
[81] [CITE@en[Re: HTTP/1.1 Refresh header field comments]]
([[Roy T. Fielding]] 著, [TIME[1996-06-30 02:41:55 +09:00]] 版)
<https://lists.w3.org/Archives/Public/ietf-http-wg-old/1996MayAug/0594.html>
]FIGCAPTION]

> Refresh is no longer in the HTTP/1.1 document -- it has been deferred to
> HTTP/1.2 (or later).

]FIG]


[82] [CITE[An Exploration of Dynamic Documents]]
([TIME[2015-03-31 13:08:32 +09:00]] 版)
<http://web.archive.org/web/20020802170847/http://wp.netscape.com/assist/net_sites/pushpull.html>

[83] [CITE[Part2 - browsersec - Browser Security Handbook, part 2 - Browser Security Handbook - Google Project Hosting]]
([TIME[2015-03-31 16:43:18 +09:00]] 版)
<https://code.google.com/p/browsersec/wiki/Part2#Redirection_restrictions>

[84] [CITE@en[A client request is also indicated by "metarefresh". https://www.w3.org/... · whatwg/fetch@1c7171d]]
([TIME[2015-04-08 11:04:19 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/1c7171ddf4f41568b4c94ad307ce8609a603d91a>

[99] [CITE@en[28361 – Ambiguity in the context value for content loaded through <meta http-equiv=refresh> in a frame/iframe]]
([TIME[2015-09-03 16:20:16 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28361#c3>

[100] [CITE@en[Make the ';' optional in parsing meta refresh · whatwg/html@0a3dcdf]] ([TIME[2015-11-06 23:52:41 +09:00]] 版) <https://github.com/whatwg/html/commit/0a3dcdfa15d73334ba6c2a0a12c2f139d526da5a>

[101] [CITE@en[Better match Gecko in parsing of meta refresh · whatwg/html@94750dc]]
([TIME[2015-11-19 16:28:10 +09:00]] 版)
<https://github.com/whatwg/html/commit/94750dc5f3ffca7c6b54a79b86526a39b2cbff14>

[102] [CITE@en[URLs are parsed and produce records · whatwg/html@30bc255]]
([TIME[2016-02-14 22:54:40 +09:00]] 版)
<https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>

[103] [CITE@en[Fix #823: Don't strip characters from the URL in meta refresh · whatwg/html@543d8c1]]
([TIME[2016-03-08 18:30:15 +09:00]] 版)
<https://github.com/whatwg/html/commit/543d8c1598bf5bff0b8febc50dff11dcb42f8768>

[106] [CITE@en[28520 – Should the sandboxing flags be captured when setting up the refresh?]]
([TIME[2016-12-21 18:36:47 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28520>

[107] [CITE@en[Snapshot the node document used for <meta> refresh]]
([[domenic]]著, [TIME[2016-12-21 05:51:34 +09:00]])
<https://github.com/whatwg/html/commit/c4c68db6b09172f69ad51ffd96e868a4c1c87907>

[90] 「[CODE[Refresh]] は [[W3C]] が[[非推奨]]だといっている」という説がありますが、
どうやら [[W3C]] の[[作業部会]]が 2000年に [[Note]] として公開した後十数年間放置されていてメンテナンスされていない文書
[SRC[>>89]] が根拠とされているようです。

[89] [CITE@en[HTML Techniques for Web Content Accessibility Guidelines 1.0]] ([TIME[2000-11-07 08:07:21 +09:00]] 版) <https://www.w3.org/TR/2000/NOTE-WCAG10-HTML-TECHS-20001106/#meta-element>

[142] 誰かが駄目だと言っているから駄目だ、というのではなく、書かれている理由に納得できるかどうかで考えた方が建設的じゃないですかねぇ。
現在の [[HTML]] 仕様である [CITE[HTML Standard]] には使うなとは一言も書かれていないので、
後はその場その場で適切かどうかの判断と、宗教の問題でしょう。

[143] [CITE[Masato Kinugawa Security Blog: Googleのmetaリダイレクトに存在した問題]]
([TIME[2017-05-23 00:23:30 +09:00]])
<http://masatokinugawa.l0.cm/2012/03/googlemeta.html>

[144] [CITE[IE6/7の&lt;meta refresh&gtでは「;」で区切ってURLが複数指定できる問題 - 葉っぱ日記]]
([TIME[2017-04-24 01:35:09 +09:00]])
<https://d.hatena.ne.jp/hasegawayosuke/20120301/p1>

[145] [CITE@en[Allow decimals with no leading 0 as the time in refresh <meta>]]
([[domenic]]著, [TIME[2017-07-22 06:10:04 +09:00]])
<https://github.com/whatwg/html/commit/b8a34e302cdf0289f5403a02905629bb358519a6>

[146] [CITE@en[Meta refresh: time without leading zero; e.g. content=".9; url=foo" · Issue #2844 · whatwg/html]]
([TIME[2017-07-25 16:42:15 +09:00]])
<https://github.com/whatwg/html/issues/2844>

[147] [CITE@en[Allow ".9" as the time in refresh <meta> by domenic · Pull Request #2852 · whatwg/html]]
([TIME[2017-07-25 16:43:42 +09:00]])
<https://github.com/whatwg/html/pull/2852>

[148] [CITE@en[Ensure Refresh pragma always uses a URL record]]
([[annevk]]著, [TIME[2017-08-02 22:50:21 +09:00]])
<https://github.com/whatwg/html/commit/64ea79523e6565070c9f5af7397a8104d7841cf9>

[149] [CITE@en[Ensure Refresh pragma always uses a URL record by annevk · Pull Request #2865 · whatwg/html]]
([TIME[2017-08-28 23:52:50 +09:00]])
<https://github.com/whatwg/html/pull/2865>

[150] [CITE@en[Define the HTTP Refresh header]]
([[annevk]]著, [TIME[2017-08-10 01:57:03 +09:00]])
<https://github.com/whatwg/html/commit/7e9f6b6ffe2119f43f909f71773a25a7e8a61ca7>

[157] [CITE@en[28339 – <meta refresh> Specify Refresh HTTP header]]
([TIME[2017-08-29 00:16:41 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28339>

[158] [CITE@en[Documenting Refresh: HTTP header · Issue #138 · httpwg/http-extensions]]
([TIME[2017-08-29 00:20:49 +09:00]])
<https://github.com/httpwg/http-extensions/issues/138>

[159] [CITE@en[Refresh HTTP Header - otsukare]]
([TIME[2017-08-18 09:37:48 +09:00]])
<http://www.otsukare.info/2015/03/26/refresh-http-header>

[160] [CITE@en[28563 – As in most cases the http-equiv meta tags are equivalent to their corresponding HTTP header, would i '''['''...''']''']]
([TIME[2017-08-29 00:23:52 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28563>

[161] [CITE@en[Define the HTTP Refresh header by annevk · Pull Request #2892 · whatwg/html]]
([TIME[2017-08-29 00:26:10 +09:00]])
<https://github.com/whatwg/html/pull/2892>

[114] [CITE@en[Editorial: use "isomorphic decode" for Refresh header steps]]
([[irrationalRock]]著, [TIME[2018-08-23 22:25:10 +09:00]])
<https://github.com/whatwg/html/commit/bef6f783084cdb6e591f2a9d8c731180413e8ef2>

[115] [CITE@en[Changed Comment to Mention "isomorphic decode" by irrationalRock · Pull Request #3941 · whatwg/html]]
([TIME[2018-09-04 16:38:50 +09:00]])
<https://github.com/whatwg/html/pull/3941>

[162] [[CEA-2014-B]]