HTTP应用协议本身是不能运行的,它需是需要架构在硬件和软件解决方案上,才能在万维网上提供高效的传输服务。

在这系列的文章中,我们将会了解到以下概念:

  • Web服务器
  • 代理服务器
  • 缓存
  • 网关、信道和中继器
  • 网络爬虫

这些都是我们互联网生活中不可或缺的部分,你会了解到它们每个的作用,是怎么工作的,让你更好的理解HTTP通信。

Web服务器

web服务器主要功能就是存储资源,并为接收到的请求提供服务。您可以使用 web 客户端 (又称 web 浏览器) 访问 web 服务器, 并在返回时获取所请求的资源或更改现有的状态。web 服务器也可以被自动访问, 使用网络爬虫, 我们将在文章的后面讨论。

web 服务器既有简单易用的软件也有复杂成熟的软件程序。现代 web 服务器能够执行许多不同的任务。web 服务器应该能够执行的基本任务如下:

  • 创建连接-接受或关闭客户端连接
  • 接收请求–读取 http 请求消息
  • 处理请求-解释请求消息并采取行动
  • 访问资源-访问消息中指定的资源
  • 构造响应-创建 http 响应消息
  • 发送响应-将响应发送回客户端
  • 日志事务–在日志文件中写入已完成的事务

我会对web服务器的基本处理流程分解为几个不同的阶段。用这些阶段来呈现了简化的web服务器处理流程。

阶段1:创建连接

当 web 客户端想要访问 web 服务器时, 它必须尝试打开一个新的 tcp 连接。在另一端, 服务器尝试提取客户端的 ip 地址。之后, 服务器决定打开或关闭与该客户端的 tcp 连接。

如果服务器接受连接, 它会将其添加到现有连接的列表中, 并监视该连接上的数据。

如果客户端未被授权或被列入黑名单 (恶意), 它也可以关闭连接。

服务器还可以通过使用 "反向 dns" 来确定客户端的主机名。这些信息在记录消息时会有所帮助, 但主机名查找可能需要一段时间, 从而减慢了事务的速度。

阶段2:接收请求/处理请求

分析传入请求时, web 服务器将从消息请求行、头和正文 (如果提供) 分析信息。需要注意的一点是, 连接可以随时暂停, 在这种情况下, 服务器必须暂时存储信息, 直到接收到其余的数据。

高端 web 服务器应该能够打开许多同时连接。这包括来自同一客户端的多个同时连接。典型的 web 页可以从服务器请求许多不同的资源。

阶段3:访问资源

由于 web 服务器主要是资源提供者, 因此它们有多种方式来映射和访问资源。

最简单的方法是映射资源, 即使用请求 uri 在 web 服务器的文件系统中查找该文档。通常, 资源包含在服务器上的一个特殊文件夹中, 称为 docroot。例如, windows 服务器上的 docroot 可以位于 F:\WebResources \。如果一个获取请求要访问/图像/codemazeblog 上的文件, 服务器会将其转换为 F:\WebResources\images\codemazeblog.txt, 并在响应消息中返回该文件。当 web 服务器上承载多个网站时, 每个站点都可以有其单独的 docroot。

如果 web 服务器收到对目录的请求而不是文件, 它可以用几种方法解决它。它可以返回错误信息, 返回默认索引文件而不是目录, 或者扫描目录, 并返回 html 文件的内容。

服务器还可以将请求 uri 映射到动态资源, 这是一个生成一些结果的软件应用程序。有一整类服务器称为应用服务器, 其目的是将 web 服务器连接到复杂的软件解决方案, 并提供动态内容。

阶段4:构造响应和发送响应

一旦服务器确定了它需要服务的资源, 它就会形成响应消息。响应消息包含状态代码、响应头和响应正文 (如果需要)。

如果该正文出现在响应中, 则消息通常包含描述正文大小的内容长度标头和描述返回资源的 mime 类型的内容类型标头。

生成响应后, 服务器将选择需要发送响应的客户端。对于非持久连接, 服务器需要在发送整个响应消息时关闭连接。

阶段5:记录日志

事务完成后, 服务器将所有事务信息记录到文件中。许多服务器都提供自定义日志记录。

代理服务器

代理服务器 (proxy) 是中间服务器。它们通常在 web 服务器和 web 客户端之间找到。由于其性质, 代理服务器需要表现的既像 web 客户端又像web服务器。

但是, 为什么我们需要代理服务器?为什么我们不直接在 web 客户端和 web 服务器之间进行通讯?是不是更简单和更快?

好吧, 简单的, 也许是, 但更快, 不是真的。但我们会来的

在解释哪些代理服务器被使用之前, 我需要了解反向代理的概念、正向代理和反向代理之间的区别。

正向代理服务器充当从web服务器请求资源的客户端的代理。它通过防火墙筛选请求或隐藏有关客户端的信息来保护客户端。而反向代理采用完全相反的工作方式。它通常放在防火墙后面并保护 web 服务器。所有的客户端都会认为正与真实的web服务器通信, 实际上反向代理背后的网络一无所知。

正向代理

反向代理

代理非常有用, 它们的应用非常广泛。让我们来看看代理服务器的一些使用方法。

  • 压缩–压缩内容会直接增加通信速度。简单的。
  • 监控和过滤-想拒绝小学生进入成人网站?代理是适合您的解决方案。??
  • 安全性-代理可以作为整个网络的一个入口点。它们可以检测恶意应用程序并限制应用程序级别协议。
  • 匿名--请求可以由代理修改以获得更大的匿名性。它可以从请求中剥离敏感信息, 只留下重要的内容。虽然向服务器发送较少的信息可能会降低用户体验, 但匿名有时是更重要的因素。
  • 访问控制-非常简单, 您可以集中在单个代理服务器上的许多服务器的访问控制。
  • 缓存-您可以使用代理服务器缓存热点内容, 从而大大降低加载速度。
  • 负载平衡-如果您的服务获得了大量 "峰值通信量", 则可以使用代理在更多计算资源或 web 服务器上分配工作负荷。负载平衡器路由通信, 以避免在峰值发生时重载单个服务器。
  • 代码转换–更改消息正文的内容也可以是代理的功能。

正如您所看到的, 代理可以是非常灵活的。

HTTP架构介绍(1) Web服务器和代理服务器的更多相关文章

  1. web服务器软件(Nginx,Apache,IIS,Lighttpd)介绍

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在 ...

  2. LAMP架构介绍

    介绍一下LAMP架构 LMAP即Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的首字母缩写.这是一组常用来搭建动态网站或者服务器的开源软件.它们本身都是各自独立的 ...

  3. [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器

    部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...

  4. 高性能Web服务器Nginx

    高性能Web服务器Nginx介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强 ...

  5. web服务器--nginx简介

    nginx 介绍Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是一款轻量级的Web 服务器/反向代理服务器及电 ...

  6. 一篇文章带你了解轻量级Web服务器——Nginx简单入门

    一篇文章带你了解轻量级Web服务器--Nginx简单入门 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件代理服务器 在本篇中我们会简单介绍Nginx的特点,安装,相关指令使用以及配置信 ...

  7. Nginx:轻量级高性能的Web服务器

    Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...

  8. 主流Web服务器一览

    概念Web服务器是可以向发出请求的浏览器提供文档的程序. 1.服务器是一种被动程序:只有当Internet上运行在其他计算机中的浏览器发出请求时,服务器才会响应. 2.最常用的Web服务器是Apach ...

  9. JAVA编写WEB服务器

    一.超文本传输协议  1.1 HTTP请求  1.2 HTTP应答  二.Socket类  三.ServerSocket类  四.Web服务器实例  4.1 HttpServer类  4.2 Requ ...

随机推荐

  1. ubuntu16.04编译安装mysql-boost-5.7.21并编译成php扩展测试与使用

    我之前的文章已经改造了自定义MVC框架中的工具类(验证码,图片上传,图像处理,分类)4个类,接下来,就要改造模型类,模型类肯定要连接数据库,由于我的Ubuntu Linux是裸装的php(目前只编译了 ...

  2. java常用类————Date类

    Date类在Java.util包中. 一.功能介绍:创建Date对象,获取时间,格式化输出的时间. 二.对象创建:1.使用Date类无参数的构造方法创建的对象可以获取本地时间.例如: Date now ...

  3. NumPy学习_00 ndarray的创建

    1.使用array()函数创建数组 参数可以为:单层或嵌套列表:嵌套元组或元组列表:元组或列表组成的列表 # 导入numpy库 import numpy as np # 由单层列表创建 a = np. ...

  4. FZU 2234

    题目为中文,题意略. 这个题目我开始用贪心做bfs两次,这样做是错的,因为两次局部的最优解并不能得出全局的最优解,以下面样例说明: 3 0   10   -1 10   10   10 1   0  ...

  5. 构造N位格雷码(递归,面向对象)

    问题:递归打印出N位格雷码(相邻两个编码只有一位数字不同): 问题化归为:现有前N位的格雷码,如何构造N+1位的格雷码? 解决方法:采用递归构造格雷码集和. 递归出口:n = 1; 此时格雷码{0,1 ...

  6. JVM笔记1-内存溢出分析问题与解决

    假设我们项目中JVM内存溢出了,大项目中上百万行代码,是很难定位的.因此我们需要借用一个Memory Analyzer工具, 官网地址为:http://www.eclipse.org/download ...

  7. qwe框架- CNN 实现

    CNN实现 概述 我在qwe中有两种,第一种是按照Ng课程中的写法,多层循环嵌套得到每次的"小方格",然后WX+b,这样的做法是最简单,直观.但是效率极其慢.基本跑个10张以内图片 ...

  8. ubuntu10.04 安装配置tftp服务

    tftpd-hpa 是一个功能增强的TFTP服务器.它提供了很多TFTP的增强功能,它已经被移植到大多数的现代UNIX系统. 1.安装 sudo apt-get install tftpd-hpa t ...

  9. 常用u-boot命令详解(全)

    U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,命令行模式模式下支持"Tab"键的命令补全和命令的历史记录功能.而且如果你输入的命令的前几个字符和别的 ...

  10. Android 插件化方案(动态加载)总结

    1.作用 大多数Android开发人员开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,因而便有了插件化的概念,将一个 App 划分为多个插件(Apk ...