存储用户数据

Pav*_*dhu 12 storage user-data

在查看Facebook等网站如何存储个人资料图片时,网址似乎使用随机生成的值.例如,Google的Facebook页面的个人资料图片页面包含以下网址:

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

但是,为什么不这样组织它:

https://scontent-lhr3-1.xx.fbcdn.net/{{ profile_id }}/50x50.png
Run Code Online (Sandbox Code Playgroud)

显然,这在存储和简单性方面会更容易.我错过了什么吗?谢谢.

Jor*_*dan 7

像Facebook这样的公司有相当强烈的CDN.它们可能看起来像是随机生成的网址,但它们不是,每条路线都是有目的的,并按照这种方式进行编程.

如果您只是使用FTP连接到基本的营销网站服务器,那么它们就不像您那样简单存储.虽然您可能将所有图像放在/ images文件夹中,但Facebook对此来说太复杂了.数十种不同类型的应用程序在全球范围内访问数百甚至数千个CDN和服务器.

如果您构建了一个Web应用程序,例如Ruby on Rails应用程序,并且您使用AWS(亚马逊网络服务)等服务,那么您还会遇到看似荒谬的网址.但它是架构内提供的快速交付网络的所有部分.每次将应用程序"推送"到服务器时,都会自动为每个唯一资源生成新的URL,css文件,JavaScript文件,图像文件等都是动态创建的.每次发布应用程序时,您不必单独键入每个唯一URL,代码只是知道在哪里查找这些作为发布过程的一部分.

示例:您告诉Web应用程序要查找

//= require jquery
Run Code Online (Sandbox Code Playgroud)

它会在你的标题中返回http://example.com/assets/jquery-eb3e278249152b5b5d5170b73d9dbf52.js?body=1.

这个url比应该更复杂并不重要,应用程序认识到它,这就是最重要的.


Yoa*_*oni 6

简单地说,我认为它可以归结为两个主要原因:安全性和缓存:

安全性 - 添加这些长期不可预测的哈希会阻止其他人猜测照片网址,并且很难下载您不应该使用的照片.

考虑如果我可以轻松猜出您的个人资料照片网址并下载它会发生什么,即使您明确选择仅与朋友分享.

缓存 - 通过向每张照片添加"随机"查询参数,您可以确保每个照片实例都有自己的URL.因此,您可以将照片长时间存储在浏览器的缓存中,因为无论何时更换新照片,新照片都会有新的URL,浏览器不会继续向您显示旧照片.

如果您要为每个用户的个人资料照片保留相同的网址(例如https://scontent-lhr3-1.xx.fbcdn.net/{{ profile_id }}/50x50.png),然后上传新照片,则可能会出现以下情况之一:

  • 如果您将照片长时间存储在浏览器的缓存中,浏览器将继续向您显示缓存版本(只要URL相同,缓存未过期,就无需重新下载图像).
  • 相反,如果您只将图像保留在缓存中很短的时间,那么最终会更多地击中您的服务器,然后实际需要,增加负载并损害性能.


我希望这能澄清它.

  • 10x :)关于安全性 - 它不是关于默默无闻,它是关于需要知道一个秘密才能访问资源(这是一个安全的概念,以及jsession或oauth令牌如何工作).与@PSidhu建议的每位用户的常量网址相比,获取个人资料照片的权限要困难得多,除非我知道带有"随机"令牌的完整网址. (2认同)