六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜

请添加图片描述

前言

作为一名程序员,可能多数人都偏向于后端敲代码,但是关于的知识可千万不能忘呀!

还有对网络协议感兴趣的小伙伴,这篇对你也很有帮助,可以了解HTTP的一整套流程

所以本篇博客就来重拾,最不济看完也要入门吧!!!

文章可能会理论偏多,所以看不完的记得!要不然以后就找不到了哦~

本文会从HTTP的、、、、、、和等方面进行一个基本的介绍

有些地方可能介绍的不够深刻,想单独了解某一块的还需要自己进行深入了解啦!

本文知识介绍一些,最起码跟别人提及的时候不会! 完全够用!


六万字 HTTP 必备干货学习,程序员不懂网络怎么行,一篇HTTP入门不收藏都可惜!

首先,要知道 HTTP 是什么,懂一些网络知识的人应该都知道HTTP就是一种,相对应的还有SSH、FTP等等其它的协议

  • (HTTP)是一种应用层用于传输超媒体文档的协议,例如。是互联网上应用最为广泛的一种网络协议

  • 它专为 Web 浏览器和 Web 服务器之间的而设计,但也可用于其他目的。

  • HTTP 遵循经典的模型,客户端打开连接发出请求,然后等待直到收到响应。

  • HTTP 是一个,这意味着服务器不会在两个请求之间保留任何数据(状态)。

  • HTTP 是一种,它依赖于资源和统一资源标识符 (URI)、简单的消息结构和客户端-服务器通信流等概念。在这些基本概念之上,多年来开发了许多扩展,这些扩展使用新的 HTTP 方法或标头添加了更新的功能和语义。

HTTP 协议五个特点:

  1. 支持客户/服务器模式。
  2. 简单快速:
    客户向服务器请求服务时,只需传送请求方法和路径。
  3. 灵活:
    HTTP允许传输任意类型的数据对象。
    正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
  4. 无连接:
    无连接的含义是限制每次连接只处理一个请求。
    服务器处理完客户的请求,并收到客户的应答后,即断开连接。
    采用这种方式可以节省传输时间。
  5. 无状态:
    无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
    即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息(Cookie和Session孕育而生)。

网络结构图解

先来几种关于网络协议相关知识的图片,来大概认识一下

下面是七层和五层结构

六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜
六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜

HTTP概述

HTTP是一个协议(协议是定义数据是如何内或计算机之间交换规则的系统。
设备之间的通信要求设备就正在交换的数据格式达成一致。定义格式的一组规则称为协议),其允许资源,诸如HTML文档的抓取。
它是Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求由接收方(通常是 Web 浏览器)发起。
从获取的不同子文档(例如文本、布局描述、图像、视频、脚本等)重建完整的文档。

六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜
HTTP 设计于 1990 年代初,是一种随着时间的推移而发展的可扩展协议。它是通过TCP或通过TLS加密的 TCP 连接发送的应用层协议,尽管理论上可以使用任何可靠的传输协议。
由于其可扩展性,它不仅用于获取超文本文档,还用于获取图像和视频,或者将内容发布到服务器,例如 HTML 表单结果。HTTP 还可用于获取部分文档以按需更新网页。

基于 HTTP 的系统的组件

HTTP 是一种客户端-服务器协议:请求由一个实体发送,即用户代理(或代表它的代理)。大多数情况下,用户代理是一个 Web 浏览器,但它可以是任何东西,例如爬行 Web 以填充和维护搜索引擎索引的机器人。

每个单独的请求都被发送到一个服务器,该服务器处理它并提供一个称为response的答案。例如,在客户端和服务器之间有许多实体,统称为代理,它们执行不同的操作并充当网关或缓存。

六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜
请求由以下元素组成:
  • 一个HTTP方法,通常是一个动词等GET,POST或像一个名词OPTIONS或HEAD定义客户端想要执行操作。通常,客户端想要获取资源(使用GET)或发布HTML 表单的值(使用POST),但在其他情况下可能需要更多操作。

  • 要获取的资源的路径;从上下文中显而易见的元素中剥离的资源 URL,例如没有协议( http://)、域(此处为developer.mozilla.org)或 TCP端口(此处为80)。

  • HTTP 协议的版本。

  • 为服务器传达附加信息的可选标头。

响应

一个示例响应:

六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇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 个构建块组成:

  • 一种表示超文本文档的文本格式,即超文本标记语言(HTML)。
  • 一个交换超文本文档的简单协议,超文本传输协议(HTTP)。
  • 一个显示(以及编辑)超文本文档的客户端,即网络浏览器。第一个网络浏览器被称为 万维网。
  • 一个服务器用于提供可访问的文档,即 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地址的服务器上。

一个典型的请求流程, 所有请求都通过一个连接实现,看起来就像这样:

来源:呆呆敲代码的小Y

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年11月20日
下一篇 2022年11月20日

相关推荐