- 超文本传输协议
- 一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)
- 是在 Web 上进行数据交换的基础,是一种 client-server 协议
- 请求通常是由像浏览器这样的接受方发起的
- 是一种可扩展的协议
- 是应用层的协议,通过TCP,或者是TLS-加密的TCP连接来发送,理论上任何可靠的传输协议都可以使用
- 它不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如HTML表单这样的信息。HTTP还可以根据网页需求,仅获取部分Web文档内容更新网页。
请求-响应
1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址
2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接
3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器
4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5. 释放 TCP连接;
6. 浏览器解析该 html 文本并显示内容;
HTTP报文
1.请求报文:
1.1. 客户端向服务端发送请求的信号
1.2. 组成:
请求行
组成:空格分隔,回车和换行符结尾
(1)请求方法:get、post、head、put、delete、options、trace、connect
get
1. 通常用于当客户端要从服务器中读取文档时
2. 请求参数和对应的值是跟在URL后面,比较不安全、不保密
通过问号(“?”)和and连接符(“&”)以及“=”号连接
3. 要求服务器将URL定位的资源放在响应报文的数据部分,
回送给客户端
4. get方法http报文没有请求体
5. 浏览器对地址的字符长度有限制,各自标准不同,一般
不超过1024个字符,传输的数据量比较大时不宜使用GET
5. 如 /index.php?id=100&slec=yes
post
传输的数据封装在报文的请求体,对传输的数据大小没有限制
可以传大量的数据,比较私密和安全。
(2)URL
(3)HTTP协议版本
如 GET /index.php HTTP/1.1
GET是请求方法,/index.php是URL,HTTP/1.1表示HTTP版本为1.1
请求头
告知服务器所有有关于客户端请求的信息
组成:键值对(key : value)
常用
Accept:客户端可识别的内容类型列
text/html,application/xhtml+xml,application/xml
Accept-Encoding:客户端可接受的编码压缩格式 gzip, deflate, br
Accept-Language:客户端可接受的自然语言
zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4;
Connection:连接方式
close(完成连接后断开)、keep-alive(和服务器连接持续有效,
如有后续请求可直接http正文传输,避免建立或重新建立连接)
Cookie:存储客户端扩展字段,向同一域名服务端发送该域的cookie
PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255;
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
User-Agent:用户电脑信息、浏览器信息等
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
空体
用户进行内容分割,表示请求头到此为止,下一行的内容不再是请求头
请求体
包含请求数据,使用GET方法时,没有请求体
2.响应报文:
2.1 服务端响应处理后回传给客户端的信号
2.2 组成:
状态行
格式为:HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服务器HTTP协议的版本
Status-Code表示服务器发回的响应状态代码
Reason-Phrase表示状态代码的文本描述
状态代码由三位数字组成,第一个数字定义响应的类别,有五种可能取值
1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。
各类型常见状态代码、状态描述的说明如下:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-
Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间
后可能恢复正常,如:HTTP/1.1 200 OK(CRLF)
响应头
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器
的信息和Request-URI进一步的信息
Server:包含处理请求的原始服务器的软件信息;
Date:服务器日期;
Content-Type:返回的资源类型 (MIME);
Connection:连接方式
close:连接已经关闭;
keep-alive:连接已保持,在等待本次连接的后续请求;
Cache-Control:缓存控制;
Expires:设置过期时间;
Set-Cookie:设置 Cookie 信息。
空行
内容分割,表示以下不再是响应头的内容
响应正文
服务器返回给浏览器的响应信息