2019-07-10:请简述一次http网络请求的过程?
MoJieBlog opened this issue · 9 comments
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连接或保持-> 浏览器得到数据数据进行操作
- c端向S端发送请求行命令
2.C端发送请求头信息 - S端应答,发送响应命令
- S端发送响应头信息
- S端向C端发送数据,以及消息体
- 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 四次挥手
以一次普通的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连接断开 |
以加载网页为例:
1 域名解析;
2 TCP三次握手;
3 发起Http请求;
4 服务器响应Http请求;
5 浏览器解析Html代码;
6 请求Html代码中的资源;
7 渲染页面;