HTTP的定义
HTTP (Hypertext Transfer Protocol) 即超文本传输协议,和 HTML (Hypertext Markup Language) 超文本标记语⾔一起诞⽣,用于在⽹络上请求和传输 HTML 内容。
超文本 (Hypertext),即「扩展型⽂本」,指的是 HTML 中可以有链向别的⽂本的超链接 (Hyperlink)。
以上定义中 Hyper 有拓展的一层意思,互联网创始之初,人们就在思考如何更加方便的在互联网传输信息,最初这些信息都是以文本形式进行传输,随着互联网信息越积约多,就急需一种让文件之间互相关联起来的方式来提高信息查找效率,于是 HTML 这种在文本文件中可以指向别的文本的语言(Hypertext Markup Language 超文本标记语言)就诞生了,随后用户传输这种文本的协议也诞生了也就是 HTTP 协议。
HTTP请求
method
通常是由一个动词例如GET、POST或者一个名词像OPITIONS、HEAD来定义客户端的动作行为。
通常客户端的操作都是获取资源(GET方法)或者发送HTML form表单值(POST方法)。
路径
获取资源的路径,通常是上下文中就很明显的元素资源的URL,它没有协议、域、或者TCP的端口。
HTTP协议版本号
HTTP/1.1或者HTTP/2
headers
服务端表达其它信息的可选头部
对于一些像POST这样的方法,报文的body就包含了发送的资源,这与响应报文的body类似。
HTTP响应
响应报文包含了下面的元素:
- HTTP协议版本号。
- 一个状态码,以及失败的原因。
- 一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。
- HTTP 头,与请求头部类似。
- 可选项,比起请求报文,响应报文中更常见地包含获取的资源body。
关于状态码
状态码(Status Code)
状态码全部表现为三位数字,用于对应响应结果的类型描述(如「200 请求成功」 「404 内容未找到」),常见如下
1xx:临时性消息;100(继续发送)、101(正在切换协议)。
2xx:成功;200(OK)、201(创建成功)。
3xx:重定向;301(永久移除)、302(暂时移动)、304(内容未改变)。
4xx:客户端错误;400(客户端请求出错)、401(认证失败)、403(被禁止)、404(找不到内容)。
5xx:服务器错误;500(服务器内部错误)、502(网关错误)。
知识重点
请求
请求的状态行
包含方式(请求动词)、路径、HTTP版本
HTTP消息头(请求头)
HTTP 消息头允许客户端和服务器通过 request和 response传递附加信息。一个请求头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。该值前面的引导空白会被忽略。
请求体
在GET中一般为空
响应
状态行
包含HTTP版本、状态码、状态信息
常见的状态码需要记牢
响应头
与上面的请求头类似
响应体
也就是下载内容