Domanda

Sto scrivendo un'app .NET 3.5 e sto usando URI.IsWellFormedUriString (string uriString, UriKind uriKind) per verificare gli URI immessi dall'utente; utilizzando UriKind.Absolute . Stavo solo giocando con l'applicazione e sono un po 'preoccupato e confuso sul perché qualcosa del tipo:

http: // ddd

è un URI valido? Cosa dà? So che è perché fa parte della RFC, ma perché è valido in primo luogo?

L'unica volta che ho visto URI come quello è per Intranet aziendali, interne come

http: // companyinet

o

http: // localhost (che è molto popolare, ma anche un caso speciale)

Non voglio usare la mia espressione regolare poiché ci sono così tante regex URI diverse. Tuttavia, non voglio davvero che gli utenti entrino in URI in quel modo che non siano accessibili pubblicamente.

Qualche idea o pensiero? Grazie.

È stato utile?

Soluzione

Questo perché è un URI perfettamente valido, come dici tu.

Modificherei leggermente la tua strategia ... Se desideri URI non solo validi (come in formato corretto), ma anche validi, nel senso che in realtà puntano a un sito, dovrai aggiungi un altro passaggio.

Dopo la convalida della stringa, emettere una richiesta HEAD per eseguire il ping dell'URL. Se restituisce un codice di stato 2xy, probabilmente sei a posto. Funzionerà nella maggior parte delle situazioni, ma non è privo di avvertimenti ed eccezioni.

Altri suggerimenti

è valido perché punta a una risorsa unica. In questo caso, punta al server web (si spera) del computer "ddd" sulla rete locale.

L'URI è un identificatore di risorsa univoco, non un identificatore di risorsa Web univoco. file: ///blah.txt è anche un URI valido

Perché è conforme a RFC 2396 ).

La RFC tiene conto di percorsi di risorse specifici costituiti solo da uno schema e da un elemento specifico dello schema, in questo caso un nome host. Finché identifica una risorsa unica e si conforma alla sintassi degli URI è valida.

Hai risposto tu stesso alla domanda. È un " valido " (ben formato) URI dalla definizione della specifica RFC ipso facto.

Per aiutare a risolvere il tuo compito richiesto, esegui alcuni controlli addizionali nella tua regex per uno o più punti (non dimenticare di sfuggirli!) o eventualmente prova a colpire la risorsa stessa per vedere se effettivamente risponde.

È un URI valido perché segue la sintassi degli URI: ha uno schema e un componente specifico dello schema ('http' è lo schema ',': 'separando i due, e' // ddd 'è la parte specifica del regime.)

Nel caso di un URI HTTP, segue anche la sintassi per quelli, con 'ddd' che è un nome host valido.

La sintassi degli URI è definita in http://www.ietf.org/rfc/ rfc2396.txt

Ecco un semplice esperimento per capire perché questo URL è valido:

0) utilizza l'utilità dig o ping per ottenere l'indirizzo IP di google.com. Ho ottenuto: 74.125.53.100

1) Modifica il tuo file / etc / hosts (su Windows è qualcosa come C: \ Windows \ system32 \ drivers \ etc \ hosts, e potresti aver bisogno di crearlo). Nel file hosts, aggiungi una riga come questa:

74.125.53.100 ddd

Non dimenticare di salvare le modifiche.

2) In un browser Web, vai a questo URL: http: // ddd

3) Hai appena effettuato l'accesso a Google utilizzando l'URL. Ecco perché è un URL valido.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top