超文本传输协议(HTTP)是用于传输诸如 HTML 的超媒体文档的应用层协议。它被设计用于 Web 浏览器和 Web 服务器之间的通信,但它也可以用于其它目的。HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。 HTTP 是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。虽然通常基于 TCP/IP 层,但可以在任何可靠的传输层上使用,如 UDP。
最小 HTTP
最小 http GET头
代理 http GET头
HTTP 请求
http请求由3个部分组成:请求行、请求头、请求体。
请求行
格式:Method URI HTTP-Version\r\n
常用请求方法
GET
:获取响应报头+响应正文POST
:在GET的基础上附加数据HEAD
:获取响应报头CONNECT
:打开TCP连接通道,常用于代理
URI,即统一资源标识符
如:/
表示根、/index.html
表示根下的index.html文件
HTTP-Version
主要有两个版本:HTTP/1.0
、HTTP/1.1
完整示例:GET / HTTP/1.1\r\n
请求头
格式:Field: Value\r\n
(Field不区分大小写)
典型的几个:
Host头域:Host: www.baidu.com\r\n
,指定虚拟主机,主机名+端口号(默认80),此头域必须
Accept头域:Accept: text/html\r\n
,指定接受的MIME类型,可以使用通配符,如*/*
User-Agent头域:User-Agent: curl/7.4\r\n
,客户端标识
请求体
- 请求体和请求头之间须用
\r\n
分隔 - 请求体是可选的,POST方法有请求体
- 如果有请求体,则需要使用头域指明数据的长度
指明长度的两种方式
Content-Length: 1024\r\n
,使用十进制数字指明附加数据的长度,单位为字节Transfer-Encoding: chunked\r\n
,分块传输,格式:十六进制数字[CRLF]数据[CRLF]
,以0[CRLF][CRLF]
结束
两者互斥,Transfer-Encoding优先级高
HTTP 响应
http响应由3个部分组成:响应行、响应头、响应体
响应行
格式:HTTP-Version Status-Code Reason-Phrase\r\n
HTTP-Version
主要有两个版本:HTTP/1.0
、HTTP/1.1
Status-Code
- 1xx:指示信息 – 表示请求已接收,继续处理
- 2xx:成功状态 – 表示请求已被成功接收、理解、接受
- 3xx:重定向状态 – 要完成请求必须进行更进一步的操作
- 4xx:客户端错误 – 请求有语法错误或请求无法实现
- 5xx:服务端错误 – 服务器未能实现合法的请求
Reason-Phrase
状态原因简述
完整示例:HTTP/1.1 200 OK\r\n
响应头
格式:Field: Value\r\n
(Field不区分大小写)
响应体
- 响应体和响应头之间须用
\r\n
分隔,响应体是可选的 - 如果存在响应体,且
Connection: Keep-Alive
,则需要指明数据长度,具体同上