私はいくつかの単純な 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を設定したときに順序が重要なのはなぜですか?