(二)、自己动手写Web框架之HTTP基础知识
1、什么是http
http是一种客户端-服务端通讯协议,一般浏览器充当客户端,而像IIS、Nginx、Tomcat等软件充当服务器,用于在两台电脑之间传输超文本文档内容而定义的交互协议,工作在tcp/ip协议之上的应用层协议。
2、http通讯的基本流程
一次http交互一般包含以下三个流程: 1、由客户端(浏览器)建立TCP连接 2、客户端(浏览器)发送请求报文并等待服务器的应答 3、服务器接收客户端的请求并按约定的协议规则响应请求
3、http连接管理
http有三种连接处理模型,分别为短连接、长连接和流水线 在早期的时候(http1.0),http默认采用短连接模式,即每次请求响应结束后,服务器和浏览器都关闭各自的tcp连接,这种模型连接效率比较低,因而在http1.1中进行了优化。 http1.1默认采用的是长连接模型,长连接在建立tcp连接后不会响应完就关闭,而是会保持一段时间的连接,多个请求可以复用一个tcp连接,服务器可以使用Keep-Alive标头来指示客户端最小的连接保持时间,然而长连接也有缺点,就是是在空闲时间,也还是会消耗服务器资源。 流水线技术是在同一连接上连续发送请求,不用等待服务器的响应后再发送请求。因而更能提高效率,但http1.1默认还是使用的长连接。
4、请求报文
一个http请求包含以下内容: 1、起始行,单独占一行。主要包含三个元素 1)、http请求方法,比如:GET、POST、DELETE等 2)、请求目标,一般是一个url地址 3)、http版本 2、请求头 请求头的基本格式为:名称:值,可以由多个,每行一个这种格式 3、空行 这个行用于分割请求头和请求体,是一个空白行 4、请求体(可选) 请求体一般是Post请求的数据,可分为两类: 1、单文件,由Content-Type和Content-Length定义 2、多文件,每部分都有Content-Type,用boundary字符串分割
5、响应报文
1、状态行 包含协议版本、状态码、状态文本三部分内容,例如:http/1.1 200 OK 2、响应头,跟请求头格式一样 3、空行 4、响应体(可选) 响应体可分为三类, 1)、已知长度的单个文件,由Content-Type和Content-Length定义 2)、未知长度的单个文件,通过设置Transfer-Encoding:chunked来使用chunks编码 3)、多部分内容,比较少见
|