HTTP协议基础|青训营笔记

86 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记。

HTTP协议基础

HTTP协议是什么

HTTP:超文本传输协议 HTTP 超文本传输协议

超文本 传输 协议 三部分

  1. 协议:HTTP是用在计算机中的协议 使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上参与者),以及==相关控制和错误处理的方式(行为约定和规范)

  2. 传输: HTTP 双向协议 数据两端之间传输 允许中转与接力

    HTTP是一个在计算机世界里面专门用来在两点间传输数据的约定和规范

  3. 超文本 -> 超越普通文本的文字 -> 典型HTML

为什么需要协议

  • 需要明确的边界,协议何时开始,协议何时结束
  • 需要知道协议能够携带哪些信息,和信息的消息类型

协议里面有什么

请求行/状态行

请求头/响应头

请求体/响应体

  • 请求行:方法名,url,协议版本
  • 状态行:协议版本,状态码,状态码描述(1XX:信息类,2XX:成功,3XX:重定向,4XX:客户端错误,5XX:服务端错误)
  • 请求头:请求的元数据,包括长度或者业务逻辑所需要的数据等
  • 响应头:响应的元数据
  • 请求体:请求的数据内容
  • 响应体:响应的数据内容

HTTP常见状态码

 五大类 HTTP 状态码

HTTP常见字段

host字段

img

有了 Host 字段,就可以将请求发往「同一台」服务器上的不同网站。

Content-Length

表示本次回应的数据长度

Connection

常用于客户端要求服务器使用TCP持久连接 以便其他请求复用

HTTP/1.1 默认持久连接 ->兼容老版本

Connection: keep-alive

Content-Type

说明客户端发送的格式

Content-Type: text/html; charset=utf-8

上面的类型表明,发送的是网页,而且编码是UTF-8。

客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。

Accept: */*

Content-Encoding

表明服务器数据的压缩方式

Content-Encoding: gzip

上面表示服务器返回的数据采用了 gzip 方式压缩,告知客户端需要用此方式解压。

客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。

text Accept-Encoding: gzip, deflate

HTTP协议的请求流程

image.png

路由层的作用是将请求分发给对应的处理函数

传输层是进行数据的传输

HTTP框架的设计与实现

分层设计

优点:高内聚,低耦合,易复用,高扩展性

image.png

性能修炼之路

针对网络库的优化

go net:存下全部Header,系统调用次数多,不能复用内存,不能多次读(header过大,一次读不完)

优点:对于流式友好,小包性能高

netpoll:存下全部Header,拷贝出完整的Body

优点:由底层进行buffer管理,所以中大包性能高,时延低