基本的にHEAD
は、ターゲット URL に対して HTTP 要求を実行し、受け入れ可能な応答コードが得られたかどうかを確認する必要があります。受け入れ可能な応答コードは、OK (200)、一時的に移動された (???)、および現在ではないにしても、少なくともすぐにページにつながるその他のコードである可能性があります。
なぜHEAD
ですか?GET
ページ全体をHEAD
ダウンロードし、HTTP ヘッダーのみをダウンロードするためです。これには時間がかかりません。この場合、時間は友達ではありません。検証は非常に迅速に行われる必要があり、HTTP 要求の作成には時間がかかります。この数秒 (またはサーバーとネットワークの負荷によってはそれ以上) の間、ユーザーは何が起こっているのか疑問に思い、イライラします。これらのアニメーション化された進行状況インジケーターのいずれかを表示して、入力の検証に時間がかかることを彼に知らせることができない限り.
これは、フォーカスが入力コントロールから離れ、結果が表示される側にアニメーション化されたインジケーターがあると、バックグラウンド AJAX 呼び出しで値が検証されるパスワード強度バリデーターのように行う必要があります。その間、ユーザーは他の情報を入力できます。
コードは次のようになります。
public class UrlExistenceValidator ... {
public boolean isValid(Object object) {
if (!(object instanceof String)) {
return false;
}
final String urlString = (String) object;
final URL url = new URL(urlString);
final HttpURLConnection huc = (HttpURLConnection) url.openConnection();
huc.setRequestMethod("HEAD");
huc.connect();
final int code = huc.getResponseCode();
return code != 404;
}
}