当前位置: 首页 > news >正文

HTTP 1.0 2.0 3.0详解

HTTP

HTTP全称超文本传输协议,是一种属于应用层的通信协议。它允许将超文本标记语言文档(HTML)从Web服务器传输到客户端的浏览器。

HTTP报文结构

请求报文结构

请求方法:

  1. GET:一般用来请求已被URI识别的资源,指定的资源经服务器解析后返回响应内容;也可以用来提交表单信息,但不安全。
  2. POST:一般用来传输实体的主体,主要目的不是获取响应主体的内容
  3. PUT:从客户端向服务器传送更新内容,具有幂等性,多次PUT请求结果一样。
  4. HEAD:类似于GET请求,只不过返回的响应中没有具体内容,用于获取报头。
  5. DELETE:请求服务器删除指定资源
  6. OPTIONS:用来查询针对URI指定资源支持的方法
  7. TRACE:回显服务器收到的请求,主要用于测试和诊断
  8. CONNECT:开启一个客户端与请求资源的双向沟通通道,它可以用来创建隧道。应用于代理服务器的实现。

GET与POST的区别

  1. GET一般是去获取数据,也可以提交数据,但多数是获取。POST一般是去提交数据。
  2. GET用于提交时的URL有长度限制,POST没有长度限制,数据放在主体中。
  3. GET是幂等操作,多次请求不会对服务器造成改变,POST不是幂等的,多次请求会影响服务器。
  4. GET因为数据会放在URL中,安全性较差。POST安全性高一些。

常见请求报文字段

  • Accept :客户端希望获得资源的类型。
  • Accept-Encoding :客户端支持的压缩算法。
  • Accept-Language :客户端支持的语言。
  • Host :当前请求的域名。
  • Connection :客户端是否希望使用 TCP 长连接。
  • User-Agent :用户代理的信息。该字段标注了发送方的一些信息,你可以通过它来知道请求方的浏览器、操作系统版本等等

响应报文结构

状态码:
  • 1XX:代表请求已被接受,需要继续处理。
  • 2XX:代表请求已经被服务器端成功接收,操作被成功接收并处理。
  • 3XX:表示重定向到了一个新的URL。代表客户端需要采取进一步操作才能完成请求。
  • 4XX:表示请求错误。代表客户端发生了错误。
  • 5XX:表示服务器发生了错误
状态码示例
  • 200:请求已成功,响应头、响应体返回此响应
  • 202:已接受请求,但还没有处理完成。
  • 206:部分内容,服务器成功处理了GET的部分内容。(断点续传)
  • 301:永久移动,请求的资源被永久移到了新的URI,客户端使用新的URI
  • 302:临时移动,客户端继续使用原有的URI
  • 400:客户端请求错误,服务器无法理解
  • 401:请求需要用户身份认证
  • 403:服务器理解客户端请求,但是拒绝执行此请求
  • 404:服务器找不到客户端请求的资源
  • 500:服务器内部错误
  • 502:充当网关或代理服务器,从远端服务器收到一个无效的请求
常见响应报文字段
  • Content-Type :服务端返回的资源类型,可以带上使用的编码格式。
  • Content-Encoding :返回资源使用的压缩格式。
  • Content-Length :HTTP 消息体的长度。
  • Date :HTTP 响应报文生成的时间
  • Connection :服务端决定使用长连接还是短连接。
  • Server :使用了哪种服务器。
四种报文头

HTTP报文头大致分为四类:

  1. 通用报文头:既可以用在请求报文中,也可以用在响应报文中。
  2. 请求报文头
  3. 响应报文头
  4. 实体报文头
通用报文头

请求报文头

响应报文头

实体报文头

cookie和session

cookie

  1. HTTP 是无状态协议,说明它不能以状态来区分和管理请求和响应。Cookie 技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态。
  2. 服务器收到客户端请求,生成cookie,记录相应的信息,并在响应报文中附带上cookie。
  3. 客户端收到服务器的响应报文并保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie 值后发送出去。
  4. 服务器端发现客户端发送过来的Cookie 后,会对比服务器上的记录,最后得到之前的状态信息。

session

Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

鉴于HTTP 是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来。即,无法实现状态管理,因此即使当该用户下一次继续访问,也无法区分他与其他的用户。于是我们会使用Cookie 来管理Session,以弥补HTTP 协议中不存在的状态管理功能。

Session 管理及Cookie 状态管理(基于表单的认证)

  1. 客户端把用户ID 和密码等登录信息放入报文的实体部分,通常是以POST 方法把请求发送给服务器。而这时,会使用HTTPS 通信来进行HTML 表单画面的显示和用户输入数据的发送。
  2. 服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID 绑定后记录在服务器端。 向客户端返回响应时,会在首部字段Set-Cookie 内写入Session ID(如PHPSESSID=028a8c…)。
  3. 客户端接收到从服务器端发来的Session ID 后,会将其作为Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID 也随之发送到服务器。服务器端可通过验证接收到的Session ID 识别用户和其认证状态。

HTTP1.0

1.0的HTTP版本,是一种无状态,短连接的应用层协议。 HTTP1.0规定浏览器和服务器保持短暂的链接。

浏览器每次请求都需要与服务器建立一个TCP连接,服务器处理完成以后立即断开TCP连接(短连接),服务器不跟踪每个客户单,也不记录过去的请求(无状态)。

这种无状态性可以借助cookie/session机制来做状态记录和身份认证。

特点

  • 无状态:服务器不跟踪客户请求,不记录客户状态信息
  • 短连接/无连接:每次发送请求都要重新建立tcp请求,即三次握手,非常浪费性能
  • 不允许断点续传,而且不能只传输对象的一部分,要求传输整个对象

缺点:

  1. 无法复用连接:每次发送请求,都需要进行一次TCP连接,而TCP的连接释放过程又是比较费事的。这种无连接的特性会使得网络的利用率变低。
  2. 队头阻塞(head of line blocking):由于HTTP1.0规定下一个请求必须在前一个请求响应到达之前才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了。

HTTP1.1

HTTP1.1继承了HTTP1.0的简单,克服了HTTP1.0性能上的问题。

特点

  1. 连接方式 : HTTP 1.1 支持长连接,可以同时开启多个TCP连接。
  2. 管道(pipeline)网络传输:只要第一个请求发出去了,不必等其响应回来,就可以发第二个请求出去,可以减少整体的响应时间。
  3. 允许断点续传 :引入了 range 头域,它允许只请求资源的某个部分。

缺点

  1. 队头阻塞:服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据;
  2. 请求 / 响应头部(Header)未经压缩就发送:首部信息越多延迟越大。只能压缩 Body 的部分;
  3. 服务器只能被动响应:请求只能从客户端开始

HTTP2.0

特点

  1. 二进制分帧:HTTP2.0通过在应用层和传输层之间增加一个二进制分帧层,改进传输性能。
  2. 多路复用(并行传输):2.0将消息拆分成了一个个帧,针对不同的消息的帧,用独一无二的 流 ID 来区分,不同流的帧是可以乱序发送的,因此可以并发不同的流。服务器可以通过流 ID 将帧有序组装成消息。HTTP2.0依此可以实现并发交错地发送消息 。
    1. 流(stream):已建立连接上的双向字节流。
  1. 头部压缩:
    1. HTTP2.0使用编码压缩来减少需要传输的头部大小
    2. 通讯双方各自缓存一份header_files表,避免重复header的传输,减少需要传输的大小。

  1. 服务器推送 :服务器还可以主动向客户端推送资源。

缺点:

  1. TCP丢失重传导致阻塞:http 2.0虽然支持多路复用,但是所有消息的传输是基于一个TCP连接。TCP中前一个stream丢包重传导致后一个stream被阻塞,从而后面所有的消息传输都会阻塞。而HTTP1.1中可以开启多个TCP连接,就不存在这个问题。

HTTP3.0

Google搞了一个基于UDP协议的QUIC协议,并且命名为HTTP3.0

特点

  • 基于UDP的多路复用(无队头阻塞):基于UDP,一个连接上的多个stream之间没有依赖,即使丢包,只需要重发丢失的包即可,不需要重建整个连接。不会导致其他的消息被阻塞。
  • 更快的连接建立:
    • 握手过程只需要 1 RTT,握手的目的是为确认双方的「连接 ID」,连接迁移就是基于连接 ID 实现的。
    • QUIC 内部包含了 TLS,它在自己的帧会携带 TLS 里的“记录”,再加上 QUIC 使用的是 TLS/1.3,因此仅需 1 个 RTT 就可以「同时」完成建立连接与密钥协商
  • 基于ID识别(方便的连接迁移):连接迁移时,不再用TCP四元组确定一个连接,而是用一个64位随机数来确定这个连接。无论网络环境如何变化,只要ID不变,就能迅速重新连上。

HTTPS

HTTPS在HTTP的基础上加了一层SSL/TSL四次握手来完成对称加密的操作,HTTPS一般加密URL和传输资源。

HTTP和HTTPS的区别

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行四次 SSL/TLS 的握手过程,才可进入加密报文传输。
  3. HTTPS的传输效率不如HTTP效率高
  4. 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。

SSL/TSL流程

握手阶段

  1. 客户端发起请求
  2. 服务器返回证书和公钥
  3. 客户端从CA验证证书(防止中间人攻击)
  4. 证书合法,生成私钥(随机数)
  5. 用公钥加密私钥并发送给服务器
  6. 服务器解密获得私钥

传输阶段

  1. 用私钥加解密,完成对称传输

相关文章:

HTTP 1.0 2.0 3.0详解

HTTP HTTP全称超文本传输协议,是一种属于应用层的通信协议。它允许将超文本标记语言文档(HTML)从Web服务器传输到客户端的浏览器。 HTTP报文结构 请求报文结构 请求方法: GET:一般用来请求已被URI识别的资源&#x…...

Python操作TXT文本:从入门到精通

在数字化时代,文本处理成为了许多工作和项目的基础。Python作为一种强大且易学的编程语言,在文本处理方面展现出了无与伦比的优势。本文将通过举例的方式,向读者介绍如何使用Python来操作TXT文本,让您轻松掌握文本处理的精髓。 一、读取TXT文本内容 首先,我们需要学会如…...

开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序的数据运营策略与价值创造

一、引言 1.1 研究背景 在当今数字化时代,数据运营已成为企业发展的核心驱动力。开源 AI 智能名片 21 链动模式 S2B2C 商城小程序作为一种创新的营销工具,与数据运营紧密相连。该小程序通过集成人工智能、大数据分析等先进技术,能够实时收集…...

ip 地址查看cmd命令

ip 地址查看cmd命令 在不同的操作系统中,查看IP地址的命令可能会有所不同。以下是一些常见操作系统中查看IP地址的命令: Windows: 打开命令提示符(CMD),然后输入 ipconfig 命令。 Linux/Unix: 打开终端&#xff0…...

力扣9.26

931. 下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即…...

HT8731 内置自适应H类升压和防破音功能的10W D类及AB类音频功率放大器

1、特点 防削顶失真功能(防破音,Anti-Clipping Function, ACF) 免滤波器数字调制&#xff0c;直接驱动扬声器 输出功率 10W(VBAT4.2V,RL3Ω,THDN10%, fiN 1kHz) 6W(VBAT3.3~4.2V,RL4Ω,THDN<1%,20-20kHz 全频段) 3W (VBAT3.3~4.2V,RL8Ω, THDN<1%, 20- 20kHz 全频段 VB…...

webpack使用

一、简介 概述 本次使用webpack4进行构建打包 二、webpack 安装webpack、webpack-cli npm install webpack4.2.0 webpack-cli4.2.0 -D 三、loader 加载器概述 raw-loader&#xff1a;加载文件原始内容&#xff08;utf-8&#xff09; file-loader&#xff1a;把文件输出…...

高通Android 12 音量API设置相关代码

// 获取当前音量大小public static int getCurrentVolume(Context context) {AudioManager audioManager (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);return audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); // 使用 STREAM_MUSIC 作为示例…...

Qt开发第一讲

一、Qt项目里面有什么&#xff1f; 对各个文件的解释&#xff1a; Empty.pro文件 QT core gui # 要引入的Qt模块&#xff0c;后面学习到一些内容的时候可能会修改这里 #这个文件相当于Linux里面的makefile文件。makefile其实是一个非常古老的技术了。 #qmake搭配.pr…...

详细指南:如何有效解决Windows系统中msvcp140.dll丢失的解决方法

如果你在使用Windows系统时遇到“msvcp140.dll丢失”的错误提示&#xff0c;通常是因为你的计算机上缺少或损坏了msvcp140.dll文件。msvcp140.dll是Microsoft Visual C Redistributable包的一部分&#xff0c;许多应用程序和游戏需要它来正常运行。以下是几种解决msvcp140.dll丢…...

【RabbitMQ】幂等性、顺序性

幂等性 概述 幂等性是数学和计算机科学中某些运算的性质&#xff0c;他们可以被多次应用&#xff0c;而不会改变初始应用的结果。RabbitMQ的幂等性则是指同一条消息&#xff0c;多次消费&#xff0c;对系统的影响是相同的。 一般消息中间件的消息传输保障分为三个层级&#…...

FFmpeg源码:avio_skip函数分析

AVIOContext结构体和其相关的函数分析&#xff1a; FFmpeg源码&#xff1a;avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析 FFmpeg源码&#xff1a;read_packet_wrapper、fill_buffer函数分析 FFmpeg源码&#xff1a;avio_read函数分析 FFmpeg源码&#xff…...

Llama 3.1 技术研究报告-6

6 推理 我们研究了两种主要技术&#xff0c;以使 Llama 3 405B 模型的推理⾼效&#xff1a;(1) 流⽔线并⾏和 (2) FP8 量化。我们已经公开发布了我们的 FP8 量化实现。 6.1 流⽔线并⾏ 当使⽤ BF16 数字表⽰模型参数时&#xff0c;Llama 3 405B 不适合在装有 8 个 Nvidia H1…...

更新日志-Python OS

这么久没更新全是因为这段时间的事情很多&#xff0c;只能一点一点的更新代码&#xff0c;不过好在&#xff0c;也是成功更新出来啦&#xff01; 更新日志&#xff08;2024/9/29&#xff09; 代码全文更新&#xff0c;将所有的绝对路径替换为相对路径&#xff0c;这样在各位大…...

Chrome浏览器的C++内存管理技术揭秘

Chrome浏览器作为全球最流行的网络浏览器之一&#xff0c;其高效的内存管理技术功不可没。本文将深入探讨Chrome浏览器在C中的内存管理技术&#xff0c;并介绍如何通过调整网页加载时间、优化视频播放体验和解决谷歌浏览器占用CPU过高的问题来提升浏览器性能。 &#xff08;本…...

Redis --- redis事务和分布式事务锁

redis事务基本实现 Redis 可以通过 MULTI&#xff0c;EXEC&#xff0c;DISCARD 和 WATCH 等命令来实现事务(transaction)功能。 > MULTI OK > SET USER "Guide哥" QUEUED > GET USER QUEUED > EXEC 1) OK 2) "Guide哥"使用 MULTI命令后可以输入…...

SQL,将多对多的关联记录按行输出

数据库的Primary表和Secondary表有相同的结构&#xff0c;其中W、H、D是主键。Primary表&#xff1a;NameWHDPrimary item 1100500300Primary item 2100600300Primary item 3200500300Primary item 4100500300Primary item 5100600300Primary item 6200500300 Secondary表&…...

【SQL】筛选字符串与正则表达式

目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件&#xff0c;以限制从数据库表中检索的数据。当你执行一个查询时&#xff0c;WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…...

【Redis入门到精通五】Java如何像使用MySQL一样使用Redis(jedis安装及使用)

目录 Jedis 1.jedis是什么 2.jedis的安装配置 3.jedis的基础命令操作展示 1.set和get操作&#xff1a; 2.exists和del操作&#xff1a; 3.keys和type操作&#xff1a; 4. expire和ttl&#xff1a; Jedis Java 操作 redis 的客⼾端有很多&#xff0c;其中最知名的是 jedi…...

【 微信机器人+ AI 搭建】

摘要&#xff1a; 各种大模型已经出来好久了&#xff0c;各类app也已经玩腻了&#xff0c;接下来&#xff0c;就在考虑&#xff0c;怎么让大模型&#xff0c;利益最大化。 本人没有显著的家世&#xff0c;没有富婆包养&#xff0c;只能自己抽点时间&#xff0c;研究下技术&…...

VGG16网络介绍及代码撰写详解(总结1)

可以从本人以前的文章中可以看出作者以前从事的是嵌入式控制方面相关的工作&#xff0c;是一个机器视觉小白&#xff0c;之所以开始入门机器视觉的学习只要是一个idea&#xff0c;想把机器视觉与控制相融合未来做一点小东西。废话不多说开始正题。 摘要&#xff1a;本文是介绍V…...

多个excel表数据比对操作

多个excel表数据比对操作 本文主要使用两种方法进行比对,分别使用了openpyxl第三方库和pandas第三方库进行数据比对 两种方法优缺点: openpyxy: 优点:主要是处理xlsx的文件,里面方法简单,易懂 缺点:当数据量大的时候,速度很慢,之前我一条一条数据拿出来比较,两百多条…...

golang学习笔记32——哪些是用golang实现的热门框架和工具

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

ZYNQ:开发环境搭建

资料下载 http://47.111.11.73/docs/boards/fpga/zdyz_qimxing(V2).html Vivado软件是什么&#xff1f; Vivado软件是Xilinx&#xff08;赛灵思&#xff09;公司推出的一款集成设计环境&#xff08;IDE&#xff09;&#xff0c;主要用于FPGA&#xff08;现场可编程门阵列&am…...

一步一步丰富生成式语言模型系统

以下是这套生成式语言模型解决任务的流程图概述&#xff1a; #mermaid-svg-sRHDSMUMV1utrg2F {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sRHDSMUMV1utrg2F .error-icon{fill:#552222;}#mermaid-svg-sRHDSMUMV1u…...

Python中元组的常用方法

# 在Python中&#xff0c;元组&#xff08;tuple&#xff09;是一种不可变的序列类型&#xff0c;用于存储多个元素。元组的特点包括&#xff1a; # # 不可变性&#xff1a;一旦创建&#xff0c;元组的元素不能改变。这意味着不能添加、删除或修改元组中的元素。 # 可以包含任何…...

新版本Android Studio如何新建Java code工程

新版本Android Studio主推Kotlin&#xff0c;很多同学以为无法新建Java工程了&#xff0c;其实是可以的&#xff0c;如果要新建Java代码的Android工程&#xff0c;在New Project的时候需要选择Empty Views Activity&#xff0c;如图所示&#xff0c;gradle也建议选为build.grad…...

2024年世界职业院校技能大赛:全面升级的国际化职业技能竞赛

近日,中华人民共和国教育部发布了《2024年世界职业院校技能大赛实施方案》,宣布从2024年起将全国职业院校技能大赛升级为世界职业院校技能大赛。这一重大决策不仅标志着我国职业教育竞赛平台的全面国际化,更彰显了中国在全球职业教育领域的引领作用和战略眼光&#xff0c;具体内…...

前端vue相关常见面试题,包含MVVM、双向绑定原理、性能优化、vue2和vue3性能对比等

vue面试题 MVVM 概念 model view viewModel 本质上是mvc&#xff08;程序分层开发思想&#xff09; 将viewModel的状态和行为抽象化&#xff0c;viewmodel将视图ui和业务逻辑分开&#xff0c;去除model的数据&#xff0c;同时处理view中需要展示的内容和业务逻辑 view视图层 …...

生信初学者教程(十二):数据汇总

文章目录 介绍加载R包导入数据汇总表格输出结果总结介绍 在本教程中,汇总了三个肝细胞癌(HCC)的转录组数据集,分别是LIRI-JP,LIHC-US/TCGA-LIHC和GSE14520,以及一个HCC的单细胞数据集GSE149614的临床表型信息。这些数据集为科研人员提供了丰富的基因表达数据和相关的临床…...

福州快速网站建设/深圳优化公司排名

方法一&#xff1a;父元素使用display:table和子元素使用display:table-cell属性来模拟表格&#xff0c;子元素设置vertical-align:middle和text-align:center即可垂直居中。 .div1{height:300px;width: 300px;background-color: cadetblue;display: table; } .span1{display: …...

苏州制作网站的有几家/网站排名在线优化工具

&#xff08;图片来源&#xff1a;网络&#xff09; 2022年2月4日&#xff0c;由量子经济发展联盟&#xff08;QED-C&#xff09;和总部位于加利福尼亚州的量子软件和服务公司QC Ware赞助&#xff0c;欧洲量子工业联盟和加拿大量子工业协助的Hyperion Research进行的一项新研究…...

wordpress 评论go跳转/百度官方电话号码

最近跑老外的程序[1] 又出问题了&#xff1a;??? Error: File: computeScores.m Line: 17 Column: 28Unbalanced or unexpected parenthesis or bracket.我用的是Matlab R2009a&#xff0c;识别出了程序里的几处语法错误&#xff1a;img gray2rgb(img); %always have 3 cha…...

郑州市政府网站的建设与发展/网络事件营销

1. 在 app 目录下新建一个文件 helpers.php 2. 在 composer.json 文件的 autoload 字典中添加 "files":["app/helpers.php"] 3. 执行命令&#xff1a;composer dumpautoload OK搞定 4. 这其实是与composer中的自动加载有关 -> 链接 转自&#xff1a;htt…...

网站搭建设计 是什么/今日热搜排行第一名

List<Map>是什么意思&#xff1f; List集合中的对象是一个Map对象,而这个Map对象的键是String类型,值是Object类型 List以Map接口对象为列表对象。 Map以String为键&#xff0c;以Object为值。 List里只能放Map类型的对象&#xff0c;而这个Map类型的对象又只能放以St…...

深圳做网站公/网站关键词优化软件效果

2019独角兽企业重金招聘Python工程师标准>>> 首先 注意&#xff1a;rman备份的时候并不会备份临时表空间的数据文件&#xff08;想想也是&#xff0c;反正是临时的&#xff0c;备它干嘛&#xff09;&#xff0c;所以完全恢复之后&#xff0c; 如果临时表空间的数据文…...