HTTP笔记篇之基础

HTTP 是什么

HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol。
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

HTTP 知识地图

image.png

与HTTP相关的协议

HTTP报文

报文结构

拿 TCP 报文来举例,它在实际要传输的数据之前附加了一个 20 字节的头部数据,存储 TCP 协议必须的额外信息,例如发送方的端口号、接收方的端口号、包序号、标志位等等:
image.png
有了这个附加的 TCP 头,数据包才能够正确传输,到了目的地后把头部去掉,就可以拿到真正的数据。
HTTP 协议也是与 TCP/UDP 类似,同样也需要在实际传输的数据前附加一些头数据,不过与 TCP/UDP 不同的是,它是一个“纯文本”的协议,所以头数据都是 ASCII 码的文本,可以很容易地用肉眼阅读,不用借助程序解析也能够看懂。
HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成:

  • 起始行(start line):描述请求或响应的基本信息;
  • 头部字段集合(header):使用 key-value 形式更详细地说明报文;
  • 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

这其中前两部分起始行和头部字段经常又合称为“请求头”或“响应头”,消息正文又称为“实体”,但与“header”对应,很多时候就直接称为“body”。
HTTP 协议规定报文必须有 header,但可以没有 body,而且在 header 之后必须要有一个“空行”,也就是“CRLF”,十六进制的“0D0A”。
所以,一个完整的 HTTP 报文就像是下图的这个样子:
image.png

一个抓包信息如下,第一行“GET / HTTP/1.1”就是请求行,而后面的“Host”“Connection”等等都属于 header,报文的最后是一个空白行结束,没有 body。
image.png

请求行

请求报文里的起始行也就是请求行(request line),它简要地描述了客户端想要如何操作服务器端的资源。

这三个部分通常使用空格(space)来分隔,最后要用 CRLF 换行表示结束。
image.png
用 Wireshark 抓包的数据来举例:

GET / HTTP/1.1

状态行


image.png
示例:

HTTP/1.1 200 OK

头部字段

请求行或状态行再加上头部字段集合就构成了 HTTP 报文里完整的请求头或响应头:
image.png
image.png
请求头和响应头的结构是基本一样的,唯一的区别是起始行。
HTTP 头字段非常灵活,不仅可以使用标准里的 Host、Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可能。
头字段需要注意下面几点:

常用头字段

请求方法

请求方法描述

  • 请求方法是客户端发出的、要求服务器执行的、对资源的一种操作;
  • 请求方法是对服务器的“指示”,真正应如何处理由服务器来决定;
  • 最常用的请求方法是 GET 和 POST,分别是获取数据和发送数据;
  • HEAD 方法是轻量级的 GET,用来获取资源的元信息;

目前 HTTP/1.1 规定了八种方法,单词都必须是大写的形式:

  • GET:获取资源,可以理解为读取或者下载数据;
  • HEAD:获取资源的元信息;
  • POST:向资源提交数据,相当于写入或上传数据;
  • PUT:类似 POST;
  • DELETE:删除资源;
  • CONNECT:建立特殊的连接隧道;
  • OPTIONS:列出可对资源实行的方法;
  • TRACE:追踪请求 - 响应的传输路径。

安全与幂等


URI

注意:客户端和服务器看到的 URI 是不一样的。客户端看到的必须是完整的 URI,使用特定的协议去连接特定的主机,而服务器看到的只是报文请求行里被删除了协议名和主机名的 URI。

响应状态码

HTTP 特点

特点

优缺点

针对 HTTP1.1

参考:

  • 极客时间:《透传 HTTP 协议》
posted @   lttL  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示