HTTP-web服务器

web服务器

web服务器实现了http和相关的tcp连接处理,负责管理web服务器提供的资源,以及对服务器的配置,控制以及拓展等方面的管理
web服务器逻辑实现了http协议,并负责提供web服务器的管理功能,web服务器逻辑和操作系统共同负责了tcp连接,底层操作系统负责管理底层计算机系统的硬件细节,提供了tcp/ip的网络支持,负责装在web资源的文件系统以及控制当前计算活动的进程管理系统。
实际的web服务器的步骤

  1. 建立连接-接受一个客户端连接,或者如果不希望和这个客户端建立连接,就将其关闭
  2. 接收处理-从网络中读取一条HTTP请求报文
  3. 处理请求-对请求报文进行解释,并采取行动
  4. 访问资源-访问报文中指定的资源
  5. 构建响应-创建带有正确首部的http响应报文
  6. 发送响应-将响应发送给客户端
  7. 记录事务处理过程-将已经完成事务的内容记录在一个日志文件中
    在这里插入图片描述

接受客户端连接

如果客户端已经打开了一条服务器的持久连接,可以使用连接来发送他的请求。否则客户端需要打开一条新的服务器连接

处理新的连接

客户端请求一条到web服务器的tcp连接的时候,web服务器会建立起来,判断另一端是哪个客户端,从tcp连接中将ip地址解析出来,一旦建立新的连接并被接受,服务器就会将新的连接添加到现存的web服务器列表中,做好监视连接上数据的准备。
web服务器可以随意的拒绝或者立即关闭任意一条连接,有些web服务器会因为客户端的ip地址或者主机名是未认证的,或者是已知的恶意客户端而关闭连接。web服务器可以使用其他的识别技术。

客户端主机名识别

可以使用反向dns对大部分web服务器进行配置,以便将客户端ip地址从转换为客户端主机名,web服务器可以将客户端主机名用于详细的访问控制和日志记录。
主机名查找会花费大多时间,这样会降低web事务处理的速度,很多大容量web服务器会禁止主机解析,只允许对特定的内容进行解析。

通过ident确定客户端用户

有些web服务器还支持IETF的ident协议,可以通过这个协议找到http连接的用户名,这些信息对web服务器的日志记录很有用。
如果客户端支持ident协议,就在tcp端口113上监听ident请求,客户端打开了一条http连接,然后服务器打开自己到客户端ident服务器端口113的连接,发送一条简单的请求,询问与新连接对应的用户名,并从客户端解析出包含用户名的响应。
在这里插入图片描述

ident在组织内部可以很好的工作,但是在互联网上不能很好的运作。

  • 很多客户端pc没有运行ident识别协议守护进程软件
  • ident协议会使HTTP事务处理产生严重的时延
  • 很多防火墙不允许ident流量接入
  • ident协议不安全,容易被伪造
  • ident协议不支持虚拟ip地址
  • 暴露客户端的用户名还涉及到隐私的问题

接受请求报文

连接上有数据到达的时候,web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。
解析请求报文的时候,web服务器会

  • 解析请求行,查找请求方法,指定的资源标识符以及版本号,各项之间有一个空格分割,并且以一个回车符作为行的结束。
  • 读取crlf结尾的报文首部
  • 检测到crlf结尾的,标识首部结束的空行
  • 如果有的化,长度由content-length首部指定,读取请求主体
    在这里插入图片描述

报文的内部表示法

有些web服务器还会便于进行报文操作的内部数据结构来存储请求报文,数据结构中可能包含有指向请求报文中各个片段指针及其长度,这样就可以将这些首部放到一个快速查询表中,以变快速的访问特定首部的具体值了
在这里插入图片描述

连接的输入/输出处理结构

高性能的web服务器能够同时支持数千条连接,这些连接使得服务器可以与来自世界各地的客户端进行同行,每个客户端都向服务器打开了一条或者多条连接, 某些连接可能在快速的向web服务器发送请i去,而其他的一些连接则可能慢慢在发送,或者不经常发送,还有一些是空闲的,安静的等待将来可能出现的动作。

  1. 单线程的web服务器
    单线程的web服务器一次只处理一个请求,知道处理完成为止,一个事务处理结束之后,才能去处理下一条连接,这种结构易于实现,但是在处理过程中,所有其他的连接会被忽略。
  2. 多进程以及多线程web服务器
    多进程和多线程web服务器用多个进程,或者使用更高效的线程为请求进行处理,可以根据需要创建,或者预先创建一些线程或者进程。有些服务器会为每条连接分配一个线程或者进程,当服务器同时要处理成百上千甚至数以万计的连接的时候,需要的进程或者线程数量可能会消耗太多的内存或者系统资源
  3. 复用io的服务器
    为了支持大量的连接,很多web服务器都采用了复用结构,在复用结构中,要同时监视所有连接上的活动,当连接的状态发生变化的时候,就对那条连接进行少量的处理,处理结束以后,将连接返回到开放连接列表中,等待下一次的状态变化。只有在有事情做的时候才会对连接进行处理。在空闲连接上等待的时候不会绑定线程或者进程。
  4. 复用的多线程web服务器
    有些系统会将多线程和复用功能结合在一起,利用计算机平台上的多个cpu,多个线程中的每一个都在观察打开的连接或者打开的连接中的一个子集,并对每条连接执行少量的任务。
    在这里插入图片描述

处理请求

一旦web服务器接收到了请求,就可以根据方法,资源,首部和可选的主体部分来对请求进行处理了。
有的方法要求请求报文中必须带有实体主体的部分的数据,其他方法允许有请求的主体部分,也允许没有,少数方法禁止在请求报文中包含实体的主体数据。

对资源的映射以及访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/344594.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

makefile与进度条

Linux项目自动化构建工具-make/makefile make是一个命令, makefile是一个文件,保存依赖关系和依赖方法。‘ touch Makefile/makefile mybin:mytest.c//依赖关系 目标文件:依赖文件列表 文件列表的文件之间以空格分隔 gcc -o mybin mytest.…

信号:干扰类别及特征提取(二)

目录 第二部分:特征提取 一:瞬时特征参数 1.零中心归一化瞬时幅度之谱密度的最大值 2.非弱信号段零中心归一化瞬时幅度的标准偏差 3.零中心归一化瞬时幅度绝对值的标准偏差 4.零中心归一化非弱信号段瞬时频率的标准偏差 5.零中心归一化非弱信号段…

【动态规划-BM78 打家劫舍(一)】

题目 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家;如果偷了第二家&…

WPS JS宏获取自动筛选后的行数

//WPS JS宏获取自动筛选后的行数 function getFilterRowCnt(shtRng)//shtRng表示筛选目标工作表范围 {let lngRowCnt 0;for(let rngCell of shtRng.SpecialCells(xlCellTypeVisible).Areas)//获取自动筛选后的单元格行数{lngRowCnt lngRowCnt rngCell.Rows.Count;}return ln…

【ARM Cache 及 MMU 系列文章 6.3 -- ARMv8/v9 Cache Tag数据读取及分析】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Tag 数据读取测试代码Cache Tag 数据读取 在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管…

【JavaScript】内置对象 - 字符串对象 ⑤ ( 判断对象中是否有某个属性 | 统计字符串中每个字符出现的次数 )

文章目录 一、判断对象中是否有某个属性1、获取对象属性2、判定对象是否有某个属性 二、统计字符串中每个字符出现的次数1、算法分析2、代码示例 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、判…

车载诊断架构 - 引导诊断

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

2024年几款优秀的SQL IDE优缺点分析

SQL 工具在数据库管理、查询优化和数据分析中扮演着重要角色。 以下是常见的 SQL 工具及其优缺点。 1. SQLynx 优点: 智能代码补全和建议:采用AI技术提供高级代码补全、智能建议和自动错误检测,大幅提高编写和调试SQL查询的效率。跨平台和…

MFC 教程-回车时窗口退出问题

【问题描述】 MFC窗口默认时,按回车窗口会退出 【原因分析】 默认调用OnOK() 【解决办法】 重写虚函PreTranslateMessage BOOL CTESTMFCDlg::PreTranslateMessage(MSG* pMsg) {// TODO: 在此添加专用代码和/或调用基类// 修改回车键的操作反应 if (pMsg->…

扩散模型条件生成——Classifier Guidance和Classifier-free Guidance原理解析

1、前言 从讲扩散模型到现在。我们很少讲过条件生成(Stable DIffusion曾提到过一点),所以本篇内容。我们就来具体讲一下条件生成。这一部分的内容我就不给原论文了,因为那些论文并不只讲了条件生成,还有一些调参什么的…

学习笔记——路由网络基础——静态路由(static)

三、静态路由(static) 1、静态路由 (1)定义 静态路由(Static):由管理员手动配置和维护的路由。静态路由配置简单,被广泛应用于网络中。此外还可以实现负载均衡和路由备份。 静态路由默认优先级为60,如果想在多条静态路由中让某条路由优选…

Unity基础实践小项目

项目流程: 需求分析 开始界面 选择角色面板 排行榜面板 设置面板 游戏面板 确定退出面板 死亡面板 UML类图 准备工作 1.导入资源 2.创建需要的文件夹 3.创建好面板基类 开始场景 开始界面 1.拼面板 2.写脚本 注意事项:注意先设置NGUI的分辨率大小&…

Scala 练习一 将Mysql表数据导入HBase

Scala 练习一 将Mysql表数据导入HBase 续第一篇:Java代码将Mysql表数据导入HBase表 源码仓库地址:https://gitee.com/leaf-domain/data-to-hbase 一、整体介绍二、依赖三、测试结果四、源码 一、整体介绍 HBase特质 连接HBase, 创建HBase执行对象 初始化…

从0到1:企业办公审批小程序开发笔记

可行性分析 企业办公审批小程序,适合各大公司,企业,机关部门办公审批流程,适用于请假审批,报销审批,外出审批,合同审批,采购审批,入职审批,其他审批等规划化…

使用 stress 命令进行Linux CPU 压力测试

大家好,在现代计算机系统中,对系统性能和稳定性的评估是至关重要的。特别是在服务器环境中,我们需要确保系统能够在高负载情况下稳定运行,以满足用户的需求。而 CPU 是系统中最关键的组件之一,其性能直接影响着整个系统…

用 DataGridView 控件显示数据

使用DataGridView,可以很方便显示数据。 (1)Visual Studio版本:Visual Studio 2022 (2)应用程序类型:windows form (3)编程语言:C# 一、目标框架 .NET Fra…

【NI国产替代】高速数据采集模块,最大采样率为 125 Msps,支持 FPGA 定制化

• 双通道高精度数据采集 • 支持 FPGA 定制化 • 双通道高精度采样率 最大采样率为 125 Msps12 位 ADC 分辨率 最大输入电压为 0.9 V -3 dB 带宽为 30 MHz 支持 FPGA 定制化 根据需求编程实现特定功能和性能通过定制 FPGA 实现硬件加速,提高系统的运算速度FPGA…

Docker中搭建likeadmin

一、使用Docker中的docker-compose搭建likeadmin 1.去网址:https://gitee.com/likeadmin/likeadmin_php中下载likeadmin 注册一个giee账号后 点那个克隆下载 按照序号在终端复制粘贴进去。 接着,输入ls 可以发现有一个这个: 里面有一个like…

服务器数据恢复—服务器raid5上层zfs文件系统数据恢复案例

服务器数据恢复环境&故障: 一台某品牌X3650M3服务器,服务器中有一组raid5磁盘阵列,上层采用zfs文件系统。 服务器未知原因崩溃,工作人员排查故障后发现服务器的raid5阵列中有两块硬盘离线导致该阵列不可用,服务器内…

Cell-在十字花科植物中年生和多次开花多年生开花行为的互相转化-文献精读21

Reciprocal conversion between annual and polycarpic perennial flowering behavior in the Brassicaceae 在十字花科植物中年生和多次开花多年生开花行为的互相转化 亮点 喜马拉雅须弥芥 和 内华达糖芥 是两个多年生植物模型 MADS-box 基因的剂量效应决定了一年生、二年生…