「http:// dd」が有効なURLなのはなぜですか?
質問
.NET 3.5アプリを作成し、 URI.IsWellFormedUriString(string uriString、UriKind uriKind)
を使用してユーザーが入力したURIを検証しています。 UriKind.Absolute
を使用します。私はアプリケーションで遊んでいたので、次のような理由について少し心配して混乱しています:
は有効なURIですか?何が得られますか? RFCの一部であるためだとわかっていますが、そもそもなぜ有効なのですか?
そのようなURIを目にしたのは、企業の内部イントラネットの場合だけです
または
http:// localhost (これは非常に人気がありますが、特殊なケースでもあります)
さまざまなURI正規表現があるため、独自の正規表現を使用する必要はありません。ただし、一般にアクセスできないようなURIをユーザーが入力することは望ましくありません。
アイデアや考えはありますか?ありがとう。
解決
それは、あなたが言うように、それが完全に有効なURIだからです。
戦略を少し変更します...有効な(整形式の)URIだけでなく、実際にサイトを指しているという意味で有効なURIが必要な場合は、もう1つステップを追加します。
文字列検証の後、HEADリクエストを発行してURLをpingします。 2xyステータスコードが返される場合は、おそらく大丈夫です。これはほとんどの状況で機能しますが、警告や例外がないわけではありません。
他のヒント
は一意のリソースを指すため、有効です。この場合、ローカルネットワーク上のコンピューター「ddd」のWebサーバーを(できれば)指します。
URIは、一意のWorld Wide Webリソース識別子ではなく、一意のリソース識別子です。 file:///blah.txtも有効なURIです
RFC 1738 RFC 2396 )。
RFCは、スキームとスキーム固有の要素(この場合はホスト名)のみで構成されるリソースパスに対して特定の許可を与えます。一意のリソースを識別し、URIの構文に準拠している限り、有効です。
質問に自分で答えました。これは「有効」ですRFC仕様の定義ipso factoによる(整形式)URI。
必要なタスクを解決するには、正規表現で1つ以上のドットの追加チェックを行うか(ドットをエスケープすることを忘れないでください!)、リソース自体をヒットして、実際に応答するかどうかを確認してください。
URIの構文に従うため、有効なURIです:スキームと、スキーム固有のコンポーネント(「http」がスキーム」、「:」が2つを分離、「// ddd」がスキーム固有の部分。)
HTTP URIの場合、「ddd」が有効なホスト名であるため、それらの構文にも従います。
このURLが有効である理由を確認する簡単な実験を次に示します。
0) dig
または ping
ユーティリティを使用して、google.comのIPアドレスを取得します。私は得た:74.125.53.100
1)/ etc / hostsファイルを編集します(Windowsでは、C:\ Windows \ system32 \ drivers \ etc \ hostsのようなもので、作成する必要がある場合があります)。 hostsファイルに、次のような行を追加します。
74.125.53.100 ddd
編集を保存することを忘れないでください。
2)Webブラウザーで、次のURLにアクセスします。 http:// ddd
3)URLを使用してGoogleにアクセスしました。それが有効なURLである理由です。