前言
作为一名程序员,可能多数人都偏向于后端敲代码,但是关于的知识可千万不能忘呀!
还有对 络协议感兴趣的小伙伴,这篇对你也很有帮助,可以了解HTTP的一整套流程
所以本篇博客就来重拾,最不济看完也要入门吧!!!
文章可能会理论偏多,所以看不完的记得!要不然以后就找不到了哦~
有些地方可能介绍的不够深刻,想单独了解某一块的还需要自己进行深入了解啦!
六万字 HTTP 必备干货学习,程序员不懂 络怎么行,一篇HTTP入门不收藏都可惜!
首先,要知道 HTTP 是什么,懂一些 络知识的人应该都知道HTTP就是一种,相对应的还有SSH、FTP等等其它的协议
-
(HTTP)是一种应用层用于传输超媒体文档的协议,例如。是互联 上应用最为广泛的一种 络协议
-
它专为 Web 浏览器和 Web 服务器之间的而设计,但也可用于其他目的。
-
HTTP 遵循经典的模型,客户端打开连接发出请求,然后等待直到收到响应。
-
HTTP 是一个,这意味着服务器不会在两个请求之间保留任何数据(状态)。
-
HTTP 是一种,它依赖于资源和统一资源标识符 (URI)、简单的消息结构和客户端-服务器通信流等概念。在这些基本概念之上,多年来开发了许多扩展,这些扩展使用新的 HTTP 方法或标头添加了更新的功能和语义。
HTTP 协议五个特点:
- 支持客户/服务器模式。
- 简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。 - 灵活:
HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。 - 无连接:
无连接的含义是限制每次连接只处理一个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
采用这种方式可以节省传输时间。 - 无状态:
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息(Cookie和Session孕育而生)。
络结构图解
先来几种关于 络协议相关知识的图片,来大概认识一下
下面是七层和五层结构
HTTP概述
HTTP是一个协议(协议是定义数据是如何内或计算机之间交换规则的系统。
设备之间的通信要求设备就正在交换的数据格式达成一致。定义格式的一组规则称为协议),其允许资源,诸如HTML文档的抓取。
它是Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求由接收方(通常是 Web 浏览器)发起。
从获取的不同子文档(例如文本、布局描述、图像、视频、脚本等)重建完整的文档。
基于 HTTP 的系统的组件
HTTP 是一种客户端-服务器协议:请求由一个实体发送,即用户代理(或代表它的代理)。大多数情况下,用户代理是一个 Web 浏览器,但它可以是任何东西,例如爬行 Web 以填充和维护搜索引擎索引的机器人。
每个单独的请求都被发送到一个服务器,该服务器处理它并提供一个称为response的答案。例如,在客户端和服务器之间有许多实体,统称为代理,它们执行不同的操作并充当 关或缓存。
-
一个HTTP方法,通常是一个动词等GET,POST或像一个名词OPTIONS或HEAD定义客户端想要执行操作。通常,客户端想要获取资源(使用GET)或发布HTML 表单的值(使用POST),但在其他情况下可能需要更多操作。
-
要获取的资源的路径;从上下文中显而易见的元素中剥离的资源 URL,例如没有协议( http://)、域(此处为developer.mozilla.org)或 TCP端口(此处为80)。
-
HTTP 协议的版本。
-
为服务器传达附加信息的可选标头。
响应
一个示例响应:

响应由以下元素组成:
- 他们遵循的 HTTP 协议的版本。
- 一个状态代码(status code),表示如果请求成功,或没有,以及为什么。
- 状态消息,状态代码的非权威性简短描述。
- HTTP标头,就像请求的标头一样。
- 可选地,包含获取的资源的正文。
基于 HTTP 的 API
最常用的基于 HTTP 的API是XMLHttpRequestAPI,它可以用于在用户代理和服务器之间交换数据。现代Fetch API提供了相同的功能和更强大、更灵活的功能集。
另一个 API,服务器发送事件( server-sent events),是一种单向服务,它允许服务器使用 HTTP 作为传输机制向客户端发送事件。
使用该EventSource接口,客户端打开一个连接并建立事件处理程序。客户端浏览器自动将到达 HTTP 流的消息转换为适当的Event对象,将它们传递给已为事件注册的事件处理程序(type如果已知),或者onmessage如果没有建立特定类型的事件处理程序,则传递给事件处理程序。
HTTP 是一种易于使用的可扩展协议。客户端-服务器结构与添加标头的能力相结合,允许 HTTP 与 Web 的扩展功能一起发展。
尽管 HTTP/2 增加了一些复杂性,但通过在帧中嵌入 HTTP 消息来提高性能,消息的基本结构自 HTTP/1.0 以来一直保持不变。会话流保持简单,允许使用简单的HTTP 消息监视器对其进行调查和调试。
HTTP 的演变
HTTP(超文本传输协议)是万维 的底层协议。由 Tim Berners-Lee 及其团队在 1989 年至 1991 年间开发的 HTTP 经历了许多变化,保留了大部分简单性并进一步塑造了其灵活性。HTTP 已经从早期在半可信实验室环境中交换文件的协议演变为现代互联 迷宫,现在承载高分辨率和 3D 图像、视频。
万维 的发明
1989 年,在欧洲核子研究中心工作期间,蒂姆·伯纳斯-李 (Tim Berners-Lee) 撰写了一份在 Internet 上构建超文本系统的提案。最初将其称为Mesh,后来在 1990 年实施期间更名为万维 。 它基于现有的 TCP 和 IP 协议构建,由 4 个构建块组成:
- 一个服务器用于提供可访问的文档,即 httpd 的前身。
这四个部分于 1990 年底完成,且第一批服务器已经在 1991 年初在 CERN 以外的地方运行了。 1991 年 8 月 16 日,Tim Berners-Lee 在公开的文本超新闻组上发表的文章被视为是万维 公共项目的开始。
HTTP在应用的早期阶段非常简单,后来变成了HTTP/0.9,有时也可以上 协议单行(one-line)。
HTTP/0.9 – 单行协议
最初版本的HTTP协议并没有版本 ,之后的版本 被定位在0.9,以各个版本的版本为准。 HTTP/0.9非常简单:请求由单行语句构成,以唯一的方法GET开头,其后跟目标资源的路径(游戏连接到服务器,协议、服务器、端口 这些都不是必须的)。
响应也极其简单的:只包含响应文档。
跟后来的不同版本,HTTP/0.9 的响应内容没有包含 HTTP 头,这表明只有 HTML 文件可以发送,无法传输其他类型的文件;也没有状态码或错误代码:出现问题,一个特殊的包含问题描述信息的HTML文件将被发回,供人们查看。
HTTP/1.0 – 构建可扩展性
由于 HTTP/0.9 协议的应用十分有限,服务器和服务器迅速扩展内容浏览范围更广:
- 协议版本信息现在会随着请求发送(HTTP/1.0被添加到了GET行)。
- 状态码会在响应开始时发送,使浏览器能够了解请求执行成功或失败,并相应调整行为(如更新或本地使用)。
- 引入了HTTP头的概念,无论是对于请求还是响应,都允许传输元数据,使协议变得非常灵活,扩展性很强。
- 在新 HTTP 头的帮助下,具备了传输除纯文本 HTML 文件以外的其他类型文档的能力(感谢Content-Type头)。
一个典型的请求像这样:
接下来是第二个连接,请求获取图片:
在 1991-1995 年,这些新扩展并没有被引入到标准中以辅助帮助工作,而作为一种尝试:服务器和浏览器添加了这些新扩展功能,但出现了大量的互操作问题。直到 1996 年11 月,为了解决这些问题,一份新的文档(RFC 145)被发表出来,描述了如何操作实践这些新扩展功能。文档 RFC 1945 定义了 HTTP/1.0,但它是狭义的,不是官方标准。
HTTP/1.1 – 模块化的协议
HTTP/1.0 多种不同的实现方式在实践文档中,自1995 年开始,即HTTP/1.0 发布的下一年,就开始修订HTTP 的第一个标准版本。在1997 年初,HTTP1. 1 标准发布,就在HTTP/1.0发布后。
HTTP/1.1删除了大量的歧义内容并引用了声明:
- 连接可以一次,节省了很多时间打开TCP连接加载 页文档资源的时间。
- 第一次增加就化技术,允许在第一个通知被完全发送之后第二个请求,以降低延迟。
- 支持响应分块。
- 引入额外的检测控制。
- 引入内容协商机制,包括语言、编码、编码等,并允许客户端和服务器之间约定以最合适的内容进行交换。
- 感谢Host头,能够使不同的域名配置在同一个IP地址的服务器上。
一个典型的请求流程, 所有请求都通过一个连接实现,看起来就像这样:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!