请注意报头中把Content-type设置为“text/html” 。报头让浏览器将该响应内容以HTML形式呈现,而不是以文件形式下载它 。浏览器会根据报头信息决定如何解释该响应,不过同时也会考虑像URL扩展内容等其他因素 。
8. 浏览器开始显示HTML
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了:
9. 浏览器发送获取嵌入在HTML中的对象
在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签 。这时,浏览器会发送一个获取请求来重新获得这些文件 。
下面是几个我们访问facebook.com时需要重获取的几个URL:
图片
…
CSS 式样表
…
JavaScript 文件
…
这些地址都要经历一个和HTML读取类似的过程 。所以浏览器会在DNS中查找这些域名 , 发送请求,重定向等等...
但 不像动态页面那样,静态文件会允许浏览器对其进行缓存 。有的文件可能会不需要与服务器通讯,而从缓存中直接读取 。服务器的响应中包含了静态文件保存的期限 信息,所以浏览器知道要把它们缓存多长时间 。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在 , 就马上停止这个文件的传输 。
试着猜猜看“fbcdn.net”在地址中代表什么?聪明的答案是"Facebook内容分发网络" 。Facebook利用内容分发网络(CDN)分发像图片,CSS表和JavaScript文件这些静态文件 。所以,这些文件会在全球很多CDN的数据中心中留下备份 。
静态内容往往代表站点的带宽大小 , 也能通过CDN轻松的复制 。通常网站会使用第三方的CDN 。例如,Facebook的静态文件由最大的CDN提供商Akamai来托管 。
举例来讲,当你试着ping static.ak.fbcdn.net的时候,可能会从某个akamai.net服务器上获得响应 。有意思的是,当你同样再ping一次的时候 , 响应的服务器可能就不一样,这说明幕后的负载平衡开始起作用了 。
10. 浏览器发送异步(AJAX)请求
在Web 2.0伟大精神的指引下,页面显示完成后客户端仍与服务器端保持着联系 。
以 Facebook聊天功能为例 , 它会持续与服务器保持联系来及时更新你那些亮亮灰灰的好友状态 。为了更新这些头像亮着的好友状态,在浏览器中执行的 JavaScript代码会给服务器发送异步请求 。这个异步请求发送给特定的地址 , 它是一个按照程式构造的获取或发送请求 。还是在Facebook这个例 子中,客户端发送给ajax/chat/buddy_list.php一个发布请求来获取你好友里哪个 在线的状态信息 。
提起这个模式 , 就必须要讲讲"AJAX"-- “异步JavaScript 和 XML”,虽然服务器为什么用XML格式来进行响应也没有个一清二白的原因 。再举个例子吧,对于异步请求,Facebook会返回一些JavaScript的代码片段 。
除了其他,fiddler这个工具能够让你看到浏览器发送的异步请求 。事实上,你不仅可以被动的做为这些请求的看客,还能主动出击修改和重新发送它们 。AJAX请求这么容易被蒙,可着实让那些计分的在线游戏开发者们郁闷的了 。(当然,可别那样骗人家~)
Facebook聊天功能提供了关于AJAX一个有意思的问题案例:把数据从服务器端推送到客户端 。因为HTTP是一个请求-响应协议 , 所以聊天服务器不能把新消息发给客户 。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息 。
这些情况发生时长轮询是个减轻服务器负载挺有趣的技术 。如果当被轮询时服务器没有新消息,它就不理这个客户端 。而当尚未超时的情况下收到了该客户的新消息 , 服务器就会找到未完成的请求,把新消息做为响应返回给客户端 。
推荐阅读
- ChatGPT帐号注册,chainchat注册有风险吗
- 如何免费推广宝贝,怎么免费推广自己的产品
- 戴尔530显卡怎么样,戴尔5405显卡
- postgresql数据迁移6,pgsql数据库迁移
- mysql大于等于怎么 mysql中大于号的用法
- erp系统适用于苹果系统吗,erp系统有哪些软件
- 笑脸简笔画java代码,visualc++画笑脸代码
- 西瓜视频都有什么补贴啊,西瓜视频投入20亿元补贴,与b站竞争的火药味越来越重了
- php插入数据库 php引入数据库