出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

[1247] 【HTTP ヘッダーはすでにクライアントのブラウザに書き込まれています。】
投稿者:北岳さん 2001/12/12 12:59:49
(訂正では判りづらいので、全部書き換えます。)

【理屈】 
■aspは、サーバのメモリの中で(スクリプトを使って一時的に)作成した文字列を、中身はHTML文書と同じ形式で、クライアントに送り返します。
 
■次のスクリプトならエラーは出ません。
---------"/alias/1.asp"----------
<% if request.form("x")="A" then %>
<html><body>
<p>xの値は</p>
<p>Aです。</p>
</body></html>
<% elseif request.form("x")="B" then %>
<html><body>
<p>xの値は</p>
<p>Bです。</p></body></html>
<% else %>
response.redirect "/alias/9.asp"
<% end if %>
-------------------
 
この場合、サーバは、
request.form("x")が"A"なら、HTML文書と同じ形式の文字列
『<html><body><p>xの値は</p><p>Aです。</p></body></html>』
だけを、クライアントに送ります。
 
request.form("x")が"B"なら、HTML文書と同じ形式の文字列
『<html><body><p>xの値は</p><p>Bです。</p></body></html>』
だけを、クライアントに送ります。
 
request.form("x")が"A"でも"B"でもなければ、
"/alias/9.asp"
に移動します。
 
 
■次のスクリプトは、response.redirectを実行しようとすると、エラーが出ます。
---------"/alias/2.asp"----------
<html><body>
<p>xの値は</p>
<% if request.form("x")="A" then %>
<p>Aです。</p>
</body></html>
<% elseif request.form("x")="B" then %>
<p>Bです。</p>
</body></html>
<% else %>
response.redirect "/alias/9.asp"
<% end if %>
-------------------
 
この場合、サーバがクライアントに向けて送り出す文字列は、まず
 『<html><body><p>xの値は</p>』
までを確定します。
 
次にrequest.form("x")が"A"または"B"なら
 『<p>A(または、B)です。</p></body></html>』
を付け加え、(response.redirect へは差し掛からないから)
全体を送り出して、無事終了します。
 
■ところが、"A"でも"B"でもなければ、"/alias/9.asp"に行こうとするのですが、
既にブラウザに向けて送ることを確定させた文字列と組み合わせて、
 『<html><body><p>xの値は</p>
  <% response.redirect "/alias/9.asp" %>』
という構成になっています。
 
クライアントに送れ(このままブラウザに表示せよ)、と言う指示(前半)と、
別の場所に移れ、という指示(後半)が、両方書かれていますので、ASPは
「俺はいったい、どっちへ行きゃぁいいんだよ」と怒り出します。
 
MS社は、ブラウザに表示させるものを何か送ってしまった後は、response.redirectできないようにしました。
ヘッダーとは、『<html><head>〜</head>』の部分です。
『<html>』の1語だけでもブラウザに送ったら、response.redirectは不可、としました。
 
これは仕様です。
 
==================================================
【対策】
"/alias/2.asp"のように
『<html>〜』の後に『response.redirect』が来る
ような書き方をしないで、
"/alias/1.asp"のように、
『response.redirect』の前では、HTML文のたとえ一部でも、一切書かない
ように工夫を要することになります。

Response.Redirect   ハシモトさん [2001/12/12 10:50:46] [1235]
  発言者により削除されました!! 北岳さん [2001/12/12 11:54:56] [1239]
    発言者により削除されました!! 北岳さん [2001/12/12 12:16:15] [1243]
    発言者により削除されました!! 北岳さん [2001/12/12 12:19:32] [1244]
    Re:   ハシモトさん [2001/12/12 12:50:54] [1245]
    Re:【HTTP ヘッダーはすでにクライアントのブラウザに書き込まれています。】   ハシモトさん [2001/12/12 12:51:12] [1246]
  【HTTP ヘッダーはすでにクライアントのブラウザに書き込まれています。】   北岳さん [2001/12/12 12:59:49] [1247]
    再訂正   北岳さん [2001/12/15 11:42:41] [1265]


TreeBBS For ASP V.0.1.3
Program By YasNet