HTTP详解

HTTP基本原理

1、 URL

URL 的全称为 Universal Resource Locator,即统一资源定位符。

例子:
https://www.baidu.com/item/10056474?fr=aladdin

http://IP:port/资源路径/?wd=python#flg

协议 :这代表网页使用的请求协议 (https和http)

域名部分:该URL的域名部分为“www.baidu.com”。一个URL中,也可以使用IP地址作为域名使用:202.108.22.5

端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,可以省略端口部分。

资源部分:从域名后的最后一个“/”开始到“?”为止,是资源部分

查询参数:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分

2、超文本

其英文名称叫作 hypertext,我们在浏览器里看到的网页就是超文本解析而成的,其网页源代码是一系列 HTML 代码,里面包含了一系列标签,比如 img 显示图片,p 指定显示段落等。

浏览器解析这些标签后,便形成了我们平常看到的网页,而网页的源代码 HTML 就可以称作超文本

3、HTTP和HTTPS

在百度的首页 https://www.baidu.com/,中,URL 的开头会有 http 或 https,这个就是访问资源需 要的协议类型,有时我们还会看到 ftp、sftp、smb 开头的 URL,那么这里的 ftp、sftp、smb 都是指 的协议类型。我们平时比较常见的是http和https这两种协议,我们在这里首先来了解一下这 两个协议的含义。

  • HTTP 的全称是 Hyper Text Transfer Protocol,中文名叫做超文本传输协议
    • 超文本传输协议
    • 默认端口号:80
  • HTTPS 的全称是 Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的
    • HTTP + SSL(安全套接字层),即带有安全套接字层的超本文传输协议
    • 默认端口号:443
  • HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,简称为 HTTPS

4、HTTP的前世今生

超文本传输协议

http是一种用于分布式协作超媒体信息系统的应用程序级协议。它是一种通用的、无状态的协议,可用于超文本之外的许多任务,例如域名服务器和分布式对象管理系统。

HTTP 允许浏览器和服务器进行通信。它构成了 Web 服务器执行最基本操作的基础。HTTP 经历了多个阶段。超文本传输协议第 3 版(HTTP/3)的最新草案于 2021 年 5 月 27 日发布。

HTTP/0.9

蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在 1989 年创建了单行 HTTP 协议。它只是返回一个网页。这个协议在 1991 年被命名为 HTTP/0.9。

它是一个简单的一页规范。它只有一种方法,GET后跟文档地址和可选的端口地址,并以回车 (CR) 和换行 (LF) 结束。

HTTP/0.9 有四个术语:连接、断开连接、请求和响应。

没有 HTTP 标头,没有状态/错误代码,没有 cookie,也没有其他现代功能。

HTTP/0.9 建立在 TCP(传输控制协议)之上。响应后立即终止连接。

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 年初发布,距HTTP/1.0 仅几个月之后。

HTTP / 1.1支持七种请求方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE。

img

HTTP/1.1 有额外的术语:表示、内容协商、变体、可缓存、第一手、显式过期时间、启发式过期时间、年龄、生命周期、语义透明和验证器。

HTTP/1.1 是 HTTP 1.0 的增强:

虚拟主机允许从单个 IP 地址提供多个域。

持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求。

缓存支持节省了带宽并使响应速度更快。

在这里插入图片描述

分块编码允许在知道其总长度之前发送响应。这将启用动态生成的页面。

内容协商,包括语言、编码或类型,允许客户端和服务器就最适合交换的内容达成一致。

HTTP/1.1 在接下来的 15 年左右将非常稳定。

在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP 的安全版本。

自 2000 年以来,Web API 的真正潜力已得到认可。Roy Fielding 领导的一组专家发明了 REST,即表示状态转移。REST 是一种软件架构风格,它定义了一组在创建 Web 服务时要遵守的约束和标准。REST API 在 HTTP/1.1 及更高版本上工作。

HTTP/2

HTTP/2 旨在更有效地使用网络资源并减少延迟感知。它引入了一个新的二进制帧层,它不向后兼容 HTTP/1.x 服务器和客户端。

HTTP/2 的初稿使用 SPDY 作为其规范草案的工作基础。该规范于 2015 年发布。它具有附加术语:连接错误、端点、帧、对等方、接收方、发送方、流、流错误、中介和有效载荷主体。

HTTP/2 构建了对流量的并行化、优先化和流量控制:

  • 通信是通过单个 TCP 连接与任意数量的双向流进行的。

  • 它是一个多路复用协议。并行请求通过同一连接处理。

  • 它提供了将一种资源优先于另一种资源的能力,这种优先级通过在响应头的字段中设置来实现。

  • 它支持服务器向客户端推送资源,以提高性能。

  • 它使用二进制协议而不是文本。这使其更加机器可读并提高了性能。同时也提高了整体的安全性。

  • 请求和响应头被压缩,以减少通信的开销。
  • 帧在流上传送,数据帧的有效载荷受到流控制的限制,以确保相应的流量控制和优先级设置得到有效的实施。
什么叫流
  • 正式的定义:

在HTTP/2协议中,流(Stream)是指建立在单个TCP连接上的双向数据传输通道。

每个流都由一个唯一的标识符(Stream ID)标识,而且可以传输多个帧(Frame),

每个帧都包含着特定的信息,例如请求、响应或数据块等。

在HTTP/2中,所有的通信都是在流上进的,而不是像HTTP/1.x那样在连接上进行。

这种流的方式支持多路复用,使得多个请求和响应可以同时在同一连接上进行,从而提高了性能。

  • 打个比喻理解:

我们可以将HTTP/2中的流与高速公路上的车道进行类比。

在高速公路上,每个车道都是单向的,而在HTTP/2中,每个流都是双向的。

每个流都由唯一的标识符标识,就像每个车道都有一个唯一的编号一样。

在高速公路上,车辆可以通过同一车道进行并行行驶,而在HTTP/2中,多个请求和响应也可以通过同一个流进行并行传输。

通过使用多路复用技术,HTTP/2可以同时处理多个请求和响应,从而加快了页面加载速度,提高了性能。

在高速公路上,车道上的交通可以通过交通信号灯来控制,以确保交通安全和道路效率。

类似地,在HTTP/2中,每个流的数据流量也受到流控制的限制,以确保通信的效率和可靠性。

HTTP/3

随着越来越多的智能手机和便携式设备的出现以及越来越多的设备实现无线连接,整体网络响应时间也有所增加。

HTTP/2 的队头阻塞问题会导致缓慢且无响应的用户体验。

由于 TCP 保证发送和接收数据包的顺序,丢失的数据包将停止所有流,即使它可能只影响其中一个。

HTTP/2 没有强制加密,容易受到流重用攻击以及压缩页头和 cookie 攻击。

HTTP/3 可以解决这些问题。

HTTP/3 是继 HTTP/1.1 和 HTTP/2之后的第三次重大修订。

目前,它仍然是一个草案。最新规范于 2021 年 5 月 27 日发布。它具有附加术语:中止、HTTP/3 连接和内容。

HTTP/3 是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012 年开发的新协议 QUIC。QUIC 运行在 UDP(用户数据保护协议)之上。 QUIC 提供本地多路复用,丢失的数据包仅影响数据丢失的流程。这解决了 HTTP/2 中的队头阻塞问题。

QUIC 为流数据和在流上发送的所有 HTTP/3 帧类型提供流量控制。

因此,所有帧头和有效载荷都受到流量控制。

请求和响应头由 QPACK 压缩,而不是 HTTP/2 中的 HPACK。

几个 HTTP/3 帧用于管理服务器推送。

HTTP/3 包括 TLS 1.3 加密。实际上,它充当 HTTPS。

HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。

目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。

Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。

我们可以去caniuse网站检查浏览器的支持性。

结论

我们已经走过了 HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2 和 HTTP/3。

未来的还会有哪些HTTP协议,我们无法预知,但是可以想到的是,一定会有新的协议出现,因为技术前进的脚步是从来不会停止的。

5、HTTP的请求过程

在这里插入图片描述

  1. 浏览器先向地址栏中的url发起请求,并获取响应
  2. 在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
  3. 浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
  4. 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染

注意:

但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应(该响应的内容可以是html,css,js,图片等)

浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样

所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取

今天的分享就到这里吧
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值