科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道路由交换输入facebook的URL按下回车后究竟发生了什么

输入facebook的URL按下回车后究竟发生了什么

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作为一名软件开发或是网络技术人员,你应该对Web应用程序的运行原理和协议交换,以及涉及到的技术:如浏览器、HTTP、HTML、Web服务器和请求处理程序等都有所了解才行。在这篇文章中,我们将深入探讨你访问某个URL时发生的一系列事情。

来源:51CTO 2011年4月1日

关键字: Web服务器 DNS服务器 URL

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

  3、浏览器向Web服务器发送一个HTTP请求

图 4

  图 4

  Facebook的主页是不会直接从浏览器缓存提取的,因为动态页面要么很快(或立即)过期,因此浏览器将向Facebook服务器发送一条请求:

GET http://facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: facebook.com
Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]

  GET请求的URL是"http://facebook.com/",浏览器通过User-Agent消息头标识自己,并声明可接受的响应类型(Accept和Accept-Encoding消息头),Connection消息头要求服务器保持TCP连接打开,以便处理下一步请求。

  请求包含了浏览器对该域名的cookie,你可能已经知道,cookie是key-value成对出现的,它可以跟踪不同页面请求之间网站的状态,因此cookie保存了登录的用户名,服务器会给用户分配一段密码数字,cookie在客户端上实际是一个文本文件,它会跟随每个请求发给服务器。

  有许多工具可以查看原始HTTP请求和对应的响应,我最喜欢的是fiddler,也许你想说的是FireBug,没错,工具很多,就看个人喜好了,这些工具都能帮助你优化网站。

  除了GET请求外,你可能还熟悉另一种类型的请求- POST请求,它通常用于提交表单,GET请求通过URL发送它的参数(如http://robozzle.com/puzzle.aspx?id=85),POST请求在请求主体中发送它的参数。

  在URL"http://facebook.com/"中的斜线非常重要,在这里,浏览器可以安全地添加斜线,对于"http://example.com/folderOrFile"这种格式的URL,浏览器不能自动添加一个斜线,因为尚不清楚folderOrFile是一个文件夹还是一个文件,在这种情况下,浏览器不会擅自添加斜线,服务器将会以重定向作为响应,导致不必要的来回通信。

  4、Facebook服务器以一个永久重定向响应

图 5

  图 5

  下面是Facebook服务器向浏览器请求发回的响应:

HTTP/1.1 301 Moved Permanently
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
      pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Location: http://www.facebook.com/
P3P: CP="DSP LAW"
Pragma: no-cache
Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
      path=/; domain=.facebook.com; httponly
Content-Type: text/html; charset=utf-8
X-Cnection: close
Date: Fri, 12 Feb 2010 05:09:51 GMT
Content-Length: 0

  服务器以301永久移走响应告诉浏览器应转到http://www.facebook.com/而不是"http://facebook.com/"。

  你可能会问,为什么服务器要坚持用重定向进行响应呢?为什么不用用户想看的网页进行响应呢?

  一个原因是搜索引擎排名,如果相同网页有两个URL,如http://www.igoro.com/和http://igoro.com/,搜索引擎会将他俩看作是两个不同的网站,分摊到每个URL的入站连接就要少得多,从而降低了网站的排名,搜索引擎理解永久重定向(301),将会把来自这两个源的入站连接合并成一个排名。

  同样,相同内容对应的URL太多也利于缓存,如果某段内容有多个名字,在缓存中可能也会出现多次。

  5、浏览器跟随重定向

图 6

  图 6

  浏览器现在知道"http://www.facebook.com/"才是正确的URL,于是发出第二个GET请求。

GET http://www.facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: lsd=XW[...]; c_user=21[...]; x-referer=[...]
Host: www.facebook.com

  消息头和第一个请求的含义一样,就不再啰嗦了。

  6、服务器处理请求

图 7

  图 7

  服务器将会收到GET请求并进行处理,然后发回响应,看起来是一个非常简单的操作,但实际上在这个期间发生了许多有趣的事情。

  ◆Web服务器软件

  Web服务器软件(如IIS或Apache)收到HTTP请求后,立即确定由哪个请求处理程序来处理这个请求,请求处理程序读取请求,生成HTML。

  举一个最简单的例子,请求处理程序可以保存在一个文件中,其结构和URL结构完全对应,如http://example.com/folder1/page1.aspx URL映射到文件/httpdocs/folder1/page1.aspx,Web服务器软件也可以配置,将URL手工映射到请求处理程序,因此page1.aspx的公共URL应该是http://example.com/folder1/page1。

  ◆请求处理程序

  请求处理程序读取请求,它的参数和cookie,它可能会读取和更新服务器上的某些数据,然后生成一个HTML页面作为响应。

  每个动态网站面临的一个有趣的困难是如何保存数据,小网站通常只有一个SQL数据库来保存数据,但大型网站必须将数据库部署到多台服务器上,解决办法包括水平分区(根据主键,将一张表拆分到多个数据库),复制和使用简化数据库(不追求一致性)。

  保持数据廉价更新的一个技术是使用批处理作业,例如,Facebook会及时更新新闻消息源,但"你可能知道"功能可能只需要每晚进行更新(我猜的,我也不知道真实情况如何),批处理作业更新会产生一些过时的不重要的数据,但它使数据更新更快,更简单。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章