アプリケーションでHTTPクライアントを強制的にHTTPSに切り替えたい。入力するユーザーwww.mysite.com
はデフォルトでHTTPを使用しますが、HTTPSにリダイレクトする必要があります。古いブックマークを使用しているユーザーは、ブックマークされたページのHTTPSバージョンにリダイレクトされます。
HSTS(RFC 6797)は、リダイレクトされると非常に役立ちます。私の質問は実際にはHTTPメソッドについてです。
GET
そしてHEAD
確かに301/302リダイレクトを受け入れることになっていますが、POST
/PUT
とはDELETE
どうですか?
次の例を参照してください。
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
if (context.Request.IsSecureConnection) return;
if (context.Request.HttpMethod == "GET" || context.Request.HttpMethod == "HEAD")
{
string redirectUri = context.Request.Url.ToString().Replace("http://", "https://");
context.Response.RedirectPermanent(redirectUri, true);
}
else
{
throw new HttpException(403, "SSL Required");
}
}
GETとHEADの両方がリダイレクトで処理されます。現在、POSTは、私が知る限り、実行されるGET要求として301リダイレクトを受け入れます。つまり、HTTPSバージョンに再投稿しません。これが、私のコードスニペットで403コードになってしまう理由です。
質問は、HTTPプロトコルの観点から読む必要があります
アプリケーション内のすべてのフォームがHTTPSを指していることを確認する以外に、ブラウザが要求をプレーンな古いHTTPバージョンに転送するときに、賢いHTTP開発者がクライアントにPOST要求をページのHTTPSバージョンにリダイレクトするように強制する必要がありますか?
考えられる解決策
すべてのフォームフィールドで埋められたランディングページを作成します。これにより、自動的に(Javascriptと[リダイレクトされない場合はクリックしてください]ボタンを使用して)フォームがターゲットページのHTTPSバージョンに再投稿されます。
他のアイデアはありますか?