路由器是三层设备(从下向上)从物理层开始连接,物理层交给数据链路层,数据链路层看下地址是不是给我的,是给我的进行解析,不是给我的就丢弃,报文再传给上面一层网络层,网络层把数据传到下一个路由器的地址是多少,会通过运营商的网络接口传到运营商的路由器上,运营商有自己的DNS服务器,如果配置的是运营商自己的DNS服务器的话会直接在这个DNS服务器里找自己对应的域名拿到对应的ip地址,也就是刚请求DNS报文地址,然后原路返回解析直到应用层拿到刚域名对应的ip地址,这样就可以进行HTTP请求报文的发送,再调用传输层协议是TCP参数,同样每到一层加头 。
HTTP什么是HTTP?超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准 。设计HTTP的初衷是为了提供一种发布和接收html页面的方法 。
HTTP特点
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作 。
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接 。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量 。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应 。
- 简单快速、灵活 。
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性 。
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) 。
文章插图
请求行报文格式
文章插图
- 请求方法:如 GET/HEAD/PUT/POST,表示对资源的操作;
- 请求目标:通常是一个 URI,标记了请求方法要操作的资源;
- 版本号:表示报文使用的 HTTP 协议版本 。
响应报文格式
文章插图
【从一个HTTP请求来读懂HTTP、TCP协议】
- 版本号:表示报文使用的 HTTP 协议版本;
- 状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误;
- 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因 。
请求及响应报文格式对比
文章插图
HTTP 头字段
头部字段是 key-value 的形式,key 和 value 之间用“:”分隔,最后用 CRLF 换行表示字
段结束 。比如前后分离时经常遇到的要与后端协商传输数据的类型“Content-type: Application/json”,这里 key 就是“Content-type”,value 就 是“application/json” 。HTTP 头字段非常灵活,不仅可以使用标准里的 Host、 Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可能 。
头字段注意事项
- 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符“-”,但不
- 能使用下划线“_”(有的服务器不会解析带“_”的头字段) 。字段名后面必须紧接 着“:”,不能有空格,而“:”后的字段值前可以有多个空格;
- 字段的顺序是没有意义的,可以任意排列不影响语义;
推荐阅读
- 使用charles嗅探https请求,你的API并不安全
- 您一定得见识一下.Net中这几款HTTP请求库
- Wireshark数据包分析实战:HTTPS加解密过程
- 数据中台建设从数据中台的认知开始
- 找出两个链表的第一个公共节点
- 熊胆汁的作用
- 纯种哈士奇长啥样 纯种哈士奇多少钱一只,从这6点来看价格
- 剑网三一个赛季持续多久 剑网三赛季多久一次
- 怎样可以锻炼肌肉呢?
- 养猫和仓鼠 猫为什么喜欢仓鼠