【计算机网络】输入网址到网页显示的整个流程

【计算机网络】输入网址到网页显示的整个流程输入网址到网页显示的整个流程最近在看一些大厂的笔经面经时 经常看到这个问题 索性在今天也把自己学习的知识整理一下 第一步 首先你得在浏览器中输入网址 比如输入 www baidu com 其中 www 为主机 baidu 为域名 com 为类型 但是有网址不能直接找到对应的响应主机 必须把网址 即域名转化为 ip 地址 第二步 进行 DNS Do

                            输入网址到网页显示的整个流程

最近在看一些大厂的笔经面经时,经常看到这个问题,索性在今天也把自己学习的知识整理一下。


第一步:首先你得在浏览器中输入网址,比如输入www.baidu.com。其中www为主机,baidu为域名,com为类型。但是有网址不能直接找到对应的响应主机,必须把网址,即域名转化为ip地址。


第二步:进行DNS(Domain Name System,域名系统)查询,它的作用是将域名转化为具体的ip地址。

先谈一下DNS的结构:

(1)根域名服务器,全球只有13个不同ip地址的服务器,注意不是服务器只有13台,只是他们所代表的地址只有13个,也就是存在镜像服务器,一个地址可以对应多个镜像服务器。

(2)根域名服务器之下的顶级域名服务器,如com、net、cn、gov等。

(3)顶级域名服务器之下的权威服务器,比如baidu、facebook等。

(4)权威服务器之下的资源记录,比如www、ftp、mail等。

查询的过程如下:

(1)首先会在浏览器缓存中去查询,之前每浏览一个网站,浏览器都会在缓存中存有域名与ip地址的映射关系。不过缓存失效的时间不由浏览器决定,而由操作系统决定。

(2)浏览器缓存中查询不到后,之后会在系统缓存中查询,由浏览器发起一个系统调用,查询系统缓存中的数据。

(3)系统缓存中也查询不到后,将会去路由器缓存中查找。

(4)路由器缓存中也找不到的话,将会从本地DNS服务器的缓存中查找,本地服务器即用户自己配置的DNS服务器。

(5)如果本地的DNS服务器也找不到的话,本地DNS将会发送请求至根域名服务器,根域名服务器中没有相关缓存数据的时候,就会返回com顶级域名服务器的地址。然后本地DNS服务器再发送请求至com顶级域名服务器,com顶级域名服务器中查询不到的话,就会返回baidu权威服务器的地址,然后本地DNS服务器再发送请求至baidu权威服务器,baidu权威服务器就会返回www主机地址。(这是一种迭代的过程,还有一种递归的过程。即local至根域名,根域名不直接返回com地址,而是发送请求至com,com发送请求至baidu,baidu发送请求至www,www再返回给baidu,baidu返回给com,com再返回给local)至此,整个DNS查询步骤结束,现在浏览器拿到了域名对应的ip地址。


第三步:浏览器发送请求至服务器,假设我们现在输入的地址是www.baidu.com,那么浏览器默认将网址改成这样的形式,即http://www.baidu.com。

发送格式如下:

【计算机网络】输入网址到网页显示的整个流程

发现返回了307状态码,也就是临时重定向,需要我们重定向到location表明的地址,即https://www.baidu.com。仔细观察,仅仅多了个s,也就是说http与https之间是有差别的,关于两个的区别,请移步我的另外一篇文章浅析HTTP与HTTPS的区别

307与301、302本质上差不多,但是有细微的差别,简单来说是为了增强301与302的规范性。其他差别这里不做深究,可以参考HTTP状态码302、303和307的故事


第四步:浏览器向重定向后的地址发送请求

发送的请求格式如下:

【计算机网络】输入网址到网页显示的整个流程

可以看得出:

(1)Request Method表明请求方式是get。

(2)User-Agent,用户代理,表明所用浏览器的一些信息,包括内核,版本等。

(3)Connection:keep-alive表明需要服务器为之后的请求保持tcp连接

(4)Cookie中保存了一些与用户状态相关的数值,可以与session连用来跟踪会话,那么有关cookie与session的内容,可以参考我的另外一篇文章【计算机网络】Cookie与Session的区别


第五步:服务器处理http请求

服务器可以根据Cookie中的数据,通过遍历内存中的Session集合,从而判断用户的登录状态。如果用户未登录,则展示一些诸如首页的基本宣传数据。如果用户已经登录,通过解析get请求头、post请求体中的参数,查询数据库,返回用户相关数据,填充到视图中。并将此次处理完的内容通过相应的压缩算法,压缩成某个块。


第六步:服务器返回http响应

服务器返回的响应格式如下:

【计算机网络】输入网址到网页显示的整个流程

其中有些键值対表明:

(1)Content-Encoding的值是gzip,表明响应体使用了gzip方式压缩了,浏览器也需要使用gzip算法进行解压缩,解压缩响应体后,产生如下的内容

【计算机网络】输入网址到网页显示的整个流程

(2)Content-Type的值是text/html,表明服务器需要浏览器将次内容以html文本的形式显示出来,而不是以文件形式去下载它


第七步:浏览器请求样式以及图片文件,用以渲染界面并显示给用户

浏览器解压缩响应体后,在界面显示的同时,下载css、png、gif等一些静态文件,这些静态文件可以被浏览器缓存,防止多次请求。很多公司将自己的静态文件托管在CDN上(Content Delivery Network,即内容分发网络),从CDN上加载大量静态文件,加快查找速度,减少原本网站的并发压力。

访问百度的静态文件有:(出去前两个与最长的那个)

【计算机网络】输入网址到网页显示的整个流程


第八步:浏览器通过Ajax(Asynchronous Javascript And XML 异步 JavaScript 和 XML)

在传统的web应用,用户每发一次请求,用户的动作就会被阻塞,即在服务器返回响应之前,用户不可以进行其他的操作,只能等待响应。然后服务器会响应一个完整的html页面,浏览器再次进行渲染。哪怕是一个很小的一个请求,都会阻塞用户动作,以及刷新整个页面,极大地浪费了用户的时间和网络的带宽,也增加了服务器的压力。

Ajax出现之后,通过此技术发起的http请求,将不会阻塞用户的动作,服务器响应之后,页面会进行一个局部的刷新,也就是不会刷新整个页面,极大提高了页面加载与服务器处理的效率。当然Ajax也要自身的缺点,暴露了浏览器和服务器通信的具体逻辑,容易造成漏洞攻击。此外,Ajax没有后退机制,在一定程度上,用户的体验感降低。

百度界面显示出来后,百度又利用了ajax去请求我之前的搜索关键词,然后利用js填充到搜索框的下拉列表中,返回的数据如下:

【计算机网络】输入网址到网页显示的整个流程


总结:以上就是关于输入一个网址到界面显示的整个流程的具体介绍了,希望能帮助到更多的同学们,也希望你们能指出其中存在的错误,一同进步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233213.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月6日 下午8:01
下一篇 2025年8月6日 下午8:22


相关推荐

  • oracle dba教程视频_数据库中的DBA

    oracle dba教程视频_数据库中的DBA我机器上只有一部分的版本:http://v.youku.com/v_show/id_XMTk3MTgzMzI=.htmlhttp://www.ixdba.net/article/b3/1317.htmlhttp://itboba.com/taxonomy/term/620http://v.youku.com/v_playlist/f2972170o1p9.html

    2025年7月29日
    7
  • ExtJs 入门教程

    ExtJs 入门教程ExtJs 入门教程 ExtJs 入门教程一 学习方法 ExtJs 入门教程二 HelloWorld ExtJs 入门教程三 窗体 Window 组件 ExtJs 入门教程四 表单 FormPanel ExtJs 入门教程五 文本框 TextField ExtJs 入门教程六 按钮 Button ExtJs 入门教程七 登陆窗体 Demo Login ExtJs

    2026年3月20日
    2
  • LIGHT LIFE 简述

    LIGHT LIFE 简述

    2022年3月13日
    368
  • Ubuntu 上docker部署 OpenClaw

    Ubuntu 上docker部署 OpenClaw

    2026年3月13日
    2
  • 关于Platform SDK和Windows SDK

    关于Platform SDK和Windows SDK原文地址:http://www.cnblogs.com/holynn/archive/2009/04/29/1446498.html问题1:什么是WindowsSDK?WindowsSDK是用来支持32位和64位Windows平台以及.NET框架编程模型的开发包。WindowsSDK这个名字从WindowsVista开始使用,它包含以前PlatformSDK中的所有内容,同时包含

    2022年5月4日
    46
  • Intelij的idea和pycharm的使用

    Intelij的idea和pycharm的使用idea 是一个很复杂但是要页很好使用的工具 其集成了很多功能 也觉定了其很多的快捷键 要在使用得过程中总结其好处 1 psvm publicstatic 2 shift f6 重命名 ctrl I 重写接口方法 ctrl 0 重写类方法 crtl f 单词查询 Atl f 打开 File 菜单 3 cmd opt L 规范代码 cmd o

    2026年3月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号