博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网页http请求的整个过程
阅读量:4283 次
发布时间:2019-05-27

本文共 887 字,大约阅读时间需要 2 分钟。

本文转自:https://blog.csdn.net/Atalanta1/article/details/90550675

这是这两天面试的时候的一道面试题,当时答得不好,现在总结了一下。

一次完整的 http 请求包括一下几个步骤【这仅是个人的理解】

DNS解析--->TCP 连接--->浏览器发送http请求--->服务器响应请求--->浏览器解析html文件--->浏览器布局渲染

1.DNS域名解析。

     (1) 首先会在浏览器DNS缓存中搜索是否有对应的IP映射(并且是有效的),如果找到的话,就调用该映射并且停止解析;如果没找到的话就执行第二步;

    (2)在操作系统DNS缓存中查找是否有对应的IP,如果有的就停止解析,否则就执行第三步;

    (3)查找本地系统 hosts 文件,在hosts文件中查找是否有对应的IP,如果有的话就停止解析,否则就向本地配置首选的DNS服务器发起域名解析的请求。

2.TCP连接。

       TCP通过三次握手创建连接【保证数据传输的可靠性】,具体说一下三次握手的过程(此处就不细说了)。

3.客户端的浏览器向服务器发起http请求。【请求报文包括请求行、请求报头、空行、正文】在此不再详述

4.服务器对浏览器发过来的请求作以响应。【报文中 包括状态行、响应头部、空行、响应正文】在此也不详述(在这里常见的状态码要记住)

5.浏览器对HTML进行解析

       客户端的浏览器收到服务器的响应之后就按照顺序一个一个地对HTML文件进行解析,构建DOM树,当解析到外部资源文件CSS或JS文件时,会对服务器发送请求,下载资源文件,如果下载的是CSS文件,浏览器会一边下载CSS文件,一边对后面的html文件进行解析,并且构建DOM树,如果下载的是JS文件,那么浏览器就停止对后面html文件的解析,此时就会出现JS页面阻塞的问题。

6.浏览器布局进行布局和渲染。

参考:

HTTP请求报文和响应报文的格式:

TCP三次握手的过程详述:

参考:https://blog.csdn.net/allenjay11/article/details/51788026
你可能感兴趣的文章
动态链接库设计
查看>>
文件编程之库函数方式
查看>>
与时间相关的函数编程
查看>>
Linux进程控制相关概念
查看>>
c标准中的预定义宏
查看>>
*(volatile unsigned long *) 语法
查看>>
Linux多进程程序设计
查看>>
Linux进程间通讯基础
查看>>
Linux信号通讯编程
查看>>
信号量互斥编程
查看>>
信号量同步编程
查看>>
共享内存通讯编程
查看>>
Linux消息队列通讯编程
查看>>
多进程与多线程的优缺点
查看>>
Linux多线程程序设计
查看>>
网络协议基础
查看>>
Linux网络编程模型
查看>>
TCP通讯程序设计
查看>>
UDP通讯程序设计
查看>>
并发服务器设计
查看>>