一个HTTP请求详细过程

HTTP请求流程

  • 域名解析
  • 建立TCP连接(TCP三次握手)
  • 浏览器发送HTTP请求
  • 服务器响应HTTP请求,浏览器得到响应数据
  • 浏览器解析数据,并请求静态资源(css/js等)
  • 浏览器渲染页面,展示给用户

1.域名解析:获取域名对应的IP地址

  • 浏览器先搜索自身的DNS缓存,如果没有找到,就下一步
  • 搜索操作系统的DNS缓存,如果没有找到,就下一步
  • 操作系统将域名发送给本地区域名服务器解析(Local DNS),例如学校DNS服务器
  • 如果没有找到,LDNS会直接到RootServer域名服务器请求解析
  • 根域名服务器返回给本地域名服务器一个所 查询域的主域名服务器(gTLdServer)地址
  • 本地域名服务器(Local DNS Server) 再向上-步返回的gTLD服务器发送请求
  • 接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务
  • NameServer域名服务器会查询存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP记录,连同一个TTl值返回给DNS Server域名服务器
  • 返回该域名对应的IP和TTL值,Local DNS Server 会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制
  • 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,城解析过程结束

2.TCP连接

  • img

3.发送HTTP请求报文(HTTP请求)

img

  • 请求报文组成

    • 请求行

      • 请求方法(get/post…)

      • URL

        • 组成:<协议>://<主机>:<端口>/<路径>

          ​ 端口和路径有事可以省略(HTTP默认端口号是80)

          img

      • HTTP协议版本

    • 请求头部

      • 请求报文的一些附加信息
      • img
    • 空行

      • 表示请求头部结束
    • 请求数据

      • 一般在post方法中使用,因为get方法会将请求数据放在url中
    • 完整的一个请求报文

      POST  /index.php HTTP/1.1    请求行

      Host: localhost

      User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2  请求头

      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

      Accept-Language: zh-cn,zh;q=0.5

      Accept-Encoding: gzip, deflate

      Connection: keep-alive

      Referer: http://localhost/

      Content-Length:25

      Content-Type:application/x-www-form-urlencoded

      空行

      username=aa&password=1234  请求数据

4.服务器响应请求,浏览器得到HTML代码

img

  • 响应报文

    • 状态行

      • 协议版本
      • 状态码
      • img
      • 状态码描述
    • 响应头

      • img
    • 空行

    • 响应数据

    • 完整响应

      HTTP/1.1 200 OK  状态行

      Date: Sun, 17 Mar 2013 08:12:54 GMT  响应头部

      Server: Apache/2.2.8 (Win32) PHP/5.2.5

      X-Powered-By: PHP/5.2.5

      Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/

      Expires: Thu, 19 Nov 1981 08:52:00 GMT

      Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

      Pragma: no-cache

      Content-Length: 4393

      Keep-Alive: timeout=5, max=100

      Connection: Keep-Alive

      Content-Type: text/html; charset=utf-8

      空行

        响应数据 HTTP响应示例<title>

      Hello HTTP!

      5.浏览器解析HTML代码,请求静态资源(css/js等)

      • 当浏览器得到HTML后,并未断开TCP连接,因为有些静态资源要向服务器重新请求,此时Cinnection:keep-alive

      6.关闭TCP连接,浏览器渲染页面给用户

      附加

      网络模型作用对应的网络协议
      应用层是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务HTTP TFTP FTP NFS SMTP
      表示层可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取Telnet SNMP
      会话层通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求SMTP DNS
      传输层定义了一些传输数据的协议和端口号(WWW端口80等)TCP UDP
      网络层在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择IP ICMP ARP
      数据链路层定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输FDDI PDN SLIP PPP
      物理层主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流IEEE 802.1A IEEE 802.2到IEEE 802.11
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值