0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflare Transform Rules で Location レスポンスヘッダのリダイレクト先 URL を http から https に書き換える

Last updated at Posted at 2024-11-12

Location レスポンスヘッダ

リダイレクト先の URL が指定されます。

Location レスポンスヘッダーはリダイレクト先の URL を示します。 3xx (リダイレクト) または 201 (created) ステータスレスポンスを返すときのみ意味を成します。

リダイレクトの場合、 HTTP メソッドは元のメソッドとリダイレクトの種類によって、 Location で示されたページにアクセスする新しいリクエストを生成するために使用します。

ディレクティブ
<url>
(リクエスト URL からの) 相対 URL、または絶対 URL。

Transform Rules なしのリダイレクト通信フロー

例えば、example.com ドメインで動くアプリ内で、絶対 URL としてリダイレクト先 http://redirect.dest.example.com/ を指定している場合、以下のようなフローになります。

  • サーバーからの Location レスポンスヘッダ http://... をクライアントに返す
  • Cloudflare に http://... 接続すると Always Use HTTPS により https://... としてリダイレクト
  • その後、クライアントブラウザからサーバーに https://... としてリクエストを開始

この場合、http://... 接続時にノーリファラーとなり、サイトによってはエラーになってしまう懸念があります。

ノーリファラーになる原因
⑦https→httpサイトへのアクセス
SSL(暗号化)に対応しているhttpsサイトから対応していないhttpのサイトにアクセスがあった場合、参照元の情報が渡されないため、ノーリファラーとなってしまいます。

ディレクティブ
strict-origin-when-cross-origin (既定値)
同一オリジンのリクエストを行う際はオリジン、パス、クエリー文字列を送信します。オリジン間リクエストでは、プロトコルのセキュリティ水準が同じである場合 (HTTPS→HTTPS) にのみオリジンを送信します。安全性の低下する移動先 (HTTPS→HTTP) には Referer ヘッダーを送信しません。

Transform Rules ありのリダイレクト通信フロー

そのため、Transform Rules で Location レスポンスヘッダのリダイレクト先 URL を http から https に書き換えることで、クライアントブラウザでは常に https 接続となり、ノーリファラーによるエラーを解消できます。

Transform Rules の設定例

例えば Transform Rules で HTTP Response Header Modification Rule を以下のように設定できます。

  • If incoming requests match…
    • Custom filter expression
      • Response Status Code = 302
      • Hostname = 302.example.com
  • Then... Modify response header
    • Set dynamic
    • Header name = location
    • Value = regex_replace(http.response.headers["location"][0], "http://", "https://")

image.png

動作確認

以下の Workers を準備し、 Routes を 302.example.com に紐付けて確認します。

worker.js
export default {
  async fetch(request, env, ctx) {
    return new Response('Hello World!', {
      status: 302,
      headers: {
        "location": "http://google.co.jp/",
      },
    });
  },
};

以下のように Transform Rules で Location レスポンスヘッダのリダイレクト先 URL を http から https に書き換えることができました。

# Transform Rules なし
% curl -sIXGET 'https://302.example.com/' | grep -i location
location: http://google.co.jp/
# Transform Rules あり
% curl -sIXGET 'https://302.example.com/' | grep -i location
location: https://google.co.jp/

まとめ

実際には、サイトやアプリのサーバー側で http://... の絶対 URL 指定でリダイレクトを返さないように修正できれば、ベストです。

ただし、今回は Cloudflare Transform Rules を使えば、修正にかかるリソースや時間を避けて、通信の挙動を最適化することで、すぐにサイトやアプリを継続して使用可能な状態にできることを確認しました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?