HTTP?HTTPS?HTTP2.0

Http 

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式、超媒体信息系统的应用层协议。它基于TCP/IP通信协议来传递数据,如HTML文件、图片文件等。以下是HTTP的详细解析:

一、HTTP的基本概述

  • 定义:HTTP是一种用于从网络传输超文本到本地浏览器的传输协议,它定义了客户端与服务器之间请求和响应的格式。
  • 版本:HTTP有多个版本,包括HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3。每个版本都在前一版本的基础上进行了改进和增强。

  • 特点:HTTP是无连接的,即每次连接只处理一个请求,服务器处理完客户请求并收到客户的应答后,就断开连接;HTTP是无状态的,即HTTP协议对事务处理没有记忆能力;HTTP是媒体独立的,只要客户端和服务器知道如何处理数据内容,任何的数据内容都可以通过HTTP传送。

二、HTTP的工作流程

HTTP的工作流程通常包括以下几个步骤:

  1. 建立连接:客户端与服务器之间建立连接,这通常基于TCP/IP协议。在HTTP/2和HTTP/3中,则使用了更先进的传输层协议。
  2. 发送请求:客户端向服务器发送请求,请求中包含要访问的资源的URL、请求方法(如GET、POST、PUT、DELETE等)、请求头以及可选的请求体。
  3. 处理请求:服务器接收到请求后,根据请求中的信息找到相应的资源,执行相应的处理操作。
  4. 发送响应:服务器将处理后的结果封装在响应中,并将其发送回客户端。响应包含状态码、响应头以及可选的响应体。
  5. 关闭连接:在完成请求-响应周期后,客户端和服务器之间的连接可以被关闭,除非使用了持久连接(如HTTP/1.1中的keep-alive)。

三、HTTP的请求与响应

1. HTTP请求

HTTP请求由以下几个部分组成:

  • 请求行:包含请求方法、请求的URL和HTTP协议版本。
  • 请求头:包含请求的附加信息,如Accept、User-Agent、Connection等。
  • 空行:用于分隔请求头和请求体。
  • 请求体:可选的,对于POST或PUT请求,请求体中包含要发送给服务器的数据。

2. HTTP响应

HTTP响应也由以下几个部分组成:

  • 状态行:包含HTTP协议版本、状态码和状态消息。状态码用于指示请求的成功或失败。
  • 响应头:包含响应的附加信息,如Content-Type、Content-Length、Date等。
  • 空行:用于分隔响应头和响应体。
  • 响应体:可选的,包含服务器返回给客户端的数据,如HTML页面、图像数据等。

四、HTTP的请求方法

HTTP定义了一组请求方法,以表明要对给定资源执行的操作。常见的请求方法包括:

  • GET:请求一个指定资源的表示形式。
  • POST:将实体提交到指定的资源,通常会导致服务器上的状态变化或副作用。

  • PUT:向服务器上传资源,通常用于更新已存在的资源或创建新的资源。
  • DELETE:删除指定的资源。
  • HEAD:请求一个与GET请求的响应相同的响应头,但没有响应体。
  • OPTIONS:请求服务器返回支持的HTTP方法和其他选项。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • PATCH:用于对资源应用部分修改。

五、HTTP状态码

HTTP状态码由三个十进制数字组成,用于指示请求的成功或失败。常见的状态码类型包括:

  • 1xx(信息性状态码):表示接收的请求正在处理。
  • 2xx(成功状态码):表示请求正常处理完毕。
  • 3xx(重定向状态码):需要后续操作才能完成这一请求。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。

六、HTTPS与HTTP的区别

HTTPS(Hypertext Transfer Protocol Secure)是HTTP的安全版本,它在HTTP下增加了SSL/TLS协议,提供了数据加密、完整性校验和身份验证。HTTPS和HTTP的主要区别包括:

  • 端口号:HTTP通常使用端口80,而HTTPS通常使用端口443。
  • 安全性:HTTP是明文传输,而HTTPS是加密传输,更加安全。
  • 性能:由于加密和解密过程,HTTPS可能会增加CPU的使用率和延迟,

Http1与HTTP2 

http1.0与http1.1

  • http1.0:每次请求都需要重新建立tcp连接,请求完后立即断开与服务器连接,这很大程度造成了性能上的缺陷,http1.0被抱怨最多的就是连接无法复用。
  • http1.1:引入了长连接(keep-alive),相较于1.0减少了连接和关闭的延迟,提高了效率,但是若干个请求还是需要串行排队处理,如果一旦某个请求超时,后面的就会被阻塞,也就是常说的线头阻塞。

1. 传输格式

  • HTTP1:使用文本格式(通常是ASCII)来传输数据。这种文本格式虽然方便调试,但解析起来可能不够高效,且可能因为编码问题导致解析错误。
  • HTTP2:引入了二进制格式传输数据。二进制格式不仅解析起来更高效,而且更加健壮,减少了因编码问题导致的错误。

2. 连接管理

  • HTTP1:在HTTP1.0中,每次请求都需要重新建立TCP连接,并在请求完成后立即断开连接。HTTP1.1虽然引入了长连接(keep-alive),但多个请求仍然需要串行排队处理,存在队头阻塞问题。
  • HTTP2:通过引入流(stream)和帧(frame)的概念,实现了多路复用。这意味着一个TCP连接可以同时承载多个请求和响应,大大提高了连接的利用率和效率。此外,HTTP2还解决了HTTP1中的队头阻塞问题,因为多个请求和响应可以并行处理。

3. 首部压缩

  • HTTP1:HTTP1.x的头部信息通常很大,且每次请求都会重复发送相同的头部信息,这浪费了带宽并增加了延迟。
  • HTTP2:通过HPACK算法对头部进行压缩,通讯双方各自缓存一份header请求头表,避免了重复的header传输,并显著减少了需要传输的头部数据量。这不仅节省了带宽,还提高了传输效率。

4. 服务器推送

  • HTTP1:不支持服务器主动推送资源。客户端需要明确请求所需的资源,然后服务器才会响应这些请求。
  • HTTP2:支持服务器推送(server push)功能。当客户端请求某个资源时,服务器可以预测并主动推送与该资源相关的其他资源,而无需客户端再次发起请求。这可以减少延迟并提高页面加载速度。

5. 性能提升

  • HTTP2:通过上述的改进(如二进制格式、多路复用、首部压缩和服务器推送),HTTP2在性能上有了显著提升。它不仅减少了延迟和带宽消耗,还提高了网页的加载速度和用户体验。

综上所述,HTTP2相比HTTP1在传输格式、连接管理、首部压缩、服务器推送和性能提升等方面都有显著的优势。这些优势使得HTTP2成为现代Web开发中不可或缺的一部分。在前端面试中,了解这些区别有助于更好地理解HTTP协议的发展趋势和前端性能优化的策略。

一次完整的HTTP请求所经历的步骤 

 

 

1. URL输入与解析

  • URL输入:用户在浏览器的地址栏中输入www.baidu.com并按下回车键。
  • URL解析:浏览器检查输入的URL是否合法且完整。如果不完整,浏览器会尝试补全(虽然对于www.baidu.com这样的常见网址,通常不需要补全)。如果URL不合法,浏览器可能会将其作为搜索条件提交给默认搜索引擎。

2. DNS域名解析

  • 查询本地缓存:浏览器首先检查其缓存和本地hosts文件中是否有该域名的IP地址记录。
  • 查询本地DNS服务器:如果本地缓存中没有找到,浏览器会向配置的本地DNS服务器发起查询请求。
  • 递归查询:如果本地DNS服务器也没有该域名的记录,它会向根DNS服务器发起查询,并逐步向下(顶级域DNS服务器、权威DNS服务器)直到找到对应的IP地址。
  • 获取IP地址:最终,DNS查询会返回www.baidu.com对应的IP地址(例如,220.181.27.48,但请注意IP地址可能会随时间变化)。

3. 建立TCP连接

  • 三次握手:浏览器使用获得的IP地址和服务器默认的HTTP端口(通常是80端口,对于HTTPS则是443端口)进行TCP连接。TCP连接通过三次握手建立,确保双方通信的可靠性。
    • 第一次握手:客户端发送SYN报文段到服务器,并进入SYN_SENT状态。
    • 第二次握手:服务器收到SYN报文段后,发送SYN+ACK报文段给客户端,并进入SYN_RCVD状态。
    • 第三次握手:客户端收到服务器的SYN+ACK报文段后,发送ACK报文段给服务器,然后进入ESTABLISHED状态,服务器收到ACK报文段后也进入ESTABLISHED状态,此时TCP连接建立成功。

4. 发送HTTP请求

  • 构建HTTP请求报文:浏览器根据用户输入的URL和可能的查询参数等,构建HTTP请求报文。请求报文包括请求行(如GET / HTTP/1.1)、请求头(如Host: www.baidu.comUser-Agent: ...等)和请求体(对于GET请求,请求体通常为空)。
  • 发送请求:浏览器通过TCP连接将HTTP请求报文发送给服务器。

5. 服务器处理请求并返回响应

  • 处理请求:服务器收到HTTP请求后,根据其请求行和请求头等信息,处理请求并生成相应的响应数据。
  • 构建HTTP响应报文:服务器构建HTTP响应报文,包括状态行(如HTTP/1.1 200 OK)、响应头(如Content-Type: text/html等)和响应体(如HTML文档)。
  • 发送响应:服务器通过TCP连接将HTTP响应报文发送给浏览器。

6. 浏览器解析渲染页面

  • 解析HTML:浏览器接收到HTTP响应后,首先解析HTML文档,构建DOM树。
  • 解析CSS:浏览器接着解析CSS样式表,构建CSSOM树。
  • 构建渲染树:浏览器将DOM树和CSSOM树合并成渲染树。
  • 渲染页面:浏览器根据渲染树将页面绘制到屏幕上。

7. 断开TCP连接

  • 四次挥手:HTTP/1.1中,默认情况下会保持TCP连接(即使用长连接),以便在同一连接上发送多个请求和响应。然而,当不需要再发送请求时,TCP连接会通过四次挥手来优雅地关闭。
    • 第一次挥手:客户端发送FIN报文段给服务器,并进入FIN_WAIT_1状态。
    • 第二次挥手:服务器收到FIN报文段后,发送ACK报文段给客户端,并进入CLOSE_WAIT状态。客户端收到ACK报文段后进入FIN_WAIT_2状态。
    • 第三次挥手:服务器完成所有数据传输后,发送FIN报文段给客户端,并进入LAST_ACK状态。
    • 第四次挥手:客户端收到FIN报文段后,发送ACK报文段给服务器,并进入TIME_WAIT状态。服务器收到ACK报文段后关闭连接,客户端在经过一段时间(通常是2MSL,即最大报文生存时间)后也关闭连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YAML在Spring Boot中的应用

1. 基本语法 YAML使用缩进来表示层级关系,通常使用空格进行缩进(推荐使用2个空格)。 基本语法示例: key: value nested:key: value list:- item1- item22. 配置文件命名 在Spring Boot中,YAML配置文件通常命名为 a…

手撕C++入门基础

1.C介绍 C课程包括:C语法、STL、高阶数据结构 C参考文档:Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …

RDKit在数据科学中的应用|药物筛选中的数据清理与标准化

在化学信息学和药物研发的过程中,分子数据的质量至关重要。数据清理与标准化是确保分子库数据一致性、可靠性和可比较性的关键步骤。RDKit 提供了丰富的工具,帮助用户清理和标准化分子数据,从而提高下游分析和建模的准确性。 1 数据清理的重要性 分子数据通常来自多种来源…

获取操作系统的信息(Go语言)

在 Go 语言中,你可以使用 runtime 和 os 包来查看操作系统的信息。以下是一些常见的操作系统信息获取方法: 1. 获取操作系统类型和架构信息 Go 的 runtime 包提供了基本的操作系统和架构信息: package mainimport ("fmt""r…

c_cpp_properties.json、launch.json、 tasks.json

在 Visual Studio Code 中,c_cpp_properties.json、launch.json 和 tasks.json 是三个重要的配置文件,它们的作用如下: c_cpp_properties.json: 这个文件用于配置 C/C 扩展的 IntelliSense、编译器路径和包括路径等。它帮助 VS Co…

Unity Dots学习 (一)

先学习怎么使用,再研究底层代码。Dots大家都有所耳闻。一直没时间研究,最近研究一下 看上图可知,哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料: 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…

快速搭建全向轮小车

总体介绍 使用两块ordive控制ros-mobile app进行控制,odrive通过python可以轻松控制,ros-mobile可以进行与电脑的ros连接充当一个遥控器。 记录代码 读取rosmobile的遥控数据 #!/usr/bin/env python3import threading import time from queue import…

景联文科技:图像标注的类型有哪些?

图像标注是计算机视觉领域中一个非常重要的步骤,它是创建训练数据集的关键组成部分,主要用于帮助机器学习算法理解图像内容。 以下是图像标注的一些主要类型: 1. 边界框标注: • 这是最常见的标注方式之一,通常用于…

多字段聚合查询在Elasticsearch中的实践

Elasticsearch是一个功能强大的搜索引擎,它不仅支持全文搜索,还提供了丰富的聚合功能。聚合可以帮助我们对数据进行分组和统计,从而得到有意义的分析结果。本文将通过Java代码示例,介绍如何在Elasticsearch中实现多字段的聚合查询…

第四范式发布AI+5G视频营销产品 助力精准获客与高效转化

产品上新 Product Release 今天,第四范式AI5G视频电话互动营销产品全新发布。 相较于以往销效率低、互动差、转化差的传统电话外呼和短信营销方式,视频电话互动营销基于AI、5G等技术,可让用户接听电话时观看个性化视频广告并实时互动&#xf…

Unity的UI设计

目录 创建和布局 布局与交互 性能优化 最佳实践 学习资源 Unity UI Toolkit与uGUI和IMGUI之间的具体区别和适用场景是什么? Unity UI Toolkit uGUI IMGUI 如何在Unity中实现响应式UI设计以适应不同设备尺寸? Unity UI性能优化的最新技术和方法…

机器学习:逻辑回归算法实现鸢尾花预测和银行数据处理

1、鸢尾花预测 1、特征选择 2、对特征处理 trainpd.read_excel("鸢尾花训练数据.xlsx") testpd.read_excel("鸢尾花测试数据.xlsx") x_traintrain[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]] y_tr…

Vue 生命周期详解含demo、面试常问问题案例

Vue 生命周期详解、面试常问问题案例 含 demo 文章目录 Vue 生命周期详解、面试常问问题案例 含 demo一、Vue 生命周期是什么二、Vue 中如何使用生命周期钩子1. **beforeCreate**2. **created**3. **beforeMount**4. **mounted**5. **beforeUpdate**6. **updated**7. **beforeD…

Grafana学习笔记

介绍 Grafana 1.1 什么是 Grafana? Grafana 是一个开源的数据可视化和监控平台,专门设计用于从各种数据源中收集和展示数据。它最初作为一个图表生成工具,用于显示时间序列数据,但已经发展成一个功能强大且灵活的仪表板工具&…

Leetcode 3259. Maximum Energy Boost From Two Drinks

Leetcode 3259. Maximum Energy Boost From Two Drinks 1. 解题思路2. 代码实现 题目链接:3259. Maximum Energy Boost From Two Drinks 1. 解题思路 这一题就是一个动态规划,分别考察下两个数列的选择即可。 2. 代码实现 给出python代码实现如下&a…

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…

SQL - 数据类型

字符串类型 char(10),存储固定长度字符串 varchar(255),存储可变长度字符串 mediumtext,中文本,对于存储JSON对象、SCV字符串很好使 longtext,长文本,可以很好地存储教本或许多年地日志文件 tinytext&#…

php-xlswriter实现数据导出excel单元格合并,内容从指定行开始写

最终效果图: 代码: public function export_data() {$list $this->get_list_organ();$content [];$content[] []; // 第2行不设置内容,设置为空foreach ($list as $key > $value) {$content[] [$value[organ_name], $value[clas…

动态规划——背包问题(01背包、完全背包,分组背包与二进制优化)

本蒟蒻写二进制优化开始的时候写昏了,并且昏了一下午。但好在有神犇救命,这篇博客才得以面世——躲着人群 一、01背包 概述: 其常见的问题形式为:给出n个物品,每个物品有对应的价值和体积。给出背包容量后求不超过背…

象棋布局笔记

文章目录 布局中炮(当头炮)当头炮的缺点如何应对平车压马平炮对车的理解中炮对屏风马急进中兵 中炮盘头马盘头马两翼突破 盖马三锤 反宫马克制反宫马 顺手炮 士角炮56炮破解56炮 小当头 屏风马7卒分支3卒分支屏风马红车二进六败招(黑未挺7卒前直接进车)马八进九变车三退一变马二…