【面试常问之网络】在浏览器上输入一个网址后,发生了什么?/HTTP的工作流程/DNS域名解析过程

这是一个比较常见且经典的问题,我们或者用户通过浏览器访问某个网站,比如用户点击URL为http://www.sxtyu.com/index.html的链接或者访问www.baidu.com,敲回车之后,浏览器的背后发生了什么?

在浏览器中输入url并且获取响应的过程,其实就是浏览器和该url对应的服务器的网络通信过程。就比如在浏览器中输入:www.baidu.com,那么会返回一个百度搜素的界面,这其实就是浏览器和百度服务器之间的网络通信过程。浏览器就是客户端,用于发出请求,而百度的服务器就是服务器,用于接收并响应请求。

目录

1、浏览器先分析超链接中的URL

 2、浏览器向DNS请求解析请求解析IP地址

DNS域名解析IP地址的过程为:

3、DNS将解析出的IP地址返回浏览器

4、浏览器与服务器建立TCP连接(80端口,三次握手)

 5、浏览器请求文档(GET/index.html)

6、服务器给出响应,将文档index.html发送给浏览器,浏览器进行解封装。

7、浏览器显示index.html中的内容(渲染页面)

8、释放TCP连接(四次挥手

从封装的角度来讲,浏览器和web服务器执行以下动作:(简单流程)

1、浏览器先分析超链接中的URL:分析域名是否规范

2、浏览器向DNS请求解析请求解析http://www.sxtyu.com/index.html中的ip地址

3、DNS将解析出的ip地址返回浏览器

4、浏览器与服务器建立TCP连接(80端口,三次握手)

5、浏览器请求文档(GET/index.html)

6、服务器给出响应,将文档index.html发送给浏览器,浏览器进行解封装。

7、浏览器显示index.html中的内容(渲染页面&#

### HTTP协议常见面试问题及解答 #### 1. HTTP握手的过程是什么? HTTP握手是建立在TCP连接之上的,具体包括以下几个阶段: - **建立TCP连接**:客户端向服务器发起三次握手以建立可靠的TCP连接。 - **发送HTTP请求**:一旦TCP连接成功建立,客户端通过该连接发送HTTP请求消息给服务器。 - **接收HTTP响应**:服务器处理收到的请求后返回相应的HTTP响应消息给客户端。 - **关闭TCP连接**:当双方完成数据交互后,通常会断开TCP连接。 这些步骤确保了客户端与服务器之间能有效地进行通信并交换所需的数据[^1]。 #### 2. HTTP/1.0 和 HTTP/1.1 的主要区别有哪些? 相比于HTTP/1.0, HTTP/1.1引入了一些重要的改进特性: - 支持持久连接(Persistent Connections),即在一个TCP连接上可以传送多个HTTP请求和应答; - 添加了`Host`头字段用于支持虚拟主机(Virtual Hosting)功能; - 提供分块编码(Chunked Transfer Encoding)机制允许动态长度的内容传输; - 更加完善的缓存控制(Cache-Control)指令集以及条件GET方法(If-Modified-Since / If-None-Match)来优化资源获取效率; 上述变化显著提高了Web应用性能和服务质量。 #### 3. 如何理解WebSocket协议与HTTP之间的关系? 虽然两者都是基于TCP的应用层协议,但是它们有着不同的设计目标和技术特点。WebSocket是在原有HTTP基础上发展起来的一种全双工通讯协议,在初次握手时遵循标准HTTP格式,之后则切换至更高效的二进制帧结构来进行双向实时通信。因此可以说WebSocket是对传统HTTP单次请求回应模式的有效补充和发展延伸。 ```python import websocket def on_message(ws, message): print(f"Received: {message}") ws = websocket.WebSocketApp("wss://example.com/socket", on_message=on_message) ws.run_forever() ``` #### 4. 当浏览器输入URL按下回车键后会发生什么? 整个流程大致如下所示: - DNS解析域名成IP地址; - 建立TCP/IP连接到指定端口,默认情况下HTTP服务监听80端口而HTTPS则是443端口; - 发送HTTP GET 请求携带必要的头部信息如User-Agent等; - 接收来自服务器的一系列响应报文直至结束标志符到达为止; - 渲染HTML文档树形结构同时加载外部样式表、脚本文件等内容片段; - 执行JavaScript代码触发DOM事件更新视图界面显示效果。 此过程涉及到了网络编程中的诸多概念和技术要点,对于深入理解和掌握计算机科学基础知识具有重要意义[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欢喜躲在眉梢里-柚子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值