Javaweb - 9 HTTP 协议
HTTP 协议在前面计算机网络中有所提及,这里进行一定的复习~
目录
HTTP 简介
发展历程
HTTP 协议的会话方式
HTTP1.0 和 HTTP1.1 的区别
在浏览器中通过 F12 抓取请求响应报文包
请求和响应报文
报文的格式
编辑
请求报文
客户端发送给服务端的报文:
请求行:
请求头:
请求体:
响应报文
响应报文格式
响应行:
响应头:
响应体:
响应状态码:
完!
HTTP 简介
HTTP 超文本传输协议(Hyper Text transfer protocol),是一个属于应用层的,面对对象的协议,适合于分布式超媒体信息系统。
它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网的数据传送协议。客户端和服务端通信时传输的内容,我们一般称之为报文。
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的安全版本。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 年开发的新协议 OUIC。HTTP/3 是继 HTTP/1.1和 HTTP/2之后的第三次重大修订。
HTTP/3 带来了革命性的变化,以提高Web性能和安全性。设置 HTTP3 网站需要服务器和浏览器支持。
目前,谷歌云、Cloudflare和Fastly支持HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。
HTTP 协议的会话方式
浏览器与服务器之间的通信要经历四个步骤:
浏览器与 WEB 服务器的连接过程是短暂的,每次连接都只处理一个请求和响应,对每一个页面的访问,浏览器和 WEB 服务器都要建立一次单独的连接。
浏览器到 WEB 服务器之间的所有通讯都是完全独立分开的请求和相应对。
HTTP1.0 和 HTTP1.1 的区别
HTTP1.1 增加了长连接的功能。
在 HTTP1.0 版本中,浏览器请求一个带有图片的网页,会由于下载图片,而和服务器之间再开启一个新的连接。但是,在 HTTP1.1 版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。
还有就是在 HTTP1.1 中,浏览器有了缓存的功能,即加载过的资源就不用重新加载了,节省了带宽,提高了响应速度。
在浏览器中通过 F12 抓取请求响应报文包
几乎所有的 PC 端浏览器都支持 F12 开发者工具。
请求和响应报文
报文的格式
主体上,报文分为报文首部和报文主体,中间用空行隔开
报文首部,又可以继续细分为“行”和“头”
请求报文
客户端发送给服务端的报文:
请求报文格式:
请求首行(请求行):GET / POST 资源路径?参数 HTTP/1.1
请求头信息(请求头)
空行
请求体
请求行:
请求方式 资源路径 协议版本号
例如:GET /web01/login.html?username=admin&password=123456 HTTP/1.1
请求头:
-主机虚拟地址
Host:localhost:8080
-长连接
Connection:keep-alive
-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]Upgrade-Insecure-Requests:1
-用户系统信息
User-Agent: Mozilla/5.8 (Windows NT 6.1; WOW64)AppleWebKit/537.36 (KHTML, 1ike 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-CN,zh;g=0.9,en-uS;q=0.8,en;q=0.7
请求体:
使用 form 表单发送 POST 请求,请求体中才会有数据
响应报文
响应报文格式
响应首行(相应行):协议/版本号 状态码 状态码描述
响应头信息(响应头)
空行
响应体
响应行:
协议及版本,响应状态码,状态描述
HTTP/1.1 200 OK (Tomcat10 省略)
响应头:
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小时的时区差
Connection:keep-alive 长连接
Keep-Alive:timeout=20 长连接的持续时间
响应体:
即是需要浏览器解析使用的内容(如果响应的是 html 页面,最终响应的内容会被浏览器显示到页面中)
<!--需要浏览器解析使用的内容[如果响应的是htm1页面,最终响应体内容会被浏览器显示到页面中1-->
<!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:请求的资源找到了,但服务器内部出现了错误