HTTP协议引入
http超文本传输协议, 是基于 TCP/IP协议处理传输细节 的应用层协议
传输数据类型:
- html文本文件 text/html
- 图片文件
- 响应内容
HTTP的特征
http协议,以及从前后端交互角度去理解
http传输协议是基于 (C-S架构)双向的传输协议, C客户端发送请求, S服务器响应请求
客户端一般就是web浏览器, 服务器一般就是web服务器.
浏览器表示前端, web服务器表示后端, 这也算是一个前端跟后端的典型交互实例了
前端浏览器像后端服务器通过URL进行全局的资源定位请求网页内容, 后端服务器接收解析请求。响应内容,响应数据.后端服务器任务: 为前端提供数据支撑, 计算支撑. 服务支撑. 服务器还可能需要连接请求第三方服务器. 通常也叫做上游服务器 (mysql,redis等)
无状态
无状态, 代表着无记忆能力. 对于历史请求没有任何的信息的记录. 历史重复的请求到来, 还是需要从新建立连接, 还是需要SSL验证, 新的请求需要用到之前的一些信息, 也必须进行一个重传, 这样对于新的连接需要传输更多的数据, 但是服务器不需要记录信息. 可以加快应答速率. 也可以降低服务器的压力.
无连接
此处的无连接并不是实际意义上的不用建立连接, 连接时需要建立的, 只不过连接仅仅支撑一次响应请求., 也就是说客户端向服务器发送一次请求. 服务端完成响应, 然后服务器确认收到客户端的ACK确认应答包. 随即断开连接
无连接的含义是限制每次连接只处理一个请求
客户端请求消息
客户端发送一个 HTTP 请求到服务器的请求消息包括以下格式:请求行(request line)、请求 头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式
服务器接收缓冲区接收到一整个缓冲区信息, 然后如何解析的. 按照行进行解析, 行分割\r\n. 回车换行进行分割 (报文规定, 协议, 双方的约定)
服务器响应消息
HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文
简易版本的http服务器书写实现, 我们是在http协议的基础上遵循协议规则. 封装报文结构. 传输. 双方都按照头部中的协议信息进行解析,按照http协议规则解析即可.
我们做的仅仅只是按照协议格式一行一行的解析客户端的请求 + 请求正文. 然后对于解析出来的请求进行一个响应即可. 响应正文也要按照这个协议规则格式进行封装. 就有点像写信的意思
HTTP 请求方法(常用款)
GET : 请求页面,并且需要返回页面正文 (实体)
HEAD: 几乎和GET请求一致,只不过它不需要返回实体,仅仅返回报头
POST:像服务器上传数据, 比如上传一个网页.
HTTP 响应头信息 (常用款)
Content-Length:表示正文内容长度
Content-Type:正文内容的文档类型
Content-Type:服务器名称
Content-Encoding:文档的编码方式
HTTP 状态码 (常用款)
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并 显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header) 用以响应浏览器的请求。
HTTP 状态码的英文为 HTTP Status Code。
下面是常见的 HTTP 状态码:
404 Not Found 没有找到资源(网页), URL不存在
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
简单的写一个minihttp
(思路源头源于奇牛教育B栈http服务器开发, 我觉得思路讲的相当清楚,初学者友好)