百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

HTTP总结——一文搞定HTTP

bigegpt 2024-08-28 12:18 8 浏览

HTTP总结

  • 一:HTTP 基本概念
  • 1、HTTP 是什么?2、什么是超文本传输协议?(1) 「超文本」(2) 「传输」(3) 「协议」
  • 二:HTTP 常见的状态码,有哪些?http 常见字段有哪些?
  • HTTP 常见的状态码(1)1xx(2)2xx(3)3xx(4)4xx(5)5xxhttp 常见字段(1)Host(2)Content-Length 字段(3)Connection 字段(4)Content-Type 字段(5)Content-Encoding 字段
  • 三:HTTP 特性
  • 1、 HTTP(1.1) 的优点?(1)简单(2)灵活和易于扩展(3)应用广泛和跨平台2、HTTP(1.1) 的缺点?(1)无状态(2)明文传输(3)不安全3、HTTP/1.1 的性能(1)长连接(2)管道网络传输(3)队头阻塞

一:HTTP 基本概念

1、HTTP 是什么?

??HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。

2、什么是超文本传输协议?

HTTP的名字「超文本协议传输」,它可以拆成三个部分:

  • 超文本
  • 传输
  • 协议

(1) 「超文本」

??HTTP 传输的内容是「超文本」。
??我们先来理解「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算做「文本」。
??再来理解「超文本」,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键的是它有超链接,能从一个超文本跳转到另外一个超文本。

?比如:HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,在经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。

(2) 「传输」

??所谓的「传输」,就是把一堆东西从 A 点搬到 B 点,或者从 B 点 搬到 A 点。
??HTTP 协议是一个无状态,无连接的双向协议。
举个例子:
我们在上网冲浪时,浏览器是请求方 A ,百度网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。


??数据虽然是在 A 和 B 之间传输,但允许中间有中转或接力。只要中间人遵从 HTTP 协议,并且不打扰基本的数据传输,就可以添加任意额外的东西。

(3) 「协议」

针对 HTTP 协议,我们可以这么理解:
??HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。

综上所述,我们可以说:
??HTTP 是一个在计算机世界里专门在 两点 之间 传输 文字、图片、音频、视频等 超文本 数据的 约定和规范

注意:我们所说的两点之间,包括服务器与服务器之间,还包括服务器与客户端之间。



二:HTTP 常见的状态码,有哪些?http 常见字段有哪些?

HTTP 常见的状态码

(1)1xx

?1xx?类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

(2)2xx

?2xx?类状态码表示服务器成功处理了客户端的请求,也是身为程序员最愿意看到的状态。

状态码

状态详情

「200 OK」

是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。

「204 No Content」

也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。

「206 Partial Content」

是应用于 HTTP 分块下载或断电续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

(3)3xx

?3xx?类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。

状态码

状态详情

「301 Permanently Moved」

表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

「302 Found 」

表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

「304 Not Modified」

不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。

(4)4xx

?4xx?类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

状态码

状态详情

「400 Bad Request」

表示客户端请求的报文有错误,但只是个笼统的错误。

「403 Forbidden」

表示服务器禁止访问资源,并不是客户端的请求出错。

「404 Not Found」

表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

(5)5xx

?5xx?类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

状态码

状态详情

「500 Internal Server Error」

与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。

「501 Not Implemented」

表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。

「502 Bad Gateway」

通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

「503 Service Unavailable」

表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。

http 常见字段

(1)Host

??客户端发送请求时,用来指定服务器的域名。

Host: www.A.com
有了 Host 字段,就可以将请求发往「同一台」服务器上的不同网站

(2)Content-Length 字段

??服务器在返回数据时,会有 Content-Length字段,表明本次回应的数据长度。

如上面则是告诉浏览器,本次服务器回应的数据长度是 1000 个字节,后面的字节就属于下一个回应了。

(3)Connection 字段

??Connection字段最常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。

一个可以复用的 TCP 连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段。

(4)Content-Type 字段

??Content-Type字段用于服务器回应时,告诉客户端,本次数据是什么格式。

上面的类型表明,发送的是网页,而且编码是UTF-8。
客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。上面代码中,客户端声明自己可以接受任何格式的数据。

(5)Content-Encoding 字段

??Content-Encoding字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式

上面表示服务器返回的数据采用了gzip方式压缩,告知客户端需要用此方式解压。

客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。

三:HTTP 特性

1、 HTTP(1.1) 的优点?

??HTTP 最凸出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。

(1)简单

??HTTP 基本的报文格式就是 header + body,头部信息也是 key-value简单文本的形式,易于理解,降低了学习和使用的门槛。

(2)灵活和易于扩展

??HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。

??同时 HTTP 由于是工作在应用层( OSI 第七层),则它下层可以随意变化。

??HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚至把 TCPP 层换成了基于 UDP 的 QUIC。

(3)应用广泛和跨平台

??互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用片地开花,同时天然具有跨平台的优越性。

2、HTTP(1.1) 的缺点?

??HTTP 协议里有优缺点一体的双刃剑,分别是「无状态、明文传输」,同时还有一大缺点「不安全」。

(1)无状态

??无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。

??无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。

??例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。

??这样每操作一次,都要验证信息,这样的购物体验还能愉快吗?
对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的「小贴纸」,后续客户端请求服务器的时候,带上「小贴纸」,服务器就能认得了。


(2)明文传输

??明文意味着在传输过程中的信息,是可方便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。

??但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取,如果里面有你的账号密码信息,那你号没了。

(3)不安全

??HTTP 比较严重的缺点就是不安全:

  • 通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。
  • 不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。
  • 无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。

HTTP 的安全问题,可以用 HTTPS 的方式解决,也就是通过引入 SSL/TLS 层,使得在安全上达到了极致。

3、HTTP/1.1 的性能

(1)长连接

??早期 HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无畏的 TCP 连接建立和断开,增加了通信开销。

??为了解决上述 TCP 连接问题,HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

??持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

(2)管道网络传输

??HTTP/1.1 采用了长连接的方式,这使得管道(pipeline)网络传输成为了可能。

??即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

??举例来说,客户端需要请求两个资源。以前的做法是,在同一个TCP连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。管道机制则是允许浏览器同时发出 A 请求和 B 请求。
??但是服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。要是 前面的回应特别慢,后面就会有许多请求排队等着。这称为「队头堵塞」。

(3)队头阻塞

??「请求 - 应答」的模式加剧了 HTTP 的性能问题。

??因为当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据,这也就是「队头阻塞」。好比上班的路上塞车。


相关推荐

Linux gron 命令使用详解(linux gminer)

简介gron是一个独特的命令行工具,用于将JSON数据转换为离散的、易于grep处理的赋值语句格式。它的名字来源于"grepableon"或"grepable...

【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu

学习Linux并掌握Java环境配置及SpringBoot项目部署是一个系统化的过程,以下是从零开始的详细指南,帮助你逐步掌握这些技能。一、Linux基础入门1.安装Linux系统选择发行版:推荐...

Linux常用的shell命令汇总(linux中shell的作用)

本文介绍Linux系统下常用的系统级命令,包括软硬件查看、修改命令,有CPU、内存、硬盘、网络、系统管理等命令。说明命令是在Centos6.464位的虚拟机系统进行测试的。本文介绍的命令都会在此C...

零成本搭建个人加密文件保险柜(适用于 Win11 和 Linux)

不依赖收费软件操作简单,小白也能跟着做支持双系统,跨平台使用实现数据加密、防删除、防泄露内容通俗无技术门槛,秒懂秒用使用工具简介我们将使用两个核心工具:工具名用途系统支持Veracrypt创建加密虚...

如何在 Linux 中使用 Gzip 命令?(linux怎么用gzip命令)

gzip(GNUzip)是Linux系统中一个开源的压缩工具,用于压缩和解压缩文件。它基于DEFLATE算法,广泛应用于文件压缩、备份和数据传输。gzip生成的文件通常带有.gz后缀,压缩效率...

Linux 必备的20个核心知识点(linux内核知识点)

学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...

谷歌 ChromeOS 已支持 7z、iso、tar 文件格式

IT之家6月21日消息,谷歌ChromeOS在管理文件方面进行了改进,新增了对7z、iso和tar等格式的支持。从5月的ChromeOS101更新开始,ChromeOS...

如何在 Linux 中提取 Tar Bz2 文件?

在深入解压方法之前,我们先来了解.tar.bz2文件的本质。.tar.bz2是一种组合文件格式,包含两个步骤:Tar(TapeArchive):tar是一种归档工具,用于将多个文件或目录打包...

如何在 CentOS 7/8 上安装 Kitematic Docker 管理器

Kitematic是一款流行的Docker图形界面管理平台,适用于Ubuntu、macOS和Windows操作系统。然而,其他发行版(如CentOS、OpenSUSE、Fedora、R...

Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!

之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...

爬虫搞崩网站后,程序员自制“Zip炸弹”反击,6刀服务器成功扛住4.6万请求

在这个爬虫横行的时代,越来越多开发者深受其害:有人怒斥OpenAI的爬虫疯狂“偷”数据,7人团队十年心血的网站一夜崩溃;也有人被爬虫逼到极限,最后只好封掉整个巴西的访问才勉强止血。但本文作者却走...

Ubuntu 操作系统常用命令详解(ubuntu必学的60个命令)

UbuntuLinux是一款流行的开源操作系统,广泛应用于服务器、开发、学习等场景。命令行是Ubuntu的灵魂,也是高效、稳定管理系统的利器。本文按照各大常用领域,详细总结Ubuntu必学...

Linux面板8.0.54 测试版-已上线(linux主机面板)

Linux面板8.0.54测试版【增加】[网站]Java项目新增刷新列表按钮【增加】[网站]PHP项目-Apache-服务新增守护进程功能【增加】[网站]Python项目创建/删除网站时新增同时创建...

开源三剑客——构建私有云世界的基石

公共云原生的浪潮正在席卷这个世界,亚马逊AWS、谷歌GCP和微软的Azure年收入增长超过了30%,越来越多的公司和个人开始将自己的服务部署到云环境中,大型数据中心的规模经济带来了成本的降低,可以在保...

2.2k star,一款业界领先的私有云+在线文档管理系统

简介kodbox可道云(原KodExplorer)是业内领先的企业私有云和在线文档管理系统,为个人网站、企业私有云部署、网络存储、在线文档管理、在线办公等提供安全可控,简便易用、可高度定制的私有云产品...