理解HTTP协议

104 阅读3分钟

前言

百度百科:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式

理解 Protocol的概念

百度翻译的名词解释:协议;议定书;礼仪;外交礼节;条约草案;(协议或条约的)附件;(数据传递的)规程;规约;科学实验计划

在日常生活中Protocol的意思更倾向于 协议;议定书;;条约草案 确定一些列规章制度大家都认可一起遵守

计算机领域之中,可适合理解为 通信协议 为什么要定义通信协议,不能直接对话呢? 程序很能干 但是它不智能, 不能理解分析没有规则的东西,直接扔给机器一段话,它不会明白什么意思,也无法分析隐藏在语境中的信息。 所以 就需要人为的定制规则。 两台计算机交流 按照规则读取数据,发送数据。

HTTP就是让两台计算机能够顺利交流,沟通,唠嗑的规则,即通信协议

问题来了:HTTP协议,建立的通讯规则,具体内容格式是什么。

HTTP请求流程

  1. 抽象一点的说法:客户端发送数据给服务器,服务器解析客户端发送来的数据,完成逻辑后返回数据到客户端。客户端收到数据自行处理逻辑
  2. 具体一点的说法:客户端发送的数据,被称作请求(request),全称请求报文。服务器发送的数据,被称作响应(response),全称响应报文
  3. 官方一点的说法:用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本
  4. 结论:HTTP协议,实质就是 两台计算机发送固定格式的HTTP报文进行通信

Untitled.png 完整的接口地址:www.wanandroid.com/article/lis…

下图从浏览器控制台扒出来的报文示例

Request 报文

Request lineGET /article/list/0/json?page_size=10 HTTP/1.1   
HeaderHost: [www.wanandroid.com](http://www.wanandroid.com/)
RequestBody:BodyBodyBodyBody
  1. Request line 请求行 由三部分组件
    1. 请求方法 GET
    2. path 资源路径 /article/list/0/json?page_size=10
    3. http版本 HTTP/1.1
  2. Header 请求头
    1. 以 key value 键值对的形式传输一些数据
    2. 可以设置多个
  3. RequestBody 请求体
    1. 客户端交给服务器处理的数据
  4. 小结
    1. 一个接口地址可以被拆解成三个部分www.wanandroid.com/article/lis…
    2. https 表明这次请求的协议
    3. www.wanandroid.com 表明访问哪一个服务器
    4. article/list/0/json?page_size=10表明访问服务器上的哪些资源,拼接的参数是对资源的限定
    5. 请求头感觉是对 当前两台机器进行的这次请求进行描述,并不局限与某个资源,请求头的使用概念更大一点
    6. 请求体,如果客户端有数据要交给服务器处理,则需要使用请求体。 注意!!这个概念是客户端 把 数据 交给 服务器处理。 和上面访问资源时传递的参数 不是一个概念。 访问参数的作用是限制,服务器上的数据。

Untitled 1.png

Response报文

status-line:HTTP/1.1 200 OK
headerContent-Type: application/json;charset=UTF-8
response-body:BodyBodyBody

响应报文与请求报文区别不大

  1. status-line 状态行
    1. HTTP/1.1 协议版本
    2. 200 状态码
    3. OK 请求状态描述
    4. 帮助程序员理解当前此次请求成功或失败

请求头 和 body的概念与请求报文一致 ,body中存放的数据 是 服务器 交给 客户端处理的

Untitled 2.png