3

IIS でカスタム エラー ハンドラ (実行 URL) を使用して、Windows 2008 R2 x64 上の ColdFusion 10 で 404 エラーを正しく処理するのに問題があります。以前のバージョンの CF でこれを問題なく実行しました。IIS の Web サイト機能で、「エラー ページ」を開き、すべての 404 エラーに対して「/404.cfm」を実行するように設定します。

私が抱えている問題は、404.cfm ページの出力がブラウザに完全に返されず、ページが正しく読み込まれないことです。何も返ってこないこともあれば、1K を返すこともあれば、もう少し多くを返すこともあります。非常に矛盾しています。

IIS で 404.cfm ハンドラーを設定するだけでなく、Application.cfm 内の onMissingTemplate() メソッドでも呼び出しています。

<cffunction name="onMissingTemplate"
    returnType="boolean"
    output="true">

    <cfargument name="thePage" type="string" required="true">

    <cftry>

        <cfmodule template="../../../404.cfm" thePage="#Arguments.thePage#">

        <cfcatch>
            <cfoutput><p>An error occurred</p></cfoutput>
        </cfcatch>

    </cftry>

    <cfreturn true />
</cffunction>

404.cfmエラー ハンドラ内で、次のように呼び出しています。

<cfheader statuscode="404" statustext="Not Found">

...そして、たくさんのものを出力します。

404.cfm で cfheader の呼び出しを削除すると、[ColdFusion リクエストの場合] エラー ハンドラが正しく読み込まれます。これは、IIS を通過するものは何もないためです。代わりに、ColdFusion の onMissingTemplate() メソッドを通過するだけです。しかし、応答ヘッダーには 200 ステータス コードが表示されます。これは問題です。明らかな理由から、404 ステータス コードである必要があります。

cfheader 呼び出しを含めた場合、またはColdFusion 以外のページが要求された場合 (IIS は 404 ステータス コードを生成します)、404.cfm ハンドラーの出力がブラウザーに完全には返されません。IISがアクションを手に入れることに関係があると思います。

CFバグデータベースでこれを報告しましたが、何か間違っているのではないかと思っています。バグはこちら: https://bugbase.adobe.com/index.cfm?event=bug&id=3488063

4

5 に答える 5

1

バグベースのバグを更新しましたが、ここで回避策を繰り返します。

CFSaveContent を使用して 404 ハンドラーのコンテンツをラップし、コンテンツの長さを強制的に書き込むことで、修正を加えることができました:-

<cfsavecontent variable="thePage">
Your 404 code here
</cfsavecontent>
<cfcontent reset="Yes" type="text/html"><cfheader name="Content-Length" value="#len(thePage)#"><cfoutput>#thePage#</cfoutput><cfabort>

注: cfcontent から cfabort までを 1 行にまとめているため、追加の空白はありません。

CF9 はコンテンツの長さヘッダーを設定していないようですが、違いはないようです.. CF10 ですが ... Tomcat は CF 処理の最後に魔法の要素を追加して IIS に戻してはいけません。

于 2013-03-19T00:53:49.933 に答える