一次完整的HTTP请求过程

本文详细阐述了从域名解析到Web服务器记录日志的HTTP请求处理全过程,包括域名解析的递归与迭代请求、TCP连接建立的三次握手、不同I/O模型下的请求接收、资源访问与重定向处理,以及响应报文的构建与发送。
摘要由CSDN通过智能技术生成

请求处理过程:
域名解析–> 建立连接–> 接收请求–> 处理请求 --> 访问资源 --> 构建响应报文–> 发送响应报文 --> 记录日志
在这里插入图片描述

  • 域名解析
    解析顺序:

检查浏览器自身DNS缓存—> 操作系统DNS缓存 –>hosts文件–>DNS解析

  1. 检查浏览器自身的DNS缓存,看自身缓存中是否有该FQDN的对应条目如果没有过期,则解析到所对应的ip地址。若没有该条目或者条目已过期则执行第2步。谷歌浏览器中查看缓存具体细节可在地址栏中输入chrome://net-internals/#dns来查看

  2. 检查操作系统自身所对应的DNS缓存是否有所对应的条目,对于linux主机,系统默认不对DNS进行缓存。如果在操作系统的dns缓存中找到未过期的所对应的条目,则解析到此结束。否则执行下一步。Windows系统查看系统dns缓存可以使用ipconfig /displaydns命令。

  3. 检查hosts文件中是否有该FQDN所对应的条目,如果有则解析成功,没有则进行下一步。在Windows系统中hosts文件位于C:\Windows\Sytem32\drivers\etc\目录下。linux系统中位于/etc/hosts目录下。

4.如果hosts文件中也不存在该域名所对应的条目,浏览器会向本地的DNS服务器发起一个域名解析请求。域名解析请求使用udp的53端口,本地DNS请求为递归请求。本地的DNS服务器会先检查自身的缓存,是否有该FQDN所对应的条目。如果有切且没有过期则返回给浏览器,解析成功。如果没有找到对应条目则本地DNS服务器发起一个迭代的DNS解析请求,首先向根域名服务器查找,根域名服务器在全球有13个。如果根域名服务器中存储的是顶级域名所对应的DNS服务器的ip地址。以yangzhiheng.blog.51cto.com为例,根域名返回给本地DNS服务器一个com域所对应的DNS服务器地址,本地DNS服务器向com域名服务器请求该FQDN请求,com域名服务器则返回给本地服务器一个51cto域的DNS服务器,这样层层迭代,最终返回给本地DNS一个正确的ip地址。本地服务器得到ip地址后缓存下来,并返回给浏览器。浏览器根据该ip地址来进行访问。

域名解析方式

  • A记录:A代表的是Address,用来指定域名对应的IP地址。A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址。

  • MX记录:表示的是Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server。

  • CNAME记录:全称是Canonical Name(别名解析)。所谓的别名解析就是可以为一个域名设置一个或多个别名。

  • NS记录:为某个域名指定DNS解析服务器,也就是这个域名有指定的IP地址的DNS服务器去解析。

  • TXT记录:为某个主机名或域名设置说明。

  • 建立连接

得到IP地址后,浏览器会开启一个随机端口向web服务器的80端口发起tcp链接请求,经过3次握手后建立tcp连接,然后浏览器发起httpd请求。
建立连接过程:

三次握手 --> 发起http请求

  • 接收请求
    接收请求所要完成的工作就是接收来自网络的请求报文中对某一资源的一次请求过程。其接收请求的模型包括以下几类:

单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应。
多进程I/O结构:并行启动多个进程,每个进程处理一个请求。
复用I/O结构:一个进程响应n个请求。

   多线程模型:一个进程生成n个线程,每个线程响应一个用户请求。

   事件驱动:event-driven。

复用的多线程I/O结构:启动多个m进程,每个进程响应n个请求。

  • 处理请求

对请求报文进行分析,并获取请求的资源及请求方法等相关信息。以Apache的prefork工作模式为例,其管理进程在接收到请求报文后会选择一个工作进程来对该请求进行处理,得到其请求的方法。和资源的URL等相关信息。

  • 访问资源
    在对请求处理时一般需要访问后端资源,以lamp架构为例,Apache工作进程把请求转发到PHP-fpm管理进程(默认端口为9000),PHP-FPM管理进程分配一个工作进程用于处理index.php请求,工作进程在服务器路径中找到index.php文件,进行解析,编译。然后执行编译后的php代码,这时一般还要访问后端的数据库服务器等。得到请求的结果,把结果返回给apache服务器。

  • 构建响应报文
    Apache在得到返回的请求结果后,开始构建响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。这时还有一个较为重要的要点,就是资源访问重定向问题。
    web服务构建的响应并非客户端请求的资源,而是资源的另外一个访问路径:可分为永久重定向和临时重定向。
    永久重定向:curl -I http://www.360buy.com 得到的结果 HTTP/1.1 301 Moved Permanently
    临时重定向:curl -I http://www.taobao.com 得到的结果 HTTP/1.1 302 Found

  • 发送响应报文
    响应报文构建完成之后,发送响应报文。

  • 记录日志
    最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值