HTTP协议

247 阅读2分钟

特点

  • 支持客户端/服务端模式
  • 简单快速
  • 灵活
  • 无连接
  • 无状态

1.1版本和1.0版本区别

1.1版本(主流版本)和1.0版本的区别在于新增了keepalive(长链接)

HTTP请求结构

请求报文看 HTTP报文结构和内容(转) - myseries - 博客园 (cnblogs.com)

image.png

请求/响应的步骤

客户端连接到web服务器,发送HTTP请求,服务器接受到请求,并返回HTTP响应,释放连接TCP连接(若我们的连接为keep-alive会保持一段时间,该时间段会保持接收请求),客户端浏览器解析HTML内容。

经典面试题:在浏览器输入url,按下回车之后经历的流程?

  1. DNS解析--->逐层去查询DNS缓存,解析DNS的域名对应的ip地址,DNS缓存从近到远,依次流程是浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、域名服务器缓存、顶级域名服务器缓存,从哪个缓存找到对应的IP则直接返回,不在查询
  2. TCP连接--->三次握手
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析,渲染页面
  6. 连接结束--->四次挥手

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不可以