HTTP:与HTTP协议相关的概念

本文介绍了互联网的基础,包括HTTP协议的作用、浏览器与服务器的角色、CDN的内容分发、爬虫的工作原理以及网络安全措施如WAF。重点讨论了HTTP与TCP/IP、DNS的关系,以及HTTPS在保障通信安全方面的重要性。此外,还提到了代理服务器在负载均衡、安全防护等方面的应用。
摘要由CSDN通过智能技术生成

总图

在这里插入图片描述

  • 左边:与HTTP有关系的各种协议,偏向理论
  • 右边:与HTTP有关系的各种应用技术,偏向实际应用

右边

在这里插入图片描述

网络世界

  • 互联网的正式名称是 Internet,里面存储着无穷无尽的信息资源
  • 互联网世界像是由数不清的大小岛屿组成的“千岛之国”,我们可以从一个节点无障碍的访问到另一个节点
    • 我们通常所说的“上网”实际上访问的只是互联网的一个子集“万维网”(World Wide Web),它基于HTTP协议,传输HTML等超文件资源,能力也被限制在HTTP协议之内
    • 互联网还有很多万维网之外的资源,比如电子邮件、BT、FTP、SSH等,它们需要用各自的专有协议来访问
    • 不过由于HTTP协议非常灵活、易于扩展,而且“超文本”的表述能力很强,所以很多其他不属于HTTP的资源也可以“包装”成HTTP协议来访问,这就是我们为什么能够总看到各种“网页应用”——例如“微信网页版”“邮箱网页版”——的原因。
    • 现在的互联网 90% 以上的部分都被万维网,也就是 HTTP 所覆盖,所以把互联网约等于万维网或 HTTP 应该也不算大错。
      在这里插入图片描述

浏览器

  • 上网就要用到浏览器
  • 所谓的浏览器,就是指web browser,即检索、查看互联网上网页资源的应用程序。名字里面的web,实际上指的是“world wide web”,也就是万维网
  • 浏览器本质上是一个HTTP协议中的请求方,使用HTTP协议能够获取网络上的各种资源。当然,为了让我们更好地检索查看网页,它还集成了很多额外的功能。
  • 在HTTP协议里,浏览器的角色被称为“user agent”,即“用户代理”,意思是作为访问者的“代理”来发起HTTP请求。不过在不引起混淆的情况下,我们通常都简单地称之
    为“客户端”。
    在这里插入图片描述

web服务器

刚刚我们说浏览器是HTTP里的请求方,那么协议另一端的应答方又是什么呢?

  • 就是服务器,web server。
  • web服务器是HTTP协议里响应请求的主体,通常也把控着绝大多数网络资源。

我们谈到“web服务器”是由两个层面的含义:

  • 硬件含义:就是物理形式或者“云”形式的机器,在大多数情况下它可能不是一台服务器,而是利用反向代理、负载均衡等技术组成的庞大集群。但从外界看来,它仍然表现为一台机器,但这个形象是“虚拟的”。
  • 软件含义:(一般概念“web服务器”就是说软件含义的)就是提供web服务的应用程序,通常会运行在硬件含义的服务器上。它利用强大的硬件能力响应海量的客户端HTTP请求,处理磁盘上的网页、图片等静态文件,或者把请求转发给后面的tomcat、node.js等业务应用,返回动态的信息

常用的web服务器如下:

在这里插入图片描述

CDN

浏览器和服务器是HTTP协议的两个端点,但是通常浏览器不会直接连到服务器,中间会经过“重重关卡”,其中一个重要角色就是CDN:

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

CDN 也是现在互联网中的一项重要基础设施,除了基本的网络加速(缓存源站的数据;找到离用户最近的节点等)外,还提供负载均衡、安全防护、边缘计算、跨运营商网络等功能,能够成倍地“放大”源站服务器的服务能力,
在这里插入图片描述

爬虫

什么是爬虫

我们知道,浏览器是一种用户代理,代替我们访问互联网。

但HTTP协议并没有规定用户代理后面必须是“真正的人类”,它也可以是“机器人”,这些“机器人”的正式名称就叫做“爬虫”(Crawler),实际上是一种可以自动访问web资源的应用程序

如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小 蜘蛛,沿着蜘蛛网抓取自己想要的数据

  • 解释1:通过一个程序,根据Url(http://www.taobao.com)进行爬取网页,获取有用信息
  • 解释2:使用程序模拟浏览器,去向服务器发送请求,获取响应信息

爬虫核心

  • 1.爬取网页:爬取整个网页 包含了网页中所有得内容
  • 2.解析数据:将网页中你得到的数据 进行解析
  • 3.难点:爬虫和反爬虫之间的博弈

爬虫分类?

(1)通用爬虫

  • 实例

    • 百度、360、google、sougou等搜索引擎‐‐‐伯乐在线
  • 功能

    • 访问网页‐>抓取数据‐>数据存储‐>数据处理‐>提供检索服务
  • 网站排名(SEO)

      1. 根据pagerank算法值进行排名(参考个网站流量、点击率等指标)
      1. 百度竞价排名
  • 缺点

      1. 抓取的数据大多是无用的
      1. 不能根据用户的需求来精准获取数据
  • 说明: 绝大多数是各大搜索引擎“放”出来的,抓取网页存入数据库,在建立关键字索引,这样我们才能在搜索引擎中快速地搜索到互联网角落里的页面。

(2)聚焦爬虫

  • 功能
    • 根据需求,实现爬虫程序,抓取需要的数据
  • 设计思路
    • 1.确定要爬取的url
      • 如何获取Url
    • 2.模拟浏览器通过http协议访问url,获取服务器返回的html代码
      • 如何访问
    • 3.解析html字符串(根据一定规则提取需要的数据)
      • 如何解析

爬虫的缺点

  • 过渡消耗网络资源,占用服务器和带宽
  • 影响网站对真实数据的分析,甚至导致敏感信息泄露。

所以,有出现了“反爬虫”技术,通过各种手段来限制爬虫。

  • robots协议
    • 添加robots.txt文件,约定哪些该爬,哪些不该爬,
    • 是一种“君子协定”,起不到限制作用
  • User‐Agent:
    • User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版 本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
  • 验证码访问
  • 动态加载网页 网站返回的是js数据 并不是网页的真实数据
  • 数据加密

用到的技术

无论是“爬虫”还是“反爬虫”,用到的基本技术都是两个,一个是 HTTP,另一个就是HTML。

在这里插入图片描述

问题: 你觉得 CDN 在对待浏览器和爬虫时会有差异吗?为什么?

CDN 应当是不区分的

  • 不区分,因为爬虫主要就是无限模仿浏览器行为
  • 不区分,因为爬虫本身也是对 Web 资源的访问,且对于爬虫识别并不是100% 准确的,因此 CDN 只会去计算实际使用了多少资源而不管其中多少来自爬虫;

问题: 有些网站全新上线的,没有外链,也没特意提交过,为什么也会有爬虫经过呢,入口在哪里

这可能是从dns域名服务商那里获取了你的网站。

HTML

  • HTML是HTTP协议传输的主要内容之一。它描述了超文本页面,用各种“标签”定义文字、图片等资源和排版布局,最终由浏览器“渲染”出可视化页面。
  • HTML 目前有两个主要的标准,HTML4 和 HTML5。
  • 广义上的 HTML 通常是指 HTML、JavaScript、CSS 等前端技术的组合,能够实现比传统静态页面更丰富的动态页面。
    在这里插入图片描述

Web Service

它的名字与 Web Server 很像,但却是一个完全不同的东西。

  • Web Service 是一种由 W3C 定义的应用服务开发规范,使用 client-server 主从架构,通常使用 WSDL 定义服务接口,使用 HTTP 协议传输 XML 或 SOAP 消息
  • 也就是说,它是一个基于 Web(HTTP)的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。
  • 因为采用了 HTTP 协议传输数据,所以在 Web Service 架构里服务器和客户端可以采用不同的操作系统或编程语言开发。例如服务器端用 Linux+Java,客户端用 Windows+C#,具有跨平台跨语言的优点。

Web Service 是网络服务实体,而 Web Server 是网络服务器,后者的存在是为了承载前者。
在这里插入图片描述

WAF

WAF,意为“网络应用防火墙”。

  • 与硬件“防火墙”类似,它是应用层面的“防火墙”,专门用于检测HTTP流量,是防护web应用的安全技术
  • WAF通常位于Web服务器之前,可以阻止SQL注入、跨站脚本等攻击,目前应用较多的一个开源项目是 ModSecurity,它能够完全集成进 Apache 或 Nginx。
    在这里插入图片描述

右边:与http相关的协议

在这里插入图片描述

TCP/IP协议

  • TCP/IP协议是目前网络世界“事实上”的标准通信协议
  • 它实际上是一系列网络通信协议的统称,其中最核心的协议是TCP/IP,其他的还有UDP、ICMP、ARP等等,共同组成了一个复杂而有层次的协议栈
  • 这个协议栈有四层:
    • 最上层是“应用层”
    • 最下层是“链接层”
    • TCP 和 IP 则在中间:TCP 属于“传输层”,IP 属于“网际层”
      在这里插入图片描述
  • IP协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由文件,以及如何在两点键传输数据包。IP协议使用“IP 地址”的概念来定位互联网上的每一台计算机。IP地址相当于手机号码,目前有两个版本:IPv4和IPv6
    +** TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于IP协议之上,基于IP协议提供可靠的、字节流**形式的通信,是HTTP协议得以实现的基础。
    • “可靠”是指保证数据不丢失
    • “字节流”是指保证数据完整,所以在 TCP 协议的两端可以如同操作文件一样访问传输的数据,就像是读写在一个密闭的管道里“流动”的字节。
  • HTTP 是一个"传输协议",但它不关心寻址、路由、数据完整性等传输细节,而要求这些工作都由下层来处理。因为互联网上最流行的是 TCP/IP 协议,而它刚好满足 HTTP 的要求,所以互联网上的 HTTP 协议就运行在了 TCP/IP 上,HTTP 也就可以更准确地称为“HTTP over TCP/IP”。
  • 如果使用Unix/Linux操作系统,HTTP可以运行在本机的UNIX Domain Socket上,它是一种进程间通信机制,但是页满足HTTP对下层的“可靠传输”的要求,所以就成了“HTTP over UNIX Domain Socket”。

IP协议曾有v1、v2、v3版本,但是因为不够完善而没有对外发布,而v5仅用于实验室内部研究,也从未公开,所以我们只能看到v4、v6两个版本。

DNS

  • 在 TCP/IP 协议中使用 IP 地址来标识计算机,数字形式的地址对于计算机来说是方便了,但对于人类来说却既难以记忆又难以输入。
  • 于是“域名系统”(Domain Name System)出现了,用有意义的名字来作为 IP 地址的
    等价替代。设想一下,你是愿意记“95.211.80.227”这样枯燥的数字,还是“nginx.org”这样的词组呢?
  • 但想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映
    射”到它的真实 IP,这就是所谓的“域名解析”。

继续用刚才的打电话做个比喻,你想要打电话给小明,但不知道电话号码,就得在手机里的号码簿里一项一项地找,直到找到小明那一条记录,然后才能查到号码。这里的“小明”就相当于域名,而“电话号码”就相当于 IP 地址,这个查找的过程就是域名解析。

HTTP协议并没有明确要求必须使用DNS,但实际上为了方便访问互联网上的Web服务,通常都会使用DSN来定位或者标记主机名,间接的把DNS和HTTP绑定到了一起
在这里插入图片描述

URI/URL

有了 TCP/IP 和 DNS,是不是我们就可以任意访问网络上的资源了呢?

还不行,DNS 和 IP 地址只是标记了互联网上的主机,但主机上有那么多文本、图片、页面,到底要找哪一个呢?就像小明管理了一大堆文档,你怎么告诉他是哪个呢?

所以就出现了 URI(Uniform Resource Identifier),中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源。

在这里插入图片描述
URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位
符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。

DNS和URL的关系

  • URL 包含了协议+主机名+路径,DNS 会将其中的主机名解析为 IP,进而方便根据 IP协议进行寻址、路由;
  • 打个比方:我让老婆帮我去楼下超市买瓶水,DNS可以帮她找到楼下超市,URI可以帮她找到水放在超市的具体位置

HTTPS

在 TCP/IP、DNS 和 URI 的“加持”之下,HTTP 协议终于可以自由地穿梭在互联网世界
里,顺利地访问任意的网页了。

但是HTTP传输的是明文,很容易被窃听。

这个时候就引入了HTTPS,可以用来加密明文

  • 它的全称是“HTTP over SSL/TLS”,也就是运行在 SSL/TLS 协议上的 HTTP。即HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”
  • 注意它的名字,这里是SSL/TLS,而不是TCP/IP,它是一个负责加密通信的安全协议,建立在TCP/IP上,所以它也是个可靠的传输协议,可以被用作HTTP的下层
  • SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为SSL/TLS,或者直接简称为 SSL。
  • SSL综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道,为 HTTP 套上一副坚固的盔甲

在这里插入图片描述

代理

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

CDN,实际上就是一种代理,它代替源站服务器响应客户端的请求,通常扮演着透明代理和反向代理的角色。

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

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

下面是一个代理抓包:

  • 客户端55061先用三次握手连接到代理的80端口,然后发送GET请求
  • 代理并不直接生产内容,所以就代表客户端,用55063端口连接到源服务器,也就是三次握手
  • 代理连接到源服务器之后,发出了一个HTTP/1.0的GET请求
  • 因为HTTP/1.0默认是短连接,所以源服务器发送响应报文后立即用四次挥手关闭连接
  • 代理拿到响应报文后再发回给客户端,完成了一次代理服务
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值