文章目录

  • HTTP/0.9
  • HTTP/1.0
  • HTTP/1.1
  • HTTP/2
  • HTTP/3
  • HTTP 是什么?
  • CDN
  • TCP/IP
  • DNS
  • URI/URL
  • SSL/TLS
  • 代理
  • TCP/IP 网络分层模型
  • OSI 网络分层模型

你能把它们都解释清楚吗?

  • 用 Nginx 搭建 Web 服务器,照着网上的文章配好了,但里面那么多的指令,什么 keepalive、rewrite、proxy_pass 都是怎么回事?为什么要这么配置?
  • 用 Python 写爬虫,URI、URL“傻傻分不清”,有时里面还会加一些奇怪的字符,怎么处理才好?
  • 都说 HTTP 缓存很有用,可以大幅度提升系统性能,可它是怎么做到的?又应该用在何时何地?
  • HTTP 和 HTTPS 是什么关系?还经常听说有 SSL/TLS/SNI/OCSP/ALPN……这么多稀奇古怪的缩写,头都大了,实在是搞不懂。

1989 年,蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。
URI:即统一资源标识符,作为互联网上资源的唯一身份;
HTML:即超文本标记语言,描述超文本文档;
HTTP:即超文本传输协议,用来传输超文本。
蒂姆把这个系统称为“万维网”(World Wide Web),也就是我们现在所熟知的 Web。

HTTP/0.9

  • 蒂姆·伯纳斯 - 李最初设想的系统里的文档都是只读的,所以只允许用“GET”动作从服务器上获取 HTML 文档,并且在响应请求之后立即关闭连接,功能非常有限。

  • HTTP/0.9 虽然很简单,但它作为一个“原型”,充分验证了 Web 服务的可行性,而“简单”也正是它的优点,蕴含了进化和扩展的可能性。

“把简单的系统变复杂”,要比“把复杂的系统变简单”容易得多。

HTTP/1.0

HTTP/1.0 版本在 1996 年正式发布。它在多方面增强了 0.9 版,形式上已经和我们现在的 HTTP 差别不大了

  • 增加了 HEAD、POST 等新方法;
  • 增加了响应状态码,标记可能的错误原因;
  • 引入了协议版本号概念;
  • 引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;
  • 传输的数据不再仅限于文本。

HTTP/1.1

1995 年,网景的 Netscape Navigator 和微软的 Internet Explorer 开始了著名的“浏览器大战”,都希望在互联网上占据主导地位。

  • 在“浏览器大战”结束之后的 1999 年,HTTP/1.1 发布了 RFC 文档,编号为 2616,正式确立了延续十余年的传奇。

HTTP/1.1 主要的变更点有

  • 增加了 PUT、DELETE 等新的方法;
  • 增加了缓存管理和控制;
  • 明确了连接管理,允许持久连接;
  • 允许响应数据分块(chunked),利于传输大文件;
  • 强制要求 Host 头,让互联网主机托管成为可能。

HTTP/2

  • 互联网标准化组织以 SPDY 为基础开始制定新版本的 HTTP 协议,最终在 2015 年发布了 HTTP/2,RFC 编号 7540。

HTTP/2 的制定充分考虑了现今互联网的现状:宽带、移动、不安全,在高度兼容 HTTP/1.1 的同时在性能改善方面做了很大努力,主要的特点有:

  • 二进制协议,不再是纯文本;
  • 可发起多个请求,废弃了 1.1 里的管道;
  • 使用专用算法压缩头部,减少数据传输量;
  • 允许服务器主动向客户端推送数据;
  • 增强了安全性,“事实上”要求加密通信。

目前它的普及率还比较低,大多数网站使用的仍然还是 20 年前的 HTTP/1.1。

HTTP/3

HTTP 是什么?

  • HTTP 的名字:“超文本传输协议”,它可以拆成三个部分,分别是:“超文本”“传输”和“协议”。
  • 协议:HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
  • 传输:HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
  • 超文本:就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

  • HTTP 是一个用在计算机世界里的协议,它确立了一种计算机之间交流通信的规范,以及相关的各种控制错误处理方式。

  • HTTP 专门用来在两点之间传输数据,不能用于广播、寻址或路由。

  • HTTP 传输的是文字、图片、音频、视频等超文本数据。

  • HTTP 是构建互联网的重要基础技术,它没有实体,依赖许多其他的技术来实现,但同时许多技术也都依赖于它。

  • 在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。

  • 互联网上还有许多万维网(基于HTTP协议)之外的资源,例如常用的电子邮件、BT 和 Magnet 点对点下载、FTP 文件下载、SSH 安全登录、各种即时通信服务等等,它们需要用各自的专有协议来访问。
  • 在 HTTP 协议里,浏览器的角色被称为“User Agent”即“用户代理”,意思是作为访问者的“代理”来发起 HTTP 请求。

CDN

CDN,全称是“Content Delivery Network”,翻译过来就是“内容分发网络”。它应用了 HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求。

TCP/IP

  • TCP/IP 协议实际上是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈
  • 这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP 属于“传输层”,IP 属于“网际层”。
  • IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包
  • TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于 IP 协议之上,基于 IP 协议提供可靠的字节流形式的通信,是 HTTP 协议得以实现的基础。
  • HTTP 是一个"传输协议",但它不关心寻址、路由、数据完整性等传输细节,而要求这些工作都由下层来处理。因为互联网上最流行的是 TCP/IP 协议,而它刚好满足 HTTP 的要求,所以互联网上的 HTTP 协议就运行在了 TCP/IP 上,HTTP 也就可以更准确地称为“HTTP over TCP/IP”。

DNS

  • 域名系统(Domain Name System):用有意义的名字来作为 IP 地址的等价替代。
  • 域名用“.”分隔成多个单词,级别从左到右逐级升高,最右边的被称为“顶级域名”。对于顶级域名,可能你随口就能说出几个,例如表示商业公司的“com”、表示教育机构的“edu”,表示国家的“cn”“uk”等,买火车票时的域名还记得吗?是“www.12306.cn”。但想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它的真实 IP,这就是所谓的“域名解析”。
  • 域名使用字符串来代替 IP 地址,方便用户记忆,本质上一个名字空间系统;
  • DNS 就像是我们现实世界里的电话本、查号台,统管着互联网世界里的所有网站,是一个“超级大管家”;
  • DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存;
  • 使用 DNS 可以实现基于域名的负载均衡,既可以在内网,也可以在外网。

URI/URL

  • URI(Uniform Resource Identifier),中文名称是 统一资源标识符,使用它就能够唯一地标记互联网上资源。
  • URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。

http://nginx.org/en/download.html

URI 主要有三个基本的部分构成:

  • 协议名:即访问该资源应当使用的协议,在这里是“http”;
  • 主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“nginx.org”;
  • 路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/en/download.html”。

SSL/TLS

  • SSL/TLS:它是一个负责加密通信的安全协议,建立在 TCP/IP 之上,所以也是个可靠的传输协议,可以被用作 HTTP 的下层。
  • HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,其中的“HTTP”和“TCP/IP”我们都已经明白了,只要再了解一下 SSL/TLS,HTTPS 也就能够轻松掌握。
  • SSL 使用了许多密码学最先进的研究成果,综合了对称加密非对称加密摘要算法数字签名数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道,为 HTTP 套上一副坚固的盔甲。

代理

  • 代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。

代理有很多的种类,常见的有:

  • 匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;
  • 透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
  • 正向代理:靠近客户端,代表客户端向服务器发送请求;
  • 反向代理:靠近服务器端,代表服务器响应客户端的请求;

由于代理在传输过程中插入了一个“中间层”,所以可以在这个环节做很多有意思的事情,比如:

  • 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
  • 内容缓存:暂存上下行的数据,减轻后端的压力;
  • 安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;
  • 数据处理:提供压缩、加密等额外的功能。

TCP/IP 网络分层模型

听别人谈起什么“四层负载均衡”、“七层负载均衡”,什么“二层转发”、“三层路由”,那么你真正理解这些层次的含义吗?

  • 第一层叫“链接层”(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层
  • 第二层叫“网际层”或者“网络互连层”(internet layer),IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。
  • 第三层叫“传输层”(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。
  • 第四层叫“应用层”(application layer),由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的 HTTP。

MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。两个协议的另一个重要区别在于数据的形式。TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。

OSI 网络分层模型

  • 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
  • 第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
  • 第三层:网络层,相当于 TCP/IP 里的网际层;
  • 第四层:传输层,相当于 TCP/IP 里的传输层;
  • 第五层:会话层,维护网络中的连接状态,即保持会话和同步;
  • 第六层:表示层,把数据转换为合适、可理解的语法和语义;
  • 第七层:应用层,面向具体的应用传输数据。

所谓的“四层负载均衡”就是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。
所谓的“七层负载均衡”就是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。
二层转发:设备工作在链路层,帧在经过交换机设备时,检查帧的头部信息,拿到目标mac地址,进行本地转发和广播
三层路由:设备工作在ip层,报文经过有路由功能的设备时,设备分析报文中的头部信息,拿到ip地址,根据网段范围,进行本地转发或选择下一个网关。

凡是由操作系统负责处理的就是四层或四层以下,否则,凡是需要由应用程序(也就是你自己写代码)负责处理的就是七层。

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步

HTTP协议之入门篇相关推荐

  1. 深入浅出 Fast DDS网络协议(入门篇)

    如果你是机器人领域的学者,那一定听说过ROS1和ROS2,但这两个有什么区别呢? ROS1作为一个通信中间件,在两两节点建立TCP/UDP连接之前,通过发布者和订阅者通过xmlRPC和master进行 ...

  2. 网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

    本文中文译文由作者"ably.io"发布于公众号"高可用架构",译文原题:<深入解读HTTP3的原理及应用>.英文原题:<HTTP/3 dee ...

  3. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

  4. Android10.0 Binder通信原理(二)-Binder入门篇

    摘要:本节主要来讲解Android10.0 Binder的设计原理,如何设计一个Binder通信 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分 ...

  5. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  6. python sub 不区分大小写_Python网络爬虫入门篇

    1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...

  7. 1 Orchard 入门篇-Orchard 基本概念

    引言:最近学习Orchard,被它的各种机制彻底迷上了,有点相见恨晚的感觉,学习起来完全停不下来,工作10多年没写过1篇博客的我都忍不住开通博客,记录下自己使用Orchard做项目的点点滴滴.本系列连 ...

  8. JMeter性能测试,完整入门篇(自己做测试了)

    原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...

  9. Windows Server 2008 R2 负载平衡入门篇

    一.简单介绍负载均衡 负载均衡也称负载共享,它是指负载均衡是指通过对系统负载情况进行动态调整,把负荷分摊到多个操作节点上执行,以减少系统中因各个节点负载不均衡所造成的影响,从而提高系统的工作效率. 在 ...

最新文章

  1. Invalid input for operation: physical_network 'physnet1' unknown for flat provider network.
  2. 【图像分割应用】医学图像分割(二)——心脏分割
  3. HDFS的exists函数解析
  4. 14周课堂测试---找水王
  5. Nginx的页面中文乱码解决方法
  6. 多核编程与单核多线程编程
  7. WZ132发现打CXY要么是程序员,要么是丑小鸭
  8. android异步加载视频缩略图,swift-如何将视频URL的缩略图异步加载到tableview列表中...
  9. 实例练习----电影天堂抓取下载链接
  10. 解决办法:/usr/bin/ld: 找不到 -lstdc++
  11. 多省市房屋交易平台引入电子签章推动住房交易合同网签备案
  12. php qrcode二维码应用
  13. 解决讯飞语音唤醒参数无效(错误码:10106)的问题
  14. BZOJ4134: ljw和lzr的hack比赛
  15. Invalid bound statement (not found): com.xingyu.demo.mapper.UserMapper.update错误
  16. 威联通 nas mysql_威联通(NAS)应用篇:自建OwnCloud网盘(百度网盘,拜拜~~~)
  17. 使用 Python 进行面部特征检测和面部过滤器
  18. VMware Workstation 虚拟机不兼容解决方法
  19. C#绘制九宫格形式的图片
  20. 使用Apache2 搭建静态文件服务器

热门文章

  1. 2019苹果开发者账号申请流程
  2. ZZULIOJ:1051: 平方根的和
  3. opencv学习-第1节:环境配置与搭建
  4. Idea将maven项目打包成jar包
  5. 推荐好用到爆的电脑软件 每款都是精品
  6. ESP8266-Arduino编程实例-PCA9685 LED控制器驱动
  7. 计算机音乐谱棠梨煎雪,棠梨煎雪钢琴谱-银临-冬寒思雪又一年
  8. python实现dfa过滤算法_Python实现DFA算法,完成实体词匹配和敏感词过滤等功能
  9. 【CEF】《CEF 桌面软件开发实战》笔记-汇总
  10. 郑重告之:智能合约开发实训营第4期学员招募正式启动!