2016-03-21 19 views
12

Quando si guarda a come siti Web come Facebook memorizzano le immagini dei profili, gli URL sembrano utilizzare un valore generato casualmente. Ad esempio, la pagina del profilo foto di pagina di Facebook di Google ha il seguente URL:Archiviazione dei dati utente

https://scontent-lhr3-1.xx.fbcdn.net/hprofile-xft1/v/t1.0-1/p160x160/11990418_442606765926870_215300303224956260_n.png?oh=28cb5dd4717b7174eed44ca5279a2e37&oe=579938A8 

Tuttavia perché non basta organizzare in questo modo:

https://scontent-lhr3-1.xx.fbcdn.net/{{ profile_id }}/50x50.png 

Chiaramente questo sarebbe molto più facile in termini di stoccaggio e semplicità. Mi sto perdendo qualcosa? Grazie.

+0

Questo può essere di interesse, non rispondere alla tua domanda, ma dà una visione di come gli URL di Facebook CDN usati da costruire, e mostra alcune delle questioni con non oscurare/hashing parametri negli URL. https://www.lightbluetouchpaper.org/2009/02/11/new-facebook-photo-hacks/ –

+0

Recentemente ho trovato questo video su youtube che copre esattamente questo (tra le altre cose): [YouTube uscirà sempre da ID video?] (Https://www.youtube.com/watch?v = gocwRvLhDf8) (Non sono né il ragazzo in quel video né sono in alcun modo affiliato con lui, penso solo che sia interessante da guardare) – mmgross

risposta

6

Semplicemente metto, penso che possa riducono a due ragioni principali: sicurezza e la cache:

Security - L'aggiunta di questi hash lungo imprevedibili impediscono ad altri di indovinare gli URL di foto e rende piuttosto difficile per scaricare le foto che non sono supposto.

Considerare cosa accadrebbe se potessi facilmente intuire l'URL della foto del profilo e scaricarlo, anche quando si è scelto esplicitamente di condividerlo solo con gli amici.

Cache - aggiungendo parametri di query "casuali" a ciascuna foto, ci si assicura che ogni istanza di foto ottenga il proprio URL. Così puoi conservare la foto nella cache del browser per un lungo periodo, sapendo che ogni volta che la sostituisci con una nuova, la nuova foto avrà un nuovo URL e il browser non continuerà a mostrarti la vecchia foto.

Se si dovesse mantenere lo stesso URL per la foto del profilo di ciascun utente (ad esempio https://scontent-lhr3-1.xx.fbcdn.net/{{ profile_id }}/50x50.png), e quindi caricare una nuova foto, uno di questi può accadere:

  • Se è stato memorizzato la foto nella cache del browser per molto tempo, il browser continuerà a mostrarti la versione cache (purché l'URL sia lo stesso, e la cache non è scaduta, non è necessario scaricare nuovamente l'immagine).
  • Se, invece, si mantiene l'immagine nella cache per un breve periodo di tempo, si finisce per colpire il server molto più del necessario, aumentando il carico e danneggiando le prestazioni.


Spero che questo lo chiarisca.

+0

+1 per il busting della cache. La sicurezza non tanto ... la sicurezza attraverso l'oscurità è debole, ma non fa male neanche. – swestner

+2

10x :) Per quanto riguarda la sicurezza, non si tratta di oscurità, ma di necessità di conoscere un segreto per accedere alla risorsa (che è un concetto solido in sicurezza e come funziona jsession o token oauth). Rispetto all'URL costante per utente, come suggerito da @PSidhu, è molto più difficile accedere a una foto del profilo, a meno che non conosca l'URL completo con il token "casuale". –

3

Con lo schema del percorso, come eviteresti agli estranei di accedere alle foto di un account privato? L'hash impedisce anche ai bot di scaricare tutte le immagini.

7

Aziende come Facebook hanno CDN abbastanza intensi. Possono sembrare URL generati casualmente ma non lo sono, ogni singola rotta è di proposito e programmata per essere gestita in quel modo.

Non si tratta della semplicità di archiviazione come si farebbe se si stesse utilizzando un FTP per connettersi a un server di base del sito Web di marketing. Mentre puoi mettere tutte le tue immagini in una cartella/immagini, Facebook è troppo complesso per questo. Dozzine di diversi tipi di applicazioni che accedono a centinaia se non a migliaia di CDN e server in tutto il mondo.

Se si crea un'app Web, ad esempio un'app Ruby on Rails, e si lavora con servizi come AWS (Amazon Web Services), si incontrano anche quelli che sembrano URL senza senso. Ma fa tutto parte della rete di consegna veloce fornita all'interno dell'architettura. Ogni volta che si "spinge" l'app sul server, vengono generati automaticamente nuovi URL per ogni risorsa univoca, i file css, i file JavaScript, i file di immagine e così via creati tutti dinamicamente. Non è necessario digitare singolarmente ognuno di questi URL unici ogni volta che si pubblica l'app, il codice semplicemente sa dove cercare quelli come parte del processo di pubblicazione.

Esempio: vi dico la web app per cercare

//= require jquery 

e si ritorna http://example.com/assets/jquery-eb3e278249152b5b5d5170b73d9dbf52.js?body=1 nell'intestazione.

Non importa che l'url sia più complesso di quanto dovrebbe, l'applicazione lo riconosce e questo è tutto ciò che conta.

2

Ho il tuo dolore :-) Potrei non rimanere con la descrizione di come questo problema potrebbe apparire di più, ma piuttosto lasciami parlare di una soluzione. Bene, è normale che nel codice generale mentre si tratta di valore hash o anche di valore base64ed, sembra che gli piaccia avere un pasticcio, ma con un identificatore da spiegare, non rimane molto!

Io uso per lavorare in un'azienda in cui utilizziamo per fascicolare il post di Facebook, utilizzando Graph API ottieni il suo oggetto Insights e estrae le informazioni da esso per spostarti facilmente all'interno dell'interfaccia utente e inviarlo al nostro negozio di cache Redis; e una volta che abbiamo definito un data-struttura in TaffyDB come un'organizzazione oggetto è andare a guardare come, tutto solo aveva un senso con la sua capacità di interrogare il finito utile dalla lunga spazzatura cercando flusso di flusso Javascript minified consultare: http://www.taffydb.com/

0

I valori extra nell'URL sono utili per:

  • accesso Traccia. È come quando un giornale aggiunge "& homepage" a "& email" a un URL dell'articolo, quindi il loro sistema sa come un lettore ha trovato la pagina.

  • Evitare l'abuso e controllare l'accesso. Immagina che un utente abbia caricato un'immagine pornografica piccola e popolare in un'immagine del profilo. Potrebbero quindi dirottare il CDN per essere un host web gratuito per il loro sito porno. Ma quel codice è usato internamente dal CDN per limitare il numero di visualizzazioni.