【Android面试题】2023最新面试专题:网络编程(四)

7 输入一串URL到浏览器都经历过什么? (美团)

这道题想考察什么?

这是一道经典的面试题,主要考察的是对网络知识的掌握情况。

考察的知识点

DNS解析、TCP/IP模型与通信过程,HTTP/HTTPS等

考生如何回答

总的来说,当你输入在浏览器里输入一个URL到页面加载,发生的顺序如下:

  1. DNS解析

  2. TCP连接,SSL握手

  3. 发送HTTP/HTTPS请求

  4. Server处理HTTP请求并返回HTTP报文

  5. 浏览器解析并渲染页面

  6. HTTP连接断开

DNS解析

DNS解析流程

DNS解析一般指域名解析。互联网中的地址是数字的IP地址,域名的作用主要就是为了便于记忆。 域名解析就是域名到IP地址的转换过程,让人们通过注册的域名可以方便地访问到网站的一种服务。

假设输入的URL域名,那肯定会涉及到DNS解析;而如果URL本身就是IP,那就不需要进行DNS解析。

解析的步骤大致如下图:
在这里插入图片描述

本地域名服务器可能存在对应的域名缓存记录,首先在本地域名服务器中根据域名查询IP地址,如果没有找到的情况下,本地域名服务器会向根域名服务器发送一个请求。如果根域名服务器也不存在该域名时,本地域名会向com顶级域名服务器(TLD)发送一个请求,依次类推下去。直到最后本地域名服务器得到对应的IP地址并把它缓存到本地,供下次查询使用。

TCP连接

DNS解析返回域名的IP之后,接下来因为HTTP是基于TCP上的,因此浏览器要和该IP进行TCP三次握手,建立连接。TCP三次握手过程见:TCP三次握手四次挥手

SSL握手

如果我们使用的是HTTPS。对于HTTPS,需要有一个SSL/TLS的鉴权/认证,才能进行后续数据的交互。握手完成后,基于此TCP连接的通信数据都会经过SSL协商的加解密方式来完成数据加解密。

HTTP/HTTPS请求和响应

TCP连接已经建立好了,意味着桥已经搭好了,下一步就该传输HTTP(HTTPS与HTTP的区别只是多了一步加解密)消息了。从代码的角度上来说,就是使用套接字Socket,完成与服务器的连接,然后使用Socket的OutputStream发出一段字符串数据,就完成了一次请求,服务器经过处理返回HTTP响应字符串。这些字符串就是HTTP报文,它们的格式如下:(请求头+请求体,响应头+响应体)

在这里插入图片描述

浏览器解析和渲染页面

浏览器接收到了服务器的返回内容,接下来浏览器该把内容呈现给用户了。服务器返回的内容可能是HTML页面,也可能是JSON数据、XML数据、文件等数据。浏览器根据响应头中的Content-Type,来识别服务器响应的不同类型数据,进行最终的显示或下载等处理,如上图中的:“Content-Type:application/json;charset=utf-8”,则表示json数据,目前chrome浏览器默认会显示响应体中的JSON数据。

结束

在完成显示之后,根据HTTP协议规则,从HTTP1.1开始,默认会在请求头中加入:“Connection:keep-alive”,浏览器可以将其设置为:“Connection:close”,但是几乎没有浏览器会这样去做。这个请求头的意思是:是否保持长连接。同时响应头中也会存在此字段,如果双方都为:“keep-alive”,则会保持此TCP连接,否则完成请求之后,直接进入TCP四次挥手阶段断开连接。

8 断点续传原理(腾讯)

这道题想考察什么?

是否掌握断点续传原理

考察的知识点

HTTP协议

IO处理

考生如何回答

在基于HTTP协议的通信中,断点续传功能最核心的原理就是利用HTTP请求中Range字段。

当请求服务器上的一个文件时,通过在请求头中设置"Range: bytes=x- "

HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();
httpConnection.setRequestProperty("RANGE","bytes=200");

Range表示需要服务器返回的文件字节数据从第x字节开始,指定需要传输的文件数据范围。

当需要对服务端传输的文件数据进行保存(下载)。在Java中也可以借助RandomAccessFile的seek方法访问记录并读取指定位置的数据。

RandomAccess rafile = new RandomAccessFile("down.zip","rw"); 
// 定位文件指针到 200 位置 
rafile.seek(200);
// 前200字节不改动,从200字节开始写入数据到文件
rafile.write(...)

最后

此面试题会持续更新,请大家多多关注!!!!
有需要此面试题的朋友可以扫描下方二维码免费领取!!!
同时扫描下方二维码还可以进群享受ChatGPT机器人的服务哦!!!

猜你喜欢

转载自blog.csdn.net/datian1234/article/details/132324208