特点
- 支持客户端/服务端模式
- 简单快速
- 灵活
- 无连接
- 无状态
1.1版本和1.0版本区别
1.1版本(主流版本)和1.0版本的区别在于新增了keepalive(长链接)
HTTP请求结构
请求报文看 HTTP报文结构和内容(转) - myseries - 博客园 (cnblogs.com)
请求/响应的步骤
客户端连接到web服务器,发送HTTP请求,服务器接受到请求,并返回HTTP响应,释放连接TCP连接(若我们的连接为keep-alive会保持一段时间,该时间段会保持接收请求),客户端浏览器解析HTML内容。
经典面试题:在浏览器输入url,按下回车之后经历的流程?
- DNS解析--->逐层去查询DNS缓存,解析DNS的域名对应的ip地址,DNS缓存从近到远,依次流程是浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、域名服务器缓存、顶级域名服务器缓存,从哪个缓存找到对应的IP则直接返回,不在查询
- TCP连接--->三次握手
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析,渲染页面
- 连接结束--->四次挥手
HTTP状态码
五种可能的取值:
- 1xx:提示信息---表示请求已经接收、继续处理
- 2xx:成功---表示请求已被成功接收、理解、接受
- 3xx:重定向---要完成请求必须进行下一步的操作
- 4xx:客户端错误---请求有语法错误或请求无法是实现
- 5xx:服务端错误---服务器未能实现合法的请求
常见状态码:
- 200 OK:正常返回信息
- 400 BadRequest:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未授权,这个状态码必须在www-Authenticate报头域一起使用
- 403 Forbidden:服务器收到请求,但拒绝提供服务
- 4.4 NotFound:请求资源不存在相当于输入可错误的URL
- 500 Internal Server Error:服务器发生了不可预期的错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
GET请求和POST请求的区别
从三个层面来解答:
HTTP报文层面:GET请求信息放在URL中,POST放在报文体中 数据库层面:GET请求符合幂等性和安全性,POST不符合 其他层面:GET可以被缓存被存储,而POST不可以