和自己的情绪共处,永远保持乐观
—— 24.9.26
一、HTTP简介
HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几十年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文。HTTP协议就是规定报文的格式。HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为“请求报文",服务器发送给客户端的称为"响应报文"。
二、发展历程
① HTTP/0.9 :
蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在 1989年创建了单行 HTTP 协议。它只是返回一个网页。这个协议在 1991年被命名为 HTTP/0.9。
② HTTP/1.0
1996年,HTTP/1.0发布。该规范是显著扩大,并且支持三种请求方式:GET,HEAD,和POST。
HTTP/1.0 相对于 HTTP/0.9 的改进如下:
每个请求都附加了 HTTP 版本;
在响应开始时发送状态代码;
请求和响应都包含 HTTP 报文头;
内容类型能够传输 HTML 文件以外的文档;但是,HTTP/1.0 不是官方标准。
③ HTTP/1.1:
HTTP 的第一个标准化版本 HTTP/1.1(RFC 2068)于1997 年初发布,
支持七种请求方法:OPTIONS,GET, HEAD,POST,PUT,DELETE,和TRACE
HTTP/1.1 是 HTTP 1.0 的增强:
虚拟主机允许从单个IP地址提供多个域:持久连接和流水线连接允许Web浏览器通过单个持久连接发送多个请求;
缓存支持节省了带宽并使响应速度更快;。
HTTP/1.1 在接下来的 15 年左右将非常稳定。在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP的安全版本。
TomCat默认使用HTTP/1.1协议
④ HTTP/2:
由IETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使Web应用更加快速、高效和可靠。
多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量。二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。
头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。
服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。改进的安全性:HTTP/2默认使用TLS(Transport Layer Security)加密传输数据,提高了安全性。
兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1共存,服务器可以同时支持 HTTP/1.1和 HTTP/2。如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。
⑤ HTTP/3:
于 2021年5月27日发布,HTTP/3是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012年开发的新协议 QUIC。
HTTP/3 是继 HTTP/1.1和 HTTP/2之后的第三次重大修订。HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。
目前,谷歌云、Cloudflare和Fastly支持HTTP/3。Chrome、Firefox、Edge、Opera和一些移动浏览器支持 HTTP/3。
三、HTTP协议的会话方式
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
http/1.1协议特点
1.交互的方式
请求 永远都是客户端向服务端发送
响应 永远都是服务端向客户端返回
2.数据的格式
请求时发送的数据称之为请求报文
响应时返回的数据称之为响应报文
报文的规定格式:
报文首部 请求报文 响应报文
行 请求行 相应行
头 请求头 响应头
报文主体 请求体 响应体
3.http长连接和短链接的问题
http 应用层协议(只规定了数据格式,如何发送不管) http/tcp/ip
tcp 传输层协议 (默认使用TCP协议) 面向连接的协议
ip 网络层协议 (确定网络层传输实体)
4.tcp协议的三次握手和四次挥手
因为要创建链接,所以有面向连接的协议:tcp协议,所以区分了长短链接、持久链接之分
长短连接的区分:短链接建立一次请求后就关闭一次链接,长链接直到所有请求完成后才关闭链接,减少了连接的创建次数,减少了缓存
四、请求和响应报文
1.报文的格式
报文分为报文首部和报文主体:行、头、体
报文首部:服务器端或客户端需处理的请求或响应的内容及属性
报文主体:应该被发送的数据
报文首部可继续细分为“行”和“头”
2.请求报文
客户端发给服务端的报文
请求报文格式:
请求首行(请求行);GET/POST 资源路径?参数 HTTP/1.1
请求头信息(请求头)
空行
请求体
请求行:请求方式、资源路径、协议与版本
GET /05_web_tomcat/login_success.html username=admin password=123213 HTTP/1.1
请求头:
- 主机虚拟地址
Host: localhost:8080
- 长连接
Connection: keep-alive
- 请求协议的自动升级 http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的
Upgrade-Insecure- e uests: 1
- 用户系统信息
User-Agent: Mozilla/5.0 ( Windows T 6.1; O 64) AppleWebKit/537.36 ( HTML, like Gecko)
Chrome/68.0.3440.75 Safari/537.36
- 浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,*/*;q=0.8
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]: 可以通过此路径跳转回上一个页面, 广告计费,防止盗链
Referer: http://localhost:8080/05_web_tomcat/login.html
- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br
- 浏览器支持的语言
Accept-Language: zh-C ,zh; q=0.9,en-US; q=0.8,en; q=0.7
请求体:使用form表单发送POST请求,请求体中才有数据
3.响应报文
响应报文格式:
响应首行(响应行);协议/版本 状态码 状态码描述
响应头信息(响应头)
空行
响应体
响应行:
组成部分:
协议及版本HTTP/1.1
响应状态码 200
状态描述 OK(缺省)
HTTP/1.1 200 O (缺省)
响应头:
Server: Apache-Coyote/1.1 服务器的版本信息
Accept- anges: bytes
ETag: /"157-1534126125811"
Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT
Content-Type: text/html 响应体数据的类型浏览器根据类型解析响应体数据
Content-Length: 157 响应体内容的字节数
Date: Mon, 13 Aug 2018 02:47:57 GMT 响应的时间,这可能会有8小时的时区差
响应体:
<!--需要浏览器解析使用的内容如果响应的是html页面,最终响应体内容会被浏览器显示到页面中-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
恭喜你,登录成功了...
</body>
</html>
五、常见响应状态码
响应状态码:响应码对浏览器来说很要,它告诉浏览器响应的结果。比较有代表性的响应码如下:
200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
304:使用了本地缓存;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源
405:请求的方式不允许;
500:请求资源找到了,但服务器内部出现了错误;