关闭

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

203人阅读 评论(0) 收藏 举报
本篇疑惑: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/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12393次
    • 积分:222
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:54篇
    • 译文:0篇
    • 评论:0条