PHPのフェッチャーにこれ以上の書き換えを加える前に、次のリソースがどこへ行くべきかを決めます。https://destination.example/catalog/ から取得し https://viewer.example/browse?url=... で返したドキュメントには、次のものが含まれます。

<img src="photo.jpg">
<a href="details/42">Details</a>

ブラウザはその参照を、ビューアで受け取ったドキュメントを使って解決します。PHPが元のバイトを取得したことは、リモートの基準を確立しません。

base 要素で相対URLを宛先に向けることはできますが、その要求はブラウザから宛先へ直接向かう可能性があります。代わりにすべての要求をPHP経由に保つには、プロキシURLとより広いルーティングモデルが必要です。

リソースまたは操作必要な処理
リンクと画像リモートのドキュメントを基準に解決し、意図した経路を生成する
CSSのインポートとリソーススタイルシートのリモート基準を使う
フォームメソッドと送信データを保持する
リダイレクトナビゲーションを許可されたモデル内に保つ
スクリプトが生成する要求元のHTMLにないURLを扱う

いくつかの正規表現置換では、スクリプトの多いサイトとの一般的な互換性を約束できません。既知の公開ドキュメントなら、ナビゲーションを無効にする、直接リンクを許可する、対応するサブセットだけをビューア経由で通す、で足りる場合があります。すべての応答をHTMLとして扱うのではなく、実際のメディアタイプを保ってください。

自分のドメインから信頼できないマークアップを返すと、取得したサイトの識別ではなく、ビューアのブラウザオリジンが与えられます。そうした文書はアカウントや管理のページから隔離してください。訪問者ごとのリモートCookie、転送を許可するヘッダー、リダイレクト先を定義します。共有のCookieジャーはリモートのログインを混在させます。

閲覧セッションを提供する前に、そのサポート境界を確定してください。別の出口での通常の閲覧なら、ブラウザ本来のプロキシ設定、たとえばFirefoxのHTTP/SOCKS設定が、この取得と再公開の層を必要とせずに宛先URLとオリジンのモデルを保ちます。別個の公開サイトの試験には、無料プロキシ一覧が候補のエンドポイントを提供します。ブラウザ設定のプロトコルを合わせてください。

関連記事