这是我第3篇。
虽然做了一些项目了,但是对http整个过程还是有点模糊(相信很多同学也不一定说的出来)。
良好的习惯中有一点就是事后多整理[微笑],那么我来梳理下。
详细见大神的博客:
http://www.blogjava.net/zjusuyong/articles/304788.html
一、传统的页面请求方式
下面是一个非常简单的 HTML 网页文件index.html。
hello world
这个网页包含一张样式表style.css和一个图片文件head.png。为了渲染这个网页,浏览器会发出三个请求。
这些信息通过请求头(header)发送给服务器。
1.HTTP请求格式主要有四部分组成,分别是:请求行、请求头、空行、消息体,每部分内容占一行。
2.服务器接收处理完请求后返回一个HTTP相应消息给客户端。HTTP响应消息的格式包括:状态行、响应头、空行、消息体。每部分内容占一行。
- 第一个请求是index.html。
GET /index.html HTTP/1.1
- 第二、三个请求: 服务器收到第一个请求,就把index.html发送给浏览器。浏览器发现里面包含了样式表和图片,于是再发出两个请求。
GET /style.css HTTP/1.1 和 GET /head.png HTTP/1.1
这就是传统的网页请求方式。它有两个问题,一是至少需要两轮 HTTP 通信,二是收到样式文件之前,网页都会显示一片空白,这个阶段一旦超过2秒,用户体验就会非常不好(网很慢的话)。
二、传统方式的改进
①减少 HTTP 请求:减少网站上的对象数量;最小化网站上的重定向数量;使用css sprites技术;将js代码和css样式分别合并到一个共享的文件等。
②压缩图片,图片改成 Base64 编码的Data URL等。
③预加载(preload),延迟加载。
一种解决办法就是把外部资源合并在网页文件里面,减少 HTTP 请求。比如,把样式表的内容写在