zhouzhaoxin
zhouzhaoxin 主攻python,喜欢读书,喜欢摄影,芒格的忠实追随者。关注各个领域发展,取长补短,擅长结合多学科技术解决问题

初识HTTP协议

初识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 服务器端当前还不能处理请求,可能过一段时间会恢复正产