HTTP 协议:请求报文与响应报文
HTTP协议概述
- 概述
- hyper text transfer protocol : 超文本传输协议,
- 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
- 它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文。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 年开发的新协议 QUIC
- HTTP/3 是继 HTTP/1.1 和 HTTP/2之后的第三次重大修订。
- HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。
- 目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。
- 会话方式
- 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
- HTTP1.0和HTTP1.1的区别
- 在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。
- 在浏览器中通过F12工具抓取请求响应报文包
- 几乎所有的PC端浏览器都支持了F12开发者工具,只不过不同的浏览器工具显示的窗口有差异
HTTP请求报文
概述
- 请求行
- 请求头(可选)
- 空行
- 请求体
请求行
内容 说明 GET 请求的方式。 url 请求的路径。 HTTP/1.1 使用的协议,及协议的版本。 请求头
内容 说明 Accept 告知服务器,客户浏览器所支持的MIME类型。 Accept-Encoding 告知服务器,客户浏览器所支持的压缩编码格式。最常用的就是gzip压缩。 Accept-Language 告知服务器,客户浏览器所支持的语言。一般都是zh_CN或en_US等。 Referer 告知服务器,当前请求的来源。 只有当前请求有来源的时候,才有这个消息头。从地址栏输入的没有来源。 作用:1 投放广告 2 防盗链 Content-Type 告知服务器,请求正文的MIME类型。 Content-Length 告知服务器,请求正文的长度。 User-Agent 浏览器相关信息 Connection: Keep-Alive 连接的状态:保持连接 If-Modified-Since 告知服务器,客户浏览器缓存文件的最后修改时间。 Cookie 会话管理相关,非常的重要。 请求正文----->格式是键值对
- get请求的请求参数在请求路径后面
- post请求的请求参数在请求正文中
HTTP请求方式
请求方式
请求方式 说明 GET 从服务器获取数据(查询) POST 将数据保存到服务器 PUT 命令服务器对数据执行更新 DELETE 命令服务器删除数据 - HEAD、CONNECT、OPTIONS、TRACE
GET和POST
GET POST 没有请求体 有请求体 请求参数附着在URL地址后面,存在安全隐患 请求参数放在请求体中,比较安全 在URL地址后面携带请求参数,数据容量非常有限。如果数据量大,那么超出容量的数据会丢失 请求体发送数据的大小没有限制 发送String类型的数据 可以发送各种不同类型的数据
HTTP响应报文
概述
- 响应行
- 若干响应头(可选)
- 空行
- 响应体(可选)
响应行
内容 说明 200 响应状态码 响应头
消息头 说明 Location 请求重定向的地址,与302配合使用 Content-Type 告知浏览器,响应正文的MIME类型 Content-Length 告知浏览器,响应正文的长度。 Content-Encoding 告知浏览器,响应正文的压缩格式。gzip压缩。 Content-Language 告知浏览器,响应正文的语言 Content-Disposition 告知浏览器,以下载的方式打开响应正文 Refresh 定时刷新 Last-Modified 服务器资源的最后修改时间 Set-Cookie 会话管理相关,非常的重要 Expires:-1 服务器资源到客户浏览器后的缓存时间 Catch-Control: no-catch 不要缓存,http1.1 Pragma:no-catch 不要缓存,http1.0 响应体
- 由服务端发送给浏览器的正文数据,用于在页面上解析显示
HTTP响应状态码
- 概述
- 200 : 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
- 302 : 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
- 304 : 请求资源未发生变化,使用了本地缓存
- 404 : 请求的资源没有找到,说明客户端错误的请求了不存在的资源;
- 405 : 请求的方式不允许
- 500 : 请求资源找到了,但服务器内部出现了错误;
