从一个HTTP请求来读懂HTTP、TCP协议( 二 )


 
路由器是三层设备(从下向上)从物理层开始连接,物理层交给数据链路层,数据链路层看下地址是不是给我的,是给我的进行解析,不是给我的就丢弃,报文再传给上面一层网络层,网络层把数据传到下一个路由器的地址是多少,会通过运营商的网络接口传到运营商的路由器上,运营商有自己的DNS服务器,如果配置的是运营商自己的DNS服务器的话会直接在这个DNS服务器里找自己对应的域名拿到对应的ip地址,也就是刚请求DNS报文地址,然后原路返回解析直到应用层拿到刚域名对应的ip地址,这样就可以进行HTTP请求报文的发送,再调用传输层协议是TCP参数,同样每到一层加头 。
 
HTTP什么是HTTP?超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准 。设计HTTP的初衷是为了提供一种发布和接收html页面的方法 。
 
HTTP特点

  1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作 。
  2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接 。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量 。
  3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应 。
  4. 简单快速、灵活 。
  5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性 。
 
HTTP协议版本已经演化到3.0版本,关于协议版本可以查看 快速掌握HTTP1.0 1.1 2.0 3.0的特点及其区别
 
HTTP报文格式 
HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成:
  • 起始行(start line):描述请求或响应的基本信息
  • 头部字段集合(header):使用 key-value 形式更详细地说明报文
  • 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据
 
其中起始行和头部的字段并成为 请求头 或者 响应头,统称为 Header;消息正文也叫实体,称为 body 。HTTP 协议规定每次发送的报文必须要有 Header,但是可以没有 body,也就是说头信息是必须的,实体信息可以没有 。而且在 header 和 body 之间必须要有一个空行(CRLF) 。
从一个HTTP请求来读懂HTTP、TCP协议

文章插图
 
请求行报文格式
从一个HTTP请求来读懂HTTP、TCP协议

文章插图
 
  • 请求方法:如 GET/HEAD/PUT/POST,表示对资源的操作;
  • 请求目标:通常是一个 URI,标记了请求方法要操作的资源;
  • 版本号:表示报文使用的 HTTP 协议版本 。
 
响应报文格式
从一个HTTP请求来读懂HTTP、TCP协议

文章插图
【从一个HTTP请求来读懂HTTP、TCP协议】 
  • 版本号:表示报文使用的 HTTP 协议版本;
  • 状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误;
  • 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因 。
 
请求及响应报文格式对比
从一个HTTP请求来读懂HTTP、TCP协议

文章插图
 
HTTP 头字段 
头部字段是 key-value 的形式,key 和 value 之间用“:”分隔,最后用 CRLF 换行表示字
段结束 。比如前后分离时经常遇到的要与后端协商传输数据的类型“Content-type: Application/json”,这里 key 就是“Content-type”,value 就 是“application/json” 。HTTP 头字段非常灵活,不仅可以使用标准里的 Host、 Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可能 。
 
头字段注意事项