1

私は .NET 3.5 アプリを作成しており、URI.IsWellFormedUriString(string uriString, UriKind uriKind)ユーザーが入力した URI を検証するために使用しています。を使用してUriKind.Absolute。私はちょうどアプリケーションで遊んでいたところですが、なぜ次のようなことが起こるのか、少し心配で混乱しています:

http://ddd

は有効な URI ですか? 何を与える?RFC の一部だからということはわかっていますが、そもそもなぜ有効なのですか?

私がそのような URI を見たことがあるのは、企業内のイントラネットのようなものだけです。

http://companyinet

また

http://localhost (これは非常に一般的ですが、特殊なケースでもあります)

非常に多くのさまざまな URI 正規表現があるため、独自の正規表現を使用する必要はありません。しかし、私は、一般に公開されていないような URI をユーザーが入力することを本当に望んでいません。

アイデアや考えはありますか?ありがとう。

4

6 に答える 6

20

一意のリソースを指しているため、有効です。この場合、ローカル ネットワーク上のコンピュータ 'ddd' の Web サーバー (うまくいけば) を指します。

URI は一意のリソース識別子であり、一意の World Wide Web リソース識別子ではありません。file:///blah.txt も有効な URI です

于 2009-10-28T20:09:36.190 に答える
16

あなたが言及したように、それは完全に有効なURIだからです。

私はあなたの戦略を少し変更したいと思います...有効な(整形式のように)だけでなく、実際にサイトを指しているという意味でも有効なURIが必要な場合は、もう1つ追加する必要がありますステップ。

文字列の検証後、HEAD リクエストを発行して URL を ping します。2xy ステータス コードが返された場合は、おそらく問題ありません。これはほとんどの状況で機能しますが、警告や例外がないわけではありません。

于 2009-10-28T20:11:20.540 に答える
6

RFC 1738 (およびRFC 2396の URI 仕様)に準拠しているためです。

RFC は、スキームとスキーム固有の要素 (この場合はホスト名) だけで構成されるリソース パスに対して、特定の許可を与えています。一意のリソースを識別し、URI の構文に準拠している限り、それは有効です。

于 2009-10-28T20:11:27.687 に答える
3

あなたは自分で質問に答えました。これは、事実上、RFC 仕様の定義による「有効な」(整形式の) URI です。

必要なタスクを解決するために、正規表現で 1 つ以上のドットについて追加チェックを行うか (ドットをエスケープすることを忘れないでください!)、リソース自体をヒットして実際に応答するかどうかを確認してください。

于 2009-10-28T20:12:10.410 に答える
2

これは URI の構文に従っているため、有効な URI です。スキームと、スキーム固有のコンポーネント (「http」はスキームであり、「:」は 2 つを分離し、「//ddd」はスキームです) を持っています。特定の部分。)

HTTP URI の場合、'ddd' が有効なホスト名であることから、それらの構文にも従います。

URI の構文は、http://www.ietf.org/rfc/rfc2396.txtで定義されています。

于 2009-10-28T20:10:25.910 に答える
1

その 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 である理由です。

于 2009-10-29T00:00:41.557 に答える