【计算机网络】HTTP相关问题与解答

此篇文章内容会不定期更新,仅作为学习过程中的笔记记录


目录

一、HTTP请求和响应报文是怎样的?

1、请求报文

2、响应报文

二、HTTP请求方法有哪些?

GET

HEAD

POST

PUT

DELETE

PATCH

OPTIONS

TRACE

CONNECT

三、GET请求与POST请求的区别?

幂等性

缓存

浏览器书签

用途

安全性

请求参数

TCP数据包

四、HTTP请求中常见的状态码

1xx(信息性状态码)

2xx(成功状态码)

3xx(重定向状态码)

4xx(客户端错误状态码)

5xx(服务器错误状态码)

五、HTTP 1.0与HTTP 1.1的区别?

HTTP1.0主要特点:

HTTP1.1主要特点:

区别:

六、HTTP 2.0与HTTP1.1的区别

HTTP 2.0主要特点:

区别:

七、了解HTTP 3.0吗?

1、核心协议

2、主要特点:


一、HTTP请求和响应报文是怎样的?

1、请求报文

由请求行、请求头部、空行、请求体四部分构成。

请求行:

·请求报文的第一行,包含了请求方法请求URI(Uniform Resource Identifier,统一资源标识符)、HTTP协议版本三个字段,用空格分隔。

·请求方法:指示对资源进行的操作,如GET、POST、PUT、DELETE……

·请求URI:客户端希望访问的资源的URL路径或相对路径。

请求头部:

·用于向服务器提供关于请求的附加信息。

·每个字段由字段名和字段值组成,字段名和字段值之间用冒号(:)分隔,字段值前可以有一个或多个空格。

·常见的请求头字段包括Host、Accept、Accept-Encoding、User-Agent、Content-Type、Content-Length等。

空行:

·请求头部与请求体间,空行用于分隔,表示请求头部的结束和请求体的开始(如果有的话)。

请求体:

·可选,包含了发送给服务器的数据。

·请求体的格式和内容取决于请求方法和服务器端的要求,POST和PUT等请求方法时,通常·会包含请求体。

·请求体的数据类型Content-Type请求头字段指定。

2、响应报文

由状态行、响应头部、空行、响应体四部分组成。

状态行:

·状态行是响应报文的第一行,包含了HTTP协议版本状态码状态消息三个字段,用空格分隔

·状态码:表示服务器对请求的响应状态,如200表示成功,404表示未找到资源……

·状态消息:对状态码的文本描述。

响应头部:

·用于向客户端提供关于响应的附加信息。每个字段的格式与请求头部相同

·常见的响应头字段包括Content-Type、Content-Length、Server、Date、Expires、Cache-Control等。

空行:

起到分隔作用,表示响应头部的结束和响应体的开始

响应体:

·响应体是服务器返回给客户端的实际数据,可以是HTML文档、图片、视频等。

·响应体的格式和内容取决于Content-Type响应头字段的值。


二、HTTP请求方法有哪些?

GET、POST、PUT、DELETE 是最常用的 HTTP 方法,对应着资源的读取、提交、更新和删除操作。

GET

请求读取URL标识的信息,并返回实体主体;请求可以被收藏为标签。
请求读取URL标识的信息的头部,返回的响应中没有具体的内容。

POST

把消息加载到指定网页上(向指定资源提交数据进行处理请求,数据被包含在请求体中);

POST 请求可能会导致新的资源的建立和/或已有资源的修改;

没有Read方法;不会被保留在浏览器历史中。

PUT

指明URL创建或修改资源,用于上传资源。

DELETE

请求服务器删除指定的资源。

PATCH

是对 PUT 方法的补充,用来对已知资源进行局部更新。

OPTIONS

允许客户端查看服务器的性能,请求一些参数信息。

TRACE

回显服务器收到的请求,主要用于测试或诊断。

CONNECT

HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。

三、GET请求与POST请求的区别?

GET请求和POST请求在幂等性、用途、请求参数、安全性与隐私、缓存、浏览器书签以及TCP数据包等方面存在显著的区别

GETPOST

幂等性

幂等的,对同一资源的多次GET请求应该返回相同的结果

无论请求多少次,都不会对服务器上的资源造成任何影响。

不是幂等的,因为它通常用于提交数据以创建或更新资源

多次执行相同的POST请求可能会导致资源的重复创建或状态的不同更新。

缓存

参数在URL中,会被浏览器缓存参数在请求体中,通常不会被浏览器缓存

浏览器书签

用户可以将GET请求的URL保存为书签参数在请求体中,无法直接通过URL保存为书签

用途

从服务器获取数据,不会对服务器上的数据进行修改。

它通常用于请求页面、图片等资源

主要用于向服务器提交数据,如提交表单数据、上传文件等。

POST请求可能会导致服务器上数据的创建、更新或删除。

安全性

·参数直接暴露在URL中

·且容易被缓存和记录在历史记录中

·参数不会暴露在URL中

·且通常不会被缓存和记录在历史记录中

请求参数

请求参数通常附加在URL之后以“?”分隔URL和传输数据,参数之间以“&”相连

由于参数直接暴露在URL中,因此GET请求不适合传输敏感信息,且URL长度有限制(不同浏览器和服务器限制不同,一般限制在2KB~8KB之间)

请求参数包含在请求体中,不会附加在URL之后。

这使得POST请求能够传输大量数据,并且适合传输敏感信息,因为参数不会暴露在URL中

TCP数据包

通常只产生一个TCP数据包

可能产生两个或更多的TCP数据包

因为POST请求的数据量可能较大,需要分多个数据包发送.

取决于具体的浏览器和服务器实现


四、HTTP请求中常见的状态码

状态码是用来表示网页服务器HTTP响应状态的数字代码。

这些状态码由三位数字组成,并且可大致分为五类,以表示不同类型的响应。

如下是常见状态码。

状态码解释

1xx(信息性状态码)

100Continue客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。

2xx(成功状态码)

200 OK请求成功。服务器已成功处理了请求,并提供了请求的网页。
201 Created已创建。请求成功并且服务器创建了新的资源。
202 Accepted已接受。服务器已接受请求,但尚未处理。
204 No Content服务器成功处理了请求,但没有返回任何内容。

3xx(重定向状态码)

301Moved Permanently永久重定向。请求的网页已永久移动到新位置。
302 Found临时重定向。请求的网页临时移动到新位置。
304Not Modified

未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。

客户端通常会缓存访问过的资源,并在将来一个时间段里,通过相同的URL再次请求时,会发送一个带有If-Modified-Since头的请求(请求头中包含最后一次服务器发送的该资源所修改的时间)。

4xx(客户端错误状态码)

400 Bad Request服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized请求未授权。
403 Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求。
404 Not Found服务器无法根据客户端的请求找到资源(网页)。
405Method Not Allowed请求行中指定的请求方法不能被用于请求相应的资源。
408 Request Timeout请求超时。

5xx(服务器错误状态码)

500Internal Server Error服务器内部错误,无法完成请求。
501Not Implemented服务器不支持请求的功能,无法完成请求。
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503Service Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。
504 Gateway Timeout作为网关或者代理的服务器没有及时从上游服务器收到请求。

五、HTTP 1.0与HTTP 1.1的区别?

HTTP1.0,诞生于1996年。

HTTP1.0主要特点:

1、无状态连接

·HTTP1.0默认使用无状态通信协议,即服务器不会记录之前的请求信息,每个请求都是独立的,相互之间没有关联。

2、无持久连接

·在HTTP1.0中,每个请求都需要与服务器建立一个新的TCP连接,并在请求完成后立即断开连接。

·这意味着如果需要发送多个请求,就需要建立多个TCP连接,增加了网络开销和延迟。

·然而,HTTP1.0也支持通过在请求头中设置Connection字段为Keep-Alive来保持TCP连接不断开,实现长连接(客户端在发送HTTP请求时,需显式地在请求头中添加Connection: Keep-Alive字段

3、单一请求/响应

·默认每次连接只能发送一个请求并接收一个响应


HTTP1.1,诞生于1997年。

HTTP1.1主要特点:

1、持久连接

HTTP1.1默认使用持久连接(也称为长连接或Keep-Alive连接),允许在同一个TCP连接中发送多个请求和接收多个响应(请求和响应的发送和接收是串行,显著减少了连接开销。

2、请求管道化

·HTTP1.1支持请求管道化,允许客户端在同一个TCP连接中同时发送多个请求,尽管响应仍然是按顺序返回的。

3、缓存控制

·HTTP1.1引入了更丰富的缓存控制头部,如Cache-Control,使客户端和代理服务器可以更灵活地控制缓存策略。

4、虚拟主机支持

·通过Host头字段,HTTP1.1支持虚拟主机,允许多个域名共享同一个IP地址

·一台Web服务器上用同一IP地址、端口号、不同主机名可以创建多个虚拟Web站点。

5、错误状态码扩展

·HTTP1.1相比HTTP1.0引入了更多的错误状态码,以更详细地描述错误情况。如100 Continue(表示客户端应当继续发送请求)202 Accepted(已接受)、409 Conflict(表示请求与当前资源的状态冲突)……

区别:

HTTP1.0HTTP1.1
连接管理短链接长连接
请求管道化不支持支持
缓存处理

简单;

依赖“Expires”和“Cache-Control”头字段进行缓存控制

更多缓存处理机制;

“ETag”和“If-None-Match”

错误处理

简单;

通过状态码表示错误

更多错误处理机制;

通过“Transfer-Encoding”头字段传输错误信息;

新增多个状态响应码

Host头字段无Host头字段每个请求包含Host头字段,可支持虚拟主机

六、HTTP 2.0与HTTP1.1的区别

HTTP 2.0,发布于1999年

HTTP 2.0主要特点:

1、多路复用

HTTP2.0支持在同一个TCP连接中并行发送多个请求和响应,解决了HTTP1.x中的队头阻塞问题,提高了并发性能。

2、二进制分帧

HTTP2.0将所有传输的信息分割为更小的帧,并使用二进制格式进行编码(HTTP 1.x基于文本编码),提高了传输效率和灵活性。

3、头部压缩:

HTTP2.0引入了HPACK头部压缩算法,对header进行压缩,减少了传输的数据量,提升了性能。

4、服务器推送

HTTP2.0允许服务器在客户端请求之前主动将资源推送到客户端,减少了请求延迟,提升了用户体验。

5、流量控制

HTTP2.0提供了流量控制机制,可以更好地控制数据流的传输速度,防止网络拥堵和丢包情况的发生。

区别:

HTTP1.1HTTP2.0
多路复用

每个请求都需要建立独立的TCP连接,存在“队头阻塞”问题,即某个请求处理时间过长会影响其他请求的响应速度

多路复用技术;

可以在一个TCP连接上并行发送多个请求和响应,解决了“队头阻塞”问题,提高了并发性能

头部压缩每次请求和响应都需要携带完整的头部信息,存在冗余

头部压缩机制;

使用HPACK算法对头部信息进行压缩,减少了数据传输量,提高了传输效率

二进制分帧文本协议,数据以纯文本形式传输

二进制分帧技术;

将所有传输的信息分割为更小的帧,并对它们采用二进制格式的编码,提高了传输效率和灵活性。

服务器推送服务器只能在接收到客户端请求后才能发送数据

服务器推送功能;

允许服务器在客户端需要之前就将资源推送给客户端,减少了请求延迟,提高了性能

流量控制无法对数据流进行有效的控制

流量控制机制;

可以更好地控制数据流的传输速度,防止网络拥堵和丢包情况的发生


七、了解HTTP 3.0吗?

HTTP 3.0,也称为HTTP over QUIC,发布于2022年6月。

1、核心协议

QUIC协议:

·HTTP3.0的核心是基于QUIC(Quick UDP Internet Connections)协议。

·QUIC是由Google在2015年提出的,基于UDP(用户数据报协议)的传输层协议,旨在提供比TCP(传输控制协议)更低的延迟和更高的效率。

2、主要特点:

更快的连接建立:
·QUIC协议减少了连接建立的时间,通过减少握手次数(从TCP的三次握手和TLS的握手减少到QUIC的一次握手)来实现。
·支持“0-RTT”(零往返时间)连接建立,即客户端可以在不进行完整握手的情况下发送数据,进一步减少了延迟。
多路复用:
·HTTP3.0延续了HTTP2.0的多路复用特性,允许在单个QUIC连接上并行发送多个请求和响应,提高了网络利用率和性能。
减少队头阻塞:
·TCP协议存在队头阻塞问题,即当TCP连接中的一个数据包丢失时,需要等待该数据包重传后才能继续处理后续的数据包。

·而QUIC协议通过其流(Stream)机制,使得不同流之间的数据包处理相互独立,避免了队头阻塞。
增强的安全性:
·QUIC协议内置了TLS 1.3加密协议,提供了更强的加密和认证功能,确保了数据传输的安全性。
连接迁移:
·QUIC协议支持快速的连接迁移,即使在网络切换或IP地址变更的情况下,连接也能够快速恢复,提高了网络的稳定性和可靠性。
动态可插拔的拥塞控制算法:
·QUIC协议支持动态可插拔的拥塞控制算法,能够根据网络状况动态调整拥塞控制策略,提高数据传输的效率。


欢迎补充,互相学习🤝


参考博文,写得很详细:

有梦想的攻城狮-CSDN博客1、可以参考博主 有梦想的攻城狮-CSDN博客 的专栏中HTTP相关协议的博文

https://blog.csdn.net/zhangzehai2234/category_8747489.html

2、【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客

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

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

相关文章

菜单、工具栏 的基本使用

效果 代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QToolBar> #include<QDebug> #include<QPushButton>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupU…

将一个字符串以三个字符为间隔分别放在三个字符串数组里

要求 请编写函数fun&#xff0c;其功能是:编写函数char *fun(char*s0,char *s1,char *s2,char*s3)&#xff0c; 要求实现: 将s0所指字符串分解成三个字符串&#xff0c;分别存入s1、s2、s3所指内存中。分解的方法是&#xff0c;s1、s2、53从s0中依次顺序每隔3个字符取1例如:s0…

OpenCV 4.10 windows 上编译并上传conan

目录 一. 上传opencv 预编译包 二. 自己手动写一个测试包并上传 三. 自己写一个app, 引用包 一. 上传opencv 预编译包 1. 下载Opencv, 并用cmake 打开 打开工程之后&#xff0c;编译&#xff0c;install&#xff0c; 目录如下 2. 准备conan 包 把Debug 和 Release 分开放 3…

CleanClip for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)

CleanClip&#xff1a;革新macOS剪贴板管理体验 目录 功能概览 多格式历史记录保存智能搜索功能快速复制操作拖拽功能 安装指南 前期准备安装步骤 配置与使用 功能概览 多格式历史记录保存 CleanClip支持保存文本、图片、文件等多种格式的复制历史记录&#xff0c;为用户提…

【应用笔记】Cot Menu 轻量级多级菜单控制框架程序(C语言)

【应用笔记】Cot Menu 轻量级多级菜单控制框架程序&#xff08;C语言&#xff09; 前言: 工作需要, 实现一个串口打印的类shell菜单. 如果按照以往的习惯我会自己重新"构思"(狗屎)一个菜单框架.之前用oled和lcd时,我都从零重复造轮子. 作为一个成熟的程序员, 应该要学…

【机器学习(二)】分类和回归任务-决策树算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;树的构造&#xff08;二&#xff09;划分选择1、信息增益2、基尼指数3、卡方检验 &#xff08;三&#xff09;停止标准&#xff08;四&#xff09;剪枝处理1、预剪枝2、后剪枝 三、决策树的优缺点四、决策树分类任…

ai扩图使用什么软件?无损扩图用这5个

你们知道ai扩图是什么吗&#xff1f;其实就是利用人工智能技术对图片进行无损放大处理&#xff0c;让低分辨率的图片变得清晰。通常在图像处理、设计和摄影领域尤为实用。 那么&#xff0c;你们知道ai扩图在线工具怎么选吗&#xff1f;别急&#xff0c;下面这篇文章分享5个超好…

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能&#xff0c;但它与其他Python库&#xff08;如Matplotlib和Seaborn&#xff09;无缝集成&#xff0c;允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法&#xff1a; 1. 使用Matplotlib Pandas中的plot()方法…

品读 Java 经典巨著《Effective Java》90条编程法则,第4条:通过私有构造器强化不可实例化的能力

文章目录 【前言】欢迎订阅【品读《Effective Java》】系列专栏java.lang.Math 类的设计经验总结 【前言】欢迎订阅【品读《Effective Java》】系列专栏 《Effective Java》是 Java 开发领域的经典著作&#xff0c;作者 Joshua Bloch 以丰富的经验和深入的知识&#xff0c;全面…

【软件文档】软件系统应急处理方案(word原件)

1 总则   1.1 目的 1.2 工作原则   2 应急工作小组机构及职责 3 预警和预防机制 3.1 系统监测及报告   3.2 预警 3.3 预警支持系统 3.4 预防机制 4 应急处理程序 4.1 系统突发事件分类分级的说明 4.2 系统应急预案启动 4.3 现场应急处理 5 保障措施   5.1 应急演练 5.2…

时间复杂度计算 递归

我们先拿出 2021 csp-s 程序题中一道看着就头大的程序题&#xff0c;要求分析 solve1 的复杂度。 设 T(n) ⁡ \operatorname{T(n)} T(n) 表示数组长度为 n n n 时的复杂度&#xff08;即 m − h 1 n m-h1n m−h1n&#xff09;。 T ( 1 ) 1 T(1)1 T(1)1&#xff0c;根据…

R语言机器学习算法实战系列(一):XGBoost算法(eXtreme Gradient Boosting)

介绍 XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升决策树(GBDT)的优化算法,它在处理大规模数据集和复杂模型时表现出色,同时在防止过拟合和提高泛化能力方面也有很好的表现。以下是XGBoost算法的原理和应用方向的详细介绍: 算法原理 目标函数:XGBoost的目标…

华为ensp中vlan与静态路由技术的实现

vlan 同一网段的设备&#xff0c;可以互通&#xff1b; 虚拟局域网&#xff1a;将局域网从逻辑上划分为多个局域网&#xff0c;不同通过vlan编号区分&#xff1b; 实现网络隔离。提高了网络安全性&#xff1b; vlan编号为12位&#xff1b; 范围1-4094可以用来配置 默认处于…

pytorch-AutoEncoders实战

目录 1. AutoEncoders回顾2. 实现网络结构3. 实现main函数 1. AutoEncoders回顾 如下图&#xff1a;AutoEncoders实际上就是重建自己的过程 2. 实现网络结构 创建类继承自nn.Model&#xff0c;并实现init和forward函数&#xff0c;init中实现encoder、decoder 直接上代码&a…

代码随想录算法训练营第13天|二叉树基础知识、递归遍历、迭代遍历、层序遍历、116. 填充每个节点的下一个右侧节点指针

目录 二叉树基础深度和高度满二叉树和完全二叉树二叉搜索树和平衡二叉搜索树二叉树节点定义前中后序遍历 递归遍历前序递归遍历—144. 二叉树的前序遍历 迭代遍历层序遍历116. 填充每个节点的下一个右侧节点指针1、题目描述2、思路3、code 二叉树基础 深度和高度 满二叉树和完…

XSS跨站脚本攻击及防护

什么是XSS攻击&#xff1f; XSS(Cross-Site Scripting,跨站脚本攻击)是一种代码注入攻击。攻击者在目标网站上注入恶意代码&#xff0c;当用户(被攻击者)登录网站时就会执行这些恶意代码&#xff0c;通过这些脚本可以读取cookie,session tokens&#xff0c;或者网站其他敏感的网…

Ubuntu WSL使用技巧

0 Preface/Foreword 1 默认为root用户 当下载完成Ubuntu之后&#xff0c;首次登录&#xff0c;当完成初始化后&#xff0c;提示输入新的用户名时候&#xff0c;直接点击右上角的X按钮&#xff0c;再重新登陆&#xff0c;系统会默认使用root权限登录。 2 root用户和普通用户切换…

阿里云社区领积分自动打卡Selenium IDE脚本

脚本 感觉打卡比较麻烦&#xff0c;要点开点按钮这种机械化的操作。 所以就自己整了个脚本&#xff1a; { “id”: “f9999777-9ad6-40e0-9435-4f105919c982”, “version”: “2.0”, “name”: “aliyun”, “url”: “https://developer.aliyun.com”, “tests”: [{ “id”…

ubuntu22安装docker

1、查看服务器系统信息 uname -a&#xff1a;显示内核名称、主机名、内核版本、处理器类型等信息。 lsb_release -a&#xff1a;显示有关 Ubuntu 发行版的详细信息&#xff0c;包括版本号、代号等。 free -h&#xff1a;查看系统内存使用情况。 df -h&#xff1a;查看磁盘空间使…

Vue2时间轴组件(TimeLine/分页、自动顺序播放、暂停、换肤功能、时间选择,鼠标快速滑动)

目录 1介绍背景 2实现原理 3组件介绍 4代码 5其他说明 1介绍背景 项目背景是 一天的时间轴 10分钟为一间隔 一天被划分成144个节点 一页面12个节点 代码介绍的很详细 可参考或者借鉴 2实现原理 对Element-plus滑块组件的二次封装 基于Vue2&#xff08;2.6.14&#x…