初识HTTP协议

HTTP无处不在,理解HTTP协议可以帮助我们更好的理解网络
浏览器请求流程概要
思考:当用户输入一个链接或者按F5刷新的时候浏览器内部都做了什么?
- Chrome搜索自身的DNS缓存(一般缓存的时间只有一分钟,可以通过chrome://net-internals/#dns查看Chrome浏览器缓存
- 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效)
- 读取本地的HOST文件
- 浏览器发起一个DNS的系统调用(宽带运营商提供的)
- 浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
- TCP/IP连接建立起来之后,浏览器就可以向服务器发送HTTP请求了,使用了比如说GET方法请求一个根域的域名,协议可以采用HTTP1.0协议
- 服务器接受到了这个请求,根据路径参数,通过后端的一些处理之后,把处理后的一个结果数据返回给浏览器,如一个网站的代码
- 浏览器拿到完整的HTML代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求都要经过上面主要七个步骤
- 浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面展现给用户
运营商的做法
- 宽带运营商服务器查看本身缓存
- 运营商服务器发起一个迭代的DNS解析请求
- 询问根域(.com .cn eg.)
- 根据顶级域查找对应的IP(baidu.com nodejs.org eg.)
- 根据上级域找域名注册商可以获取IP
运营商返回IP之后怎么做
- 服务器运营商把结果返回操作系统内核同时缓存起来
- 操作系统内核把结果返回给浏览器
- 最终浏览器拿到了请求的IP
HTTP请求
- HTTP头 发送的是一些附加信息:内容类型、服务器发送响应的日期、HTTP状态码
- HTTP正文 用户提交的表单数据或者是返回的数据
HTTP请求分析
Timing
通过分析Timing找到页面加载瓶颈
- stalled 等待时间,浏览器要发出请求,到请求可以发出的等待时间(TCP连接释放的时间登),不包含DNS查询和建立TCP连接的时间
- Proxy negotiation 代理协商的时间
- Request send 请求的第一个字节发出之前到最后一个字节发出后的时间,请求时间
- 请求发出之后到收到响应的第一个字节锁花费的时间
- Content download 收到响应的第一个字节开始到收到最后一个字节所话费的时间
Headers
- Remote Address 域名解析后的地址
- Request URL 请求地址
- Request method 请求方法
- Status code 状态码
请求方法
- GET 一般获取读取数据
- POST 一般提交数据
- PUT 更新数据
- DELETE 删除
- HEAD
- TRAGCE
- OPTIONS 。。。
状态码
- 1XX 请求已经接受了,正在处理
- 2XX 请求已经接受并处理完成
- 200 请求成功
- 3XX 重定向
- 4XX 客户端请求错误
- 400 客户端请求语法错误
- 401 请求没有经过授权
- 403 服务器收到请求但是拒绝提供
- 404 找不到资源
- 5XX 服务器错误
- 500 服务器端发生不可预期的错误
- 503 服务器端当前还不能处理请求,可能过一段时间会恢复正产