HTTP协议学习(四)——Web服务器

转载 2015年11月19日 21:25:40
本篇疑惑:HTTP服务器如何处理HTTP请求的?
首先介绍一下什么是web服务器,我个人理解就是能支撑web应用正常工作的软硬件结合的一个玩意儿。web服务器可以是一套软件,一台小型机等。但最终提供支持的都是软件。硬件只是作为一个载体用于支撑web服务器软件的运行。
下面开始介绍Web服务器是如何处理客户端请求的。笔者整理为以下步骤:
接收客户端请求——接收请求——处理请求——访问资源——构建响应——发送响应——记录事物日志。这7个步骤。
HTTP协议学习(四)——Web服务器 - 夜深,人未静 - AlexChen
 
一、接收客户端请求(建立连接)
严格说来应该是建立连接,此时服务器与客户端会通过tcp建立底层通讯连接,这个过程服务器是可以拒绝的,如果不建立,则服务器会忽视请求。如果接收请求则服务器还会通过反向DNS去解析主机名以及以及确定客户端用户用于下面最后一条的日志记录,但是反向DNS会花费更多时间(增加处理时间)的时间它也不是必须的。这些都可以通过控制管理来配置。

二、接收请求
解析客户端请求的报文信息(从网络中读取请求报文),为解析报文做准备。在接收请求过程中服务器会有以下行为:
1、解析请求行:查找请求方法、指定资源标识符URI、版本号、他们之间以空格符分开以回车换行CRLF作为结束行。
2、读取报文首部,同样以CRLF结尾、如果首部有结束的空行也会检测
3、如果Content-Length有效,则会继续读取请求主体
如图
HTTP协议学习(四)——Web服务器 - 夜深,人未静 - AlexChen
 

三、处理请求
根据第二步解析出的报文处理该报文请求,这个处理主要包括对请求方法,资源,首部以及可用主题进行分类,将他们分给不同的处理单元。

四、访问资源
对请求的资源做映射。web服务器是一个资源服务器,它负责发送预先创建好的内容(html页面,js,等)或根据请求内容构建出动态的内容(比如查询统计时统计表格数据)。在web服务器将响应内容回送给客户端之前都需要将URI映射成预先创建好或新动态生成的资源上。最简单的则是通过请求URI作为资源,web服务器中每个单独的web应用会有单独的一个根目录,通常在根目录后加上URI就可以定位到请求的资源。这里就会存在一个安全性的问题。如果服务器配置不当访问者就可以通过目录列表的方式访问不该看见的东西暴露该站点的其它隐秘信息。
如果访问的是动态资源,那么服务器会将访问映射到其它后端处理程序上去。服务器还可以针对特定的资源进行访问控制要求访问者提供访问密码等。

五、构建响应
当服务器识别了访问资源、则会执行请求方法的描述动作并产生响应报文(请参考前面文章中的响应报文内容
如果还产生了响应实体,那么就将实体包含在了响应报文中。
HTTP协议学习(四)——Web服务器 - 夜深,人未静 - AlexChen
 
六、发送响应
发送响应内容和接收响应一样,如果是持久链接服务器则应该特别注意释放空闲链接以减少资源浪费。而如果是非持久链接则在发送响应之后立即关闭掉连接。

七、记录事物日志
当以上所有事物完成之后服务器就会在日志中添加一条描述用于记录。
自此、服务器是如何处理一条求情,以及处理过程是怎么样的就阐述完毕了。

我们不妨总结一下:

客户端请求服务器时服务器首先会判断是否接收连接、如果不接受则终止、如果接收则建立通信连接、接着开始分析请求报文对报文内容进行解析、然后处理解析出的报文内容、将请求的URI做定位、其中还会协调其它程序协作。完成之后就进行构建响应,将响应内容,类型等放入响应报文中、然后发送回客户端、最后在日志中记录该次事物

转载地址:http://blog.163.com/ny_lonely/blog/static/1889242732013116113133774/

从零开始学写HTTP服务器(三)请求资源

客户端通过URI,Content-Type等请求头的内容访问服务端的特定实体,今天主要学习这部分内容。(一)C++文件I/O服务端收到HTTP请求后,需要对请求头进行解析,之后获取响应资源,最后返回。...
  • zhangxiao93
  • zhangxiao93
  • 2016年12月18日 16:06
  • 856

从零开始学写HTTP服务器(一)http协议简介

从零开始学写HTTP服务器(一) http协议简介
  • zhangxiao93
  • zhangxiao93
  • 2016年12月11日 21:03
  • 1781

基于HTTP协议实现的小型web服务器

我们先了解一下这个项目最终能达到的一个目标,然后以这个来进行项目的分析: 1、实现最基本的HTTP/1.0版本的web服务器,客户端能够使用GET、POST方法请求资源 2、服务器将客户请求的资源...
  • qq_33951180
  • qq_33951180
  • 2017年04月28日 07:37
  • 3234

Web服务及http协议

HTTP:HyperText Transfer Protocol:超文本传输协议 Web: http/0.9:仅纯文本(超链接),ASCII HTML:HyperTe...
  • yongchaocsdn
  • yongchaocsdn
  • 2016年12月04日 01:58
  • 428

基于HTTP协议的Web服务器

这篇博文只给出运行截图,没有附上源代码。 如果想要参考源码,请到 https://github.com/common1994/httpd.git * 下载。**下面简单讲述一下HTTP协议...
  • Chengzi_comm
  • Chengzi_comm
  • 2016年03月22日 17:05
  • 1583

基于Http协议的Web服务器

本篇博客通过自己建立Http服务器并且结合MySql来实现Web通信,具体代码详见GitHub: https://github.com/YuanHei/HTTPD 在此整理其运行显示界面 1.首...
  • qaz3171210
  • qaz3171210
  • 2016年03月21日 20:09
  • 749

JavaWeb学习总结(四)——服务器

一、打包JavaWeb应用   在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:    范例:将JavaWebDemoProject...
  • zw901159
  • zw901159
  • 2016年05月13日 19:30
  • 344

利用http协议实现一个简单的web服务器

目录文件: htdoc: html文件: hello hello fucang ...
  • fucangzxx
  • fucangzxx
  • 2016年08月06日 10:27
  • 1913

C语言构建WEB管理系统(一):了解http协议

既然要讲web开发就离不开HTTP协议,http协议是web的核心。HTTP定义Web客户(即浏览器)如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户。当用户请求一个Web页面(...
  • gentleliu
  • gentleliu
  • 2016年03月16日 09:32
  • 1449

Web开发基础知识的整理(一、Http协议的简单介绍)

Web方面的东西,实际上挺多挺杂的,所以有的时候就需要一些整理,今天这里来简单介绍一下Http协议,算是对之前学习一些东西的整体,希望对自己或者对一些人有些帮助。 首先从Http协议说起,Web浏览...
  • H_Gao
  • H_Gao
  • 2015年08月08日 11:13
  • 2262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP协议学习(四)——Web服务器
举报原因:
原因补充:

(最多只允许输入30个字)