HTTP常见状态码 HTTP的逐步发展(通俗易懂版)

HTTP常见状态码 

HTTP 状态码是服务器返回的响应结果的一个数字标志,用于告诉客户端(例如浏览器)请求的处理情况。为了方便记忆,我们可以简单地分成几类并用通俗的方式来理解:

1. 2xx 成功类:请求成功,事情办妥了。

200 OK:请求成功,服务器返回正常响应。就像你点了一份餐,服务员端上了餐,并且一切都正常。

201 Created:资源被成功创建了。比如你在某个平台上传了一张图片,服务器返回201表示图片已经上传并保存成功。

204 No Content:请求成功,但没有任何数据返回。就像你请求了服务,但服务员只是点了点头,没有给你任何东西。

2. 3xx 重定向类:需要进行进一步的操作。

301 Moved Permanently:资源永久搬家了。就像你去了一家老店,服务员告诉你这家店已经搬到新地址了,而且以后都在新地址营业。

302 Found:临时搬家了。和301类似,不过只是暂时性的,资源可能很快又会回到原来的地方。

304 Not Modified:资源没有更新。比如你已经缓存了这个网页,服务器告诉你“别重复下载了,之前那个版本没变”。

3. 4xx 客户端错误类:你的请求有问题。

400 Bad Request:请求有误,服务器不知道该怎么处理。就像你给服务员递上了一份乱七八糟的菜单,服务员看不懂。

401 Unauthorized:未经授权,必须登录后才能访问。相当于你想进入一个VIP房间,但你没有VIP卡,需要先验证身份。

403 Forbidden:禁止访问。即使你登录了,服务器还是不让你看某些内容,类似于一个禁区,你就是不能进去。

404 Not Found:资源未找到。就像你去了一家店点餐,结果服务员说这个餐品已经下架了,不在菜单上。

405 Method Not Allowed:方法不允许。你发的请求方式(比如POST或GET)不对,服务器不支持这种方式。就像你点餐的方式不符合店里的规矩。

5. 5xx 服务器错误类:服务器这边出问题了。

500 Internal Server Error:服务器内部错误。就像餐馆的厨房出了问题,服务员也不知道到底哪里出错了。

502 Bad Gateway:网关错误。服务器作为中间人,试图从另一个服务器获取信息,但那个服务器返回了错误信息。相当于服务员去厨房拿餐,却发现厨房那边出问题了。

503 Service Unavailable:服务暂时不可用。就像你去餐馆点餐,结果服务员告诉你他们今天太忙了,暂时无法提供服务。

简单记忆小技巧:

1xx:服务器告诉客户端“稍等,我正在处理”。

2xx:都表示成功(事情办妥了)。

3xx:意味着要去其他地方找(搬家、重定向)。

4xx:客户端错误(你的请求有问题)。

5xx:服务器错误(他们那边的问题)。

HTTP协议发展

(1)HTTP 1.0

短连接,每次请求都会创建一个新的 TCP 连接,请求完成后立即关闭。这导致了大量的连接建立和断开,性能较差。

(2)HTTP 1.1

  • 支持持久连接,多个请求可以复用一个 TCP 连接,减少了频繁建立和关闭连接的开销。并且支持分块传输(对大文件传输有利)
  • 但请求和响应仍是串行处理,一个请求完成后才能发送下一个请求,这导致了“队头阻塞”问题(即前面的请求阻塞后面的请求)。

(3)HTTP 2.0

  • 使用二进制传输,使得解析更高效,也减少了协议层的歧义。
  • 支持多路复用:同一个 TCP 连接可以承载多个请求和响应,互不干扰。多个请求和响应可以同时发送和接收,解决了 HTTP/1.1 中的“队头阻塞”问题。
  • 头部压缩:对 HTTP 头部进行压缩,减少了冗长的头部信息带来的开销,尤其是对于重复的头部字段。
  • 服务器推送:服务器可以主动将客户端可能需要的资源推送给客户端
  • 仍然依赖TCP协议,TCP 的慢启动、丢包重传等问题会影响整体性能。

(4)HTTP 3.0

  • 基于 QUIC 协议(由 UDP 构建的新的传输层协议),可以提供更低的延迟和更好的性能,尤其是在网络状况不佳的情况下。
  • 内置加密:QUIC 默认采用 TLS 1.3 加密,所有传输都是加密的,不再需要单独配置 HTTPS。
  • 快速连接恢复:QUIC 可以在丢包时迅速恢复,而不需要像 TCP 那样进行复杂的重传机制。

总结:HTTP协议的发展从以下几个方面优化,二进制传输、头部压缩、多路复用、服务器推送、协议转换、自动加密。

HTTP/1.0:每个请求都要建立新的连接,性能较差。

HTTP/1.1:支持持久连接,但没有解决多路复用问题。

HTTP/2.0:通过多路复用、头部压缩(重复的部分省略)、服务器推送等特性,显著提高了性能,但仍依赖 TCP。

HTTP/3.0:基于 QUIC 协议,解决了 TCP 的局限性,提供了更快、更安全的传输。

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

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

相关文章

跳跃列表(Skip List)详解

什么是跳跃列表? 跳跃列表是一种概率性的数据结构,旨在提高链表的搜索、插入和删除效率。它通过在普通链表的基础上增加多个层次,以实现更快的访问速度。跳跃列表的设计灵感来源于跳跃图(Skip Graph)和多层索引的概念…

手把手搞定VMware 的CentOS硬盘扩容

1.背景 用VMware虚拟机创建Centos系统时,选了40GB硬盘,用着用着发现硬盘不够用了。于是,我为了给硬盘扩容,实操了下centos的硬盘扩容。本文是记录下整个操作过程,方便后面查询和使用。 2.操作 2.1 VMware操作 2.2 Ce…

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

mysql优化之sql语句优化、以及mysql一些高频面试题

文章目录 一、索引1、什么是索引2、添加索引的原则3、索引的优缺点4、索引分类5、mysql存储过程(方法) 二、MySQL的逻辑架构1、逻辑架构2、MyISAM 和 InnoDB的区别 三、mysql的索引数据结构1、B Tree2、B Tree 四、缓冲池 Buffer Pool1、预读机制2、预读…

Qt中多语言的操作(以QtCreator为例)

1、首先,我们在代码中与文本相关的且需要支持多语言的地方,用tr来包含多语言key(多语言key是我们自己定义的),如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…

Selenium with Python学习笔记整理(网课+网站持续更新)

本篇是根据学习网站和网课结合自己做的学习笔记,后续会一边学习一边补齐和整理笔记 学习网站: selenium 实战二_PO代码重构 Selenium自动化测试python篇 看云 https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自…

erlang学习:Linux命令学习4

顺序控制语句学习 if,else对文件操作 判断一个文件夹是否存在,如果存在则进行删除,如果不存在则创建该文件夹,并复制一份该脚本后,删除该脚本 if [ -d "/erlangtest/testdir"]; then echo "删除文件夹…

【路径规划】绘制算术和几何布朗运动- 绘制布朗桥、2D 和 3D 布朗运动- 绘制一些随机路径

摘要 本文演示了如何生成和绘制布朗运动、几何布朗运动和布朗桥的随机路径。这些随机路径广泛应用于金融、物理和工程领域,用于模拟随机过程。实验结果包括了多条随机路径的示例,展示了不同类型的布朗运动的特征。 理论 1. 布朗运动 (Brownian Motion…

构建高效房屋租赁系统:Spring Boot应用

1 绪论 1.1 研究背景 中国的科技的不断进步,计算机发展也慢慢的越来越成熟,人们对计算机也是越来越更加的依赖,科研、教育慢慢用于计算机进行管理。从第一台计算机的产生,到现在计算机已经发展到我们无法想象。给我们的生活改变很…

如何在NXP源码基础上适配ELF 1开发板的UART功能

UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出了4路UART接口供开发者使用,具体包括U…

Node-RED-L2-Node-RED在Linux系统启动时自动运行

Node-RED在Linux系统启动时自动运行 目的步骤1创建服务文件:2重新加载服务:3启用服务:4启动Node-RED服务:5检查服务状态:6其他说明7如果没启动正确的Node-RED执行路径:确保使用绝对路径: 检查用…

Flutter 约束布局

配置插件依赖 设置组件大小 通过属性 childConstraints 实现 分别设置 约束布局一 和 约束布局二 大大小为:160 和 200 点击查看代码文件 class SummaryPageState extends State<SummaryPage1> {ConstraintId constraintId_1 = ConstraintId(ConstraintId_1);Constrain…

易航网址导航系统V2.45完美去授权版

简介 易航网址导航系统V2.45完美去授权版 界面

Spring(看这一篇就够了)

Spring 概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台&#xff0c;它最初是由 Rod Johnson 编写的&#xff0c;并且…

SFUD库移植

1.源码 GitHub - armink/SFUD: An using JEDECs SFDP standard serial (SPI) flash universal driver library | 一款使用 JEDEC SFDP 标准的串行 (SPI) Flash 通用驱动库 2.介绍 这个通用驱动库,实际就是帮你封装好了读写spiflash的函数, 我们只需要对接以下底层,就可以轻松…

【个人笔记】线程和线程池的状态以及转换方式

线程和线程池的状态是不一样的&#xff01;&#xff01; 线程有 6 种状态&#xff0c;查看Thread的State枚举类&#xff1a; NEW&#xff1a;创建后没启动的线程就处于这种状态RUNNABLE&#xff1a;正在java虚拟机中执行的线程就处于这种状态BLOCKED&#xff1a;受阻塞并等待…

Observability:构建下一代托管接入服务

作者&#xff1a;来自 Elastic Vishal Raj, Marc Lopez Rubio 随着无服务器&#xff08;serverless&#xff09;的引入&#xff0c;向 Elastic Cloud 发送可观察性数据变得越来越容易。你可以在 Elastic Cloud Serverless 中创建一个可观察性无服务器项目&#xff0c;并将可观察…

【Java】虚拟机(JVM)内存模型全解析

目录 一、运行时数据区域划分 版本的差异&#xff1a; 二、程序计数器 程序计数器主要作用 三、Java虚拟机 1. 虚拟机运行原理 2. 活动栈被弹出的方式 3. 虚拟机栈可能产生的错误 4. 虚拟机栈的大小 四、本地方法栈 五、堆 1. 堆区的组成&#xff1a;新生代老生代 …

Ubuntu磁盘不足扩容

1.问题 Ubuntu磁盘不足扩容 2.解决方法 安装一下 sudo apt-get install gpartedsudo gparted

Mysql梳理6——order by排序

目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC&#xff08;ascend&#xff09;:升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作&#xff0c;默认…