zoukankan      html  css  js  c++  java
  • 一个页面从输入URL到页面加载显示完成的详细过程

    下面以访问baidu页面来做一个过程分析

    • 输入 URL:http://www.baidu.com
    • DNS 域名解析
    • 计算机无法识别域名,计算机与计算机之间要想进行通信,必须通过ip地址用来定位该计算机所在的位置
    • 在浏览器中,输入的ip地址或者域名,默认给你加了一个80端口号(对方的服务器监听的就是80端口)
    • 158.12.25.652 域名就是为了好记
    • 为了好记,所以我们的万维网提供了 一个 域名这样的概念
    • 当你输入了 ip 地址后,浏览器会自动去 找DNS域名解析服务器,
    • 建立 TCP 连接(Socket):三次握手,确保这个一定是一个有效的请求和响应,这个三次握手在业界相信大多数人都不陌生,虽然它是提高了传输的有效性,但是这个导致的直接问题就是整个传输过程是很耗时的,也就是说每次http请求都会经历三次握手这个过程,消耗的时间也是不言而喻,并且传统的http协议规定一次请求只能请求一个文件,所以一些顶级网站千方百计的采取一些减少http请求的策略,大多数就是采取一次http请求能够请求多个文件这样的实现,欣喜的是,http2.0已经支持能够一次http能够请求多个文件,这个还是值得期待全部推行开来的,只不过肯定需要过上一段时间,慢慢去等待推行吧。
    • 将用户输入的地址封装成 HTTP Request 请求报文 发送到服务器
    • 浏览器将用户输入的 URL 地址根据HTTP协议 封装成了 http 请求报文(请求头+请求行+请求体)
    • 该报文说白了也就是字符串而已,最终也要被转成了二进制数据再发送到服务器
    • 后台服务器接收到用户HTTP Request 请求报文
    • 后台服务器接收到 客户端发送给自己的数据(二进制数据)
      • 首先把二进制数据按照编码解析成字符,(人类可以识别的)
      • 解析成字符之后,再按照 HTTP 协议规范中定义的格式解析出来
    • 后台服务器处理用户请求信息

    • 当得到用户请求报文之后,根据请求报文中的 get、port或者 URL、或者URL中的查询字符串或者 请求体中的数据
    • 根据用户的特定的请求数据做特定的处理
    • 后台服务器将相应结果封装到 HTTP Response 响应报文中 发送给客户端
    • 当我们解析和处理完用户请求报文消息之后
    • 服务器开始将具体的 要发送给客户端的数据 根据 HTTP 协议规范 封装成 HTTP协议响应报文
    • 响应头、响应字段、响应体
    • 该数据说白了也是具有特定格式的字符串而已,最终这个字符串也要转换成二进制数据发送到客户端
    • 发送到客户端也是通过 Socket(ip地址、端口号) 发送到了该客户单
    • 用户浏览器接收到响应后开始渲染html、css,解析和执行 JavaScript 代码
    • 当客户端解析到 服务器发送过来的 二进制数据
    • 客户端浏览器也会将 二进制数据 根据编码类型解析成 字符串
    • 然后根据 HTTP 协议,解析服务器发送过来的 响应报文
    • 然后根据响应报文中的报文内容(报文头、报文体)做具体的解析
    • 当浏览器在解析的过程中遇到 一些静态资源时,会再次重复上面的步骤
  • 相关阅读:
    谈谈软件的开发及成长历程
    Winform开发框架之简易工作流设计
    如何快速开发树形列表和分页查询整合的WInform程序界面
    邮件代收代发功能模块的操作界面设计和阶段性总结
    基于Lumisoft.NET组件的SMTP账号登陆检测
    Winform开发的界面处理优化
    基于DevExpress开发的GridView如何实现一列显示不同的控件类型
    Winform里面的缓存使用
    分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
    算法 dfs —— 将二叉树 先序遍历 转为 链表
  • 原文地址:https://www.cnblogs.com/webhb/p/5615063.html
Copyright © 2011-2022 走看看