http请求发送后从客户端到服务端的详细过程
1. ⾸先http请求是基于tcp/ip协议的,所以要通过DNS服务器将域名解析为相应ip地址如果url⾥不包含端⼝号,则会使⽤该协议的默认端
⼝号。DNS解析详细过程参考blog.csdn/qq_39393899/article/details/80405979
2. 建⽴⼀个socket连接,socket相当于tcp/ip协议的接⼝,便于我们去使⽤这个协议(⽐如create,listen,accept,connect,read和write
等等)。socket还有⼼跳机制,⽤于保持客户端服务端的连接,按照⼀定的时间间隔发送⼀个⾃⼰命名的包给对⽅。由于socket连接基于tcp/ip协议,所以要经过三次握⼿。
3. HTTP请求格式分别是请求⾏、请求头、空⾏、消息体,每部分内容占⼀⾏。
请求⾏:由三部分组成:分别是请求⽅法( GET/POST/DELETE/PUT/HEAD )、 URI 路径、 HTTP 版本号。
请求头:缓存相关信息(Cache-Control,If-Modified-Since)、客户端⾝份信息(User-Agent)等键值对信息。
空⾏。
主体:客户端发给服务端的请求数据,这部分数据并不是每个请求必须的。
4. 服务器响应HTTP请求
服务器接收处理完请求后返回⼀个HTTP响应消息给客户端。HTTP响应消息的格式包括:状态⾏、响应头、空⾏、消息体。每部分内容占⼀⾏。
状态⾏:有 HTTP 协议版本号,状态码和状态说明三部分构成。
tcp ip协议下载响应头:⽤于说明数据的⼀些信息,⽐如数据类型、内容长度等键值对。
空⾏。
消息体:服务端返回给客户端的HTML⽂本内容。或者其他格式的数据,⽐如:视频流、图⽚或者⾳频数据。
5. 浏览器解析html代码,并请求html代码中的资源
浏览器拿到html⽂件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,向服务器端发起
⼀个HTTP请求,如果服务器端返回304状态码(告诉浏览器服务器端没有修改该资源),那么浏览器会直接读取本地的该资源的缓存⽂件。否则开启新线程向服务器端去请求下载。(这个时候就⽤上keep-alive特性了,建⽴⼀次HTTP连接,可以请求多个资源。)
最后,浏览器利⽤⾃⼰内部的⼯作机制,把请求到的静态资源和html代码进⾏渲染,再呈现给⽤户。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论