2012-01-28 15 views
5

In particolare, quando un server http riceve una richiesta da un iPhone, c'è qualsiasi modo per determinare con certezza quale tipo di connessione Internet ha il telefono?È possibile distinguere le richieste HTTP effettuate via 3G da altre richieste

Se non c'è modo di determinare questo con certezza, ci sono buone euristiche?

+0

Questa è davvero una bella domanda. Dubito che l'HTTP fornisca qualcosa, ma potresti essere in grado di guardare il livello di trasporto. –

+0

Posso chiederti cosa vuoi * veramente * voler rispondere? A parte la limitazione dei dati per cercare di ridurre i potenziali costi di dati per un utente, non riesco a pensare a nessun motivo per cui vorresti conoscere questa particolare informazione. Forse vuoi davvero conoscere la latenza, la qualità della connessione, ecc.? –

+0

Non ho un bisogno immediato in questo momento, ma hai già individuato il motivo: provare a ridurre i potenziali costi di dati per un utente. Un'app spediva con un paio di bug e uno dei bug poteva essere rappresentato sul server, ma avrebbe costretto il client a usare un * lotto * più dati. –

risposta

1

Se si controlla l'applicazione iOS, si dovrebbe essere in grado di impostare un'intestazione personalizzata, ad esempio X-iOS-ConnectionType. Se ricevi una richiesta da Mobile Safari, dubito che tu possa ottenere qualsiasi cosa, anche se potresti provare a eseguire il ping dell'indirizzo IP sorgente e controllare la velocità di trasferimento.

Devo aggiungere che, come nel caso del miglioramento progressivo e del design adattivo, è probabilmente più utile rilevare il throughput piuttosto che il 3G/WiFi. Mentre è probabile che si ottenga un throughput migliore su WiFi, ho trovato diversi casi in cui il 3G è stato molto più veloce.

(Si noti che non ho mai guardato il traffico mobile, e l'IP di origine non può essere un buon indicatore per la velocità di trasferimento del cliente.)

+0

È un'idea interessante, ma sto cercando un meccanismo che non richieda la modifica dell'app iOS. –

1

forse si potrebbe utilizzare la classe Reachability per determinare la connessione a internet e quindi includere quello nella tua richiesta HTTP, ad es come parametro o intestazione HTTP personalizzata come suggerisce Ryan Riley.

+0

Questa è davvero la strada da percorrere. La classe di raggiungibilità ti consente di sapere se stai usando la connessione wifi o meno (quindi, il suo 3G) – codingcthulhu

3

scusa per aver scavato quel cadavere, ma in realtà ho pensato proprio allo stesso problema. Il punto è: non c'è modo di rilevare che direttamente.

Anche se mi è venuto in mente un approccio che ha purtroppo bisogno di un po 'di preparazione: È necessario ottenere il nome host per l'IP da cui è stata fatta la richiesta.

Per esempio, quando faccio una richiesta al mio webserver sopra con il mio telefono su rete 3G e risolvere l'IP richiesta alla richiesta hostname, ottengo questo:

ip-xxx-xxx-xxx-xxx.web.vodafone.de 

modo che avrebbe bisogno di raccogliere (o trovare su Internet) un elenco di nomi host dei provider di servizi web mobili. Con questo approccio, non è possibile stabilire con esattezza quale tipo di connessione viene utilizzata da un utente, ma almeno è possibile distinguere tra WiFi e reti mobili.

Problemi correlati