当用户输入url地址时,大致发生以下几步:
- 输入网址,点击回车;
- 浏览器查找当前URL是否存在缓存,并比较缓存是否过期(包括浏览器缓存、系统缓存、路由器缓存);
- 发送到DNS服务器,并获取域名对应ip地址;
- 与web服务器建立TCP连接;
- 浏览器向服务器发送http请求;
- 服务器响应请求,并返回指定url的数据(或错误信息,或重定向的新的url地址);
- 浏览器下载服务器返回的数据及解析html源文件;
- 生成DOM树,解析css和js,渲染页面,直至显示完成;
解释:
HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。
HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。
状态码
状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500(分别表示什么请自行查找)。
200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
301 被请求的资源已永久移动到新位置。
307 重新请求的URL,客户端自动重新请求新的地址。
400 语义有误,当前请求无法被服务器理解或者请求参数有误。
403 服务器已经理解请求,但是拒绝执行它。
404 服务器找不到给定的资源;文档不存在。
405 请求行中指定的请求方法不能被用于请求相应的资源。