1

私はいくつかの単純な Jetty 書き換えルールを使用しています

<Configure id="FileServer" class="org.eclipse.jetty.server.Server">
    <Get id="oldhandler" name="handler"/>
    <Set name="handler">
        <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
            <Set name="handler"><Ref id="oldhandler"/></Set>

            <Call name="addRule">
                <Arg>
                  <New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
                    <Set name="regex">/fake-uri/(.*)</Set>
                    <Set name="replacement">/real-uri/$1</Set>
                  </New>
                </Arg>
            </Call>

            <Call name="addRule">
                <Arg>
                    <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
                        <Set name="pattern">/real-uri/*</Set>
                        <Set name="name">Cache-Control</Set>
                        <Set name="value">no-cache,no-store</Set>
                    </New>
                </Arg>
            </Call>

        </New>
    </Set>
</Configure>

/fake-uri/index.htmlブラウザーで要求すると、応答には、 Cache-Controlヘッダーによって提供されるものが含まれ/real-uri/index.html 適用されます。ただし、ヘッダー ルールが正規表現ルールの上になるようにルールを並べ替えると、への要求に対してCache-Controlヘッダーがなくなります。/fake-uri/index.html

ここでは順序が重要なようですが、何が起こっているのかを調べようとしています。ドキュメントによると

HeaderPatternRule - 応答で HTTP ヘッダーを追加/変更します

デフォルトが何であるかはわかりませんが、試してみました

<Set name="rewriteRequestURI">true</Set>

ハンドラーで。

何も変わっていないように見えますが、リクエストURI が書き換えられた場合、出力ヘッダーに適用されるヘッダー書き換えに関して URI 書き換えルールがどこに表示されたかは問題ではないと思います。rewriteRequestURIがtrueに設定されていても、目的の効果を得るにはヘッダー ルールを 2 番目に指定する必要があります。では、 rewriteRequestURIを設定したときに順序が重要なのはなぜですか?

4

1 に答える 1