Tips

ブラウザーがページを受け取る代わりにダウンロードを試みるのを回避する

日付2001/07/27
ID01-666
バージョン6.7.x specific
プラットフォームWindows and Mac

We have recently seen code like the following:

GET HTTP HEADER(atWWWHeaderNames;atWWWHeaderValues)

$line:=Find in array(atWWWHeaderNames;"SomeParameter")
If ($line=-1)
$line:=Size of array(atWWWHeaderNames)+1
INSERT ELEMENT(atWWWHeaderNames;$line;1)
INSERT ELEMENT(atWWWHeaderValues;$line;1)
End if
atWWWHeaderNames{$line}:="SomeParameter"
atWWWHeaderValues{$line}:="RevisedValue"
SET HTTP HEADER(atWWWHeaderNames;atWWWHeaderValues)

すべてのパラメーターにブラウザーによって後ろに送らせられることは完全に不要です。修正する必要のあるブラウザー値に単に送るべきです。無効な反応は、次のページが送った場合、フォームがいつPOSTコマンドを使用するかはページを示すのではなくファイルをダウンロードするために送られた次のページがこのタイプコードを使用する場合、いくつかのブラウザーはページを示すのではなくファイルをダウンロードすることを試みるでしょう。

現在の問題を引き起こすように見える特定の配列要素は「Content-Transfer-Encoding」、「Content-Encoding.」あなたが名前からこれらの2つの要素を取り除き、値がSET HTTP HEADERコマンドを配置すれば、現在の問題は、解決されるように見えます。しかしながら、技術上使用することが将来壊れないだろうという保証はありません。

次のコードがよりよい解決になるでしょう:

` Declare someplace in the code before it is first needed
ARRAY TEXT(atNewHeaderNames;0)
ARRAY TEXT(atNewHeaderValues;0)


` Each time you need to check for a specific parameter
$ReviseHeader:=False

GET HTTP HEADER(atWWWHeaderNames;atWWWHeaderValues)

$line:=Find in array(atWWWHeaderNames;"SomeParameter")
If ($line=-1)
$ReviseHeader:=True
Else
If (atWWWHeaderValues{line}#"RevisedValue")
$ReviseHeader:=True
End if
End if

If ($ReviseHeader)
$size:=Size of array(atNewHeaderNames)+1
INSERT ELEMENT(atNewHeaderNames;$line;$size)
INSERT ELEMENT(atNewHeaderValues;$line;$size)
atNewHeaderNames{$line}:="SomeParameter"
atNewHeaderValues{$line}:="RevisedValue"
End if


` Finally just before you send the HTML page/blob
If (Size of array(atNewHeaderNames)>0)
SET HTTP HEADER(atNewHeaderNames;atNewHeaderValues)
End if