Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-07-10:请简述一次http网络请求的过程?

MoJieBlog opened this issue · comments

2019-07-10:请简述一次http网络请求的过程?

1.建立TCP连接
2.Web浏览器向Web服务器发送请求行命令
3.Web浏览器发送请求头信息
4.Web服务器的应答,发送响应行命令
5.Web服务器发送相应头信息
6.Web服务器向浏览器发送数据,及消息体
7.Web服务器关闭TCP连接

1.建立TCP连接
2.Web浏览器向Web服务器发送请求行命令
3.Web浏览器发送请求头信息
4.Web服务器的应答,发送响应行命令
5.Web服务器发送相应头信息
6.Web服务器向浏览器发送数据,及消息体
7.Web服务器关闭TCP连接

首先通过dns域名解析找到对应的地址

浏览器发起请求-> 解析域名得到ip进行TCP连接 ->浏览器发送HTTP请求和头信息发送->服务器对浏览器进行应答,响应头信息和浏览器所需的内容-> 关闭TCP连接或保持-> 浏览器得到数据数据进行操作

  1. c端向S端发送请求行命令
    2.C端发送请求头信息
  2. S端应答,发送响应命令
  3. S端发送响应头信息
  4. S端向C端发送数据,以及消息体
  5. S端关闭链接

浏览器:
用户输入地址后回车或点击链接 -> 浏览器拼装 HTTP 报文并发送请求到服务器 -> 服务器收到请求后发送响应报文给浏览器 -> 浏览器解析响应报文并使用渲染引擎显示到界面

⼿机 App:
用户点击或者界面自动触发联网请求 -> Android代码调用拼装 Http 报文并发送请求到服务器 -> 服务器处理请求后发送响应报文到手机 -> Android 代码处理响应报文并做出响应处理(如存储数据,加工数据,显示数据到界面)

1.dns解析,域名对应 ip
2.TCP建立连接,三次握手
3.C端向S端发送请求行命令
4.C端发送请求头信息
5.S端应答,发送响应命令
6.S端发送响应头信息
7.S端向C端发送数据,以及消息体
8.S端关闭链接 tcp 四次挥手

commented
    以一次普通的C/S结构的网络请求,使用阿里云的CDN,Android-OkHttp
    
    准备工作:(连接时间)
    1,dns解析,通过域名获取IP地址
    2,三次握手,建立起网络连接

    写入:(写入时间)
    1,客户端通过socket,往cdn写入并发送完数据

    等待响应:(响应时间)
    1,cdn -> 服务器 -> cdn -> 客户端
    2,服务器自己判断,依据keep-alive等数据,判断是否断开连接(四次挥手)

这个看OKHTTP的EventListerner就知道了。这里总结一张okhttp的回调表格。详细的需要自己阅读源码注释哦

请求步骤 含义
dnsStart DNS解析开始
dnsEnd DNS解析结束
connectStart TCP连接开始
secureConnectStart 建立TLS安全信道开始
secureConnectEnd 信道建立结束
requestHeadersStart 发送首部字段开始
requestHeadersEnd 发送首部字段结束
requestBodyStart 发送请求体开始
requestBodyEnd 发送请求体结束
responseHeadersStart 接受首部开始
responseHeadersEnd 接受首部结束
responseBodyStart 接受响应体开始
responseBodyEnd 接受响应ti结束
connectEnd TCP连接断开

另外截一张postman上的图
image

以加载网页为例:
1 域名解析;
2 TCP三次握手;
3 发起Http请求;
4 服务器响应Http请求;
5 浏览器解析Html代码;
6 请求Html代码中的资源;
7 渲染页面;