从浏览器输入一个地址到渲染出网页这个过程发生了什么???

1. 了解URL:
    
其中:登录信息  查询字符串 服务器端口号 文件路径 片段标识符可选, 如果没有的就是默认配置。
2.DNS解析服务
      计算机需要将域名理解为IP地址, 这个时候就需要DNS解析服务来提供帮助,主要遵循如下查找过程:
      浏览器缓存-浏览器会保存DNS记录,每个
      系统缓存-如果再浏览器缓存里面没有找到记录,则在系统缓存中获取。
      路由器缓存
      DNS服务器 递归搜索

3. 建立TCP连接
  由DNS服务解析的IP地址之后,通过IP地址建立TCP连接,这里会有一个TCP三次握手的过程:
       

4. 生成HTTP报文
  建立连接时,会生成HTTP报文, HTTP报文结构如下:
 
下面分别解释一下各个组成部分:
    请求行:由 请求方法  请求URI 和 请求HTTP版本构成 形如:
             PUT  example.html  HTTP1.1
   请求方法包括:   GET 获取资源, POST传输实体主体,PUT 传输文件等等
         URI和HTTP版本没什么好说的

请求首部字段:(传递额外信息用,以下列举一些首部字段)
            Accept:用于通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级,

    形如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 意思就是, 优先返回 text/html,application/xhtml+xml,application/xml  类型的文件q 表示权重,默认且最大值为1。
            Accept-Charset :用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。
    Accept-Encoding :首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
    通用首部字段和实体首部字段都有各自的定义, 这里不再展开。

生成报文时,其中有一个概念是cookie:
         HTTP是无状态协议,不对之前的请求和响应状态进行管理,也就是说,HTTP不保存个人登陆信息,那么这里就需要cookie来协助http协议来解决。

  Cookie整个工作过程如下:
           第一次http请求:
            服务端会在响应中添加cookies来提示客户端保存cookie:Server: Apache <Set-Cookie: sid=1342077140226724; path=/; expires=10-Oct-12 07:12:20 GMT>
        第二次http请求:
            客户端在第二次请求时就会在报文中加入cookie:
        Cookie: sid=1342077140226724

5.生成HTTP报文之后经过如下的过程:
  一个HTTP报文经过各个层级的处理最后才被传输给服务端,下面描述一下各个层级的工作:
      传输层:这里会加上TCP首部,主要包含端口号, 以及TCP的各种信息。同时, 他会将HTTP的报文请求分为多个报文段。
      网络层:待发送的数据送到网络层,网络层再进行封装,这里面包含源目的地的ip地址。
      链路层:将mac地址、链路层信息加到数据包里,形成以太网首部,在链路协议下完成节点间的数据传输。
  
6.服务器接收到HTTP请求
    服务器接收到数据之后,会经过链路层,网络层,传输层逐层将该层对应的首部信息去掉,整个过程如下图所示:
 

7. 服务器根据收到的HTTP数据,生成对应的响应报文,结构如下:
        

下面逐一介绍:
    状态行:由HTTP 版本 状态码 原因短语构成
    响应首部字段 通用首部字段 实体首部字段 都可以查手册得知其具体内容以及含义这里不再展开
  
8. 客户端接收到了响应报文之后,我们以一个html文件来讲述浏览器是如何渲染文档的
    先介绍一些背景知识:    
    浏览器通常的主要组件分为以下几部分:
      1.用户界面:如地址栏 书签菜单等等
      2.浏览器引擎:在用户界面和呈现引擎之间传送之类
      3.呈现引擎:负责显示请求的内容。例如HTMLhe CSS
      4.JAVAScript解释器:用于解释和执行JavaScript 代码
      5.数据存储

渲染文档主要使用呈现引擎。
过程如下:
    1.呈现引擎从网络层获取请求文档的内容HTML文件,内容大小一般在8000个块以内。
    2.引擎解析HTML文档 将各个标记转化为内容树上的DOM 节点 ,同时解析CSS文件 样式数据
    3.样式信息和 内容树共同构建成为 呈现树
    4.呈现树构建完毕以后,进入布局阶段, 为每一个节点分配一个应该出现在屏幕上的确切坐标
    5.呈现引擎遍历呈现树 由用户界面后端层将每个节点绘制出来。

时间: 2024-08-10 03:30:32

从浏览器输入一个地址到渲染出网页这个过程发生了什么???的相关文章

输入一个字符串,打印出该字符串的所有排列

目录 输入一个字符串,打印出该字符串的所有排列. 题解 输入一个字符串,打印出该字符串的所有排列. 例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串 abc,acb,bac,bca,cab,cba. 题解 了解下排列的数学知识: 排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号

scala基础题--函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔

函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔 import scala.io.StdIn object work02 { def main(args: Array[String]): Unit = { println("请输入一个数") var num:Int=StdIn.readInt() val pige=(num:Int)=>{ for (i<-1 to num){ for (j<-1 to num-i){ print("

任意输入一个正整数,求出其各位数字之和

//任意输入一个正整数,求出其各位数字之和 #include <stdio.h>void main(){    int num,s=0;     printf("请任意输入一个正整数:\n");     scanf("%d",&num);     while(num!=0)     {         s=num%10+s;//没有赋值的操作,在编写程序时没有意识到这一点         num=num/10;     } printf(&quo

输入一个字符串,查找出出现次数最多的字符

.输入一个字符串,查找出出现次数最多的字符 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 4 System.out.println("请输入一个字符串:"); 5 String str = new Scanner(System.in).next(); 6 int[] a = new int[127]; 7 char maxChar = 0; 8 int max = 0;

反射---输入一个类,打印出类中所有元素

package com.sadhu; import java.util.*; import java.lang.reflect.*; /** 反射---输入一个类,打印出类中所有元素 reflect包中有三个描述类元素的类:Field.Method.Constructor */ public class Sample {     public static void main(String[] args)     {         String name;//收集用户输入的类         

笔试常考--浏览器输入一个URL点击回车之后发生了什么

解析URL:浏览器首先对拿到的URL进行识别,抽取出域名字段. DNS解析: 查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到, 检查系统缓存,检查hosts文件,这个文件保存了一些以前访问过的网站的域名和IP的数据.它就像是一个本地的数据库.如果找到就可以直接获取目标主机的IP地址了.没有找到的话,需要 检查路由器缓存,路由器有自己的DNS缓存,可能就包括了这在查询的内容:如果没有,要 查询ISP DNS 缓存:ISP服务商DNS缓存(本地服务器缓存)那里可能有相

从浏览器输入一个网址,到该页面显示完成,都发生了那些事情?

平常上百度输入www.baidu.com,上google输入www.google.com,之后弹出页面.鬼知道他们经历了什么. 于是开始上网收搜集一些资料,自己总结了一下,其大概流程为: 1.浏览器解析链接执行页面的url 2.浏览器向DNS请求解析www.baidu.com的IP地址 3.域名系统DNS解析出IP为14.215.177.37 4.浏览器与服务器建立起TCP链接(14.215.177.37:80) 5.浏览器初始化一个指向Web容器(类似于Tomcat)的HTTP请求 6.Web

浏览器输入url到整个页面显示出来经历的过程

笔记摘自 http://www.cnblogs.com/lichenghan/p/4019370.html ? ? 首先,对于http肯定是有客户端和服务器的 ? ? 在这个语境中,客户端和服务器本质上也都是一个软件,实现了http协议相关标准的软件. ? ? 客户端一般由都是由浏览器充当,也就是说,在浏览器中实现了http客户端的相关功能. ? ? 而服务器的实现就多种多样啦,我们可以用java写servlet,c#写ASP.net,还有php,ruby,Python,nodejs等.实际上我

在浏览器输入网址到页面加载完毕中间到底发生了什么?(Browser--&gt;Server)

最近在学习韩老师的php视频,中间有讲到发送请求到服务器返回内容,以前对这个理解并不深刻,虽然以前也知道一部分,这次听了之后收获良多:所以我就画了个流程图,从浏览器输入网址到服务器返回信息,浏览器渲染,呈现页面的具体过程. 今天是国庆节,明天才会出去玩,所以今天还是得学习,学习根本不能停啊,哈哈! 中间有错误的欢迎各位,不吝赐教,谢谢! 下面这个是韩老师画的图,内容也比较相似,所以我也放在上面,以便以后回顾: 其中有涉及到,http的状态码,我这个好多也确实记不住,所以为了以后需要的时候来看,我