- ブラウザ上での
hostname
表示は変更後の値- リダイレクトを使用するため
- ※ history.replaceState は異なるオリジンを指定できないので上書きには使用できなかった
- 暗号化通信は非対応
- SSL/TLSハンドシェイクのときにホスト名が送信されるため
- (大丈夫な場合もあるかも?少なくとも Server Name Indication を使用している場合はNG)
chrome.webRequest.onBeforeSendHeaders.addListener()
でリダイレクトchrome.webRequest.onBeforeRequest.addListener()
でホストヘッダーを書き換え(追加)
- トリッキー
- 暗号化通信は非対応
GET
メソッドではなくCONNECT
でリクエストされるため。通常、WebサーバーはCONNECT
リクエストを受け付けない
if (host === "example.com") {
return "PROXY localhost:1024";
}
GET / HTTP/1.1
Host: example.com
GET http://example.com/ HTTP/1.1
Host: example.com
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
- Host Switch Plus - Chrome ウェブストア
- Riant/host-switch-plus: Change the hosts rules in Chrome. It's easy, and effect immediately.
- 名前解決ではない