陆仴
专业问题我来回答,
背景
TCP三次握手和四次分手
所谓三次握手(Three-way Handshake),是在建立通信过程中,服务端和客户端总共发送三次数据包。三次握手的目的是:建立TCP通信,和对方同步序列号和确认号,交换通信窗口的大小等。
完整的HTTP请求过程
1.建立TCP连接:只有当TCP建立完成后才能进行通信。
2.客户端向服务端发起请求:该阶段应用层通过HTTP协议组装请求包通过传输层网络层和数据链路层到达服务器。
3.客户端向服务端发送请求头信息:在这一步客户端将请求头信息组装在各类头部字段中,进行发送。
4.服务端向客户端发送响应:
5.服务端向客户端发送响应报文的头部字段:将响应数据包的头部字段发送给客户端。
6.服务端向客户端发送响应数据:通过Body将响应数据给客户单,而这些数据才是客户端要获取的。
7.关闭通信线路:数据发送完毕后,如果是短连接将马上关闭通信线路,如果是长连接,服务端会通过同步信息Connection:keep-alive来告诉客户端。
以上,就是一个完整HTTP请求的流程,其主要在于TCP建联,后续都是应用层之间的交互来通信。
感觉我的回答对你有帮助,麻烦点赞关注哈,你的关注是我继续下去的动力对网络有兴趣的可以留言交流,有疑问的也可以私信,大家一起成长,一起交流,谢谢大家
爱答问题的小星星
“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”
如题,一个完整的HTTP过程是怎样的?
一个完整的HTTP过程包括建立连接、数据传输、断开连接等七个步骤。
下面哟哟来详细介绍一下每一步:
1、TCP建立连接
HTTP协议是基于TCP协议来实现的,因此首先就是要通过TCP三次握手与服务器端建立连接,一般HTTP默认的端口号为80;
2、浏览器发送请求命令
在与服务器建立连接后,Web浏览器会想服务器发送请求命令
3、浏览器发送请求头消息
在浏览器发送请求命令后,还会发送一些其它信息,最后以一行空白内容告知服务器已经完成头信息的发送;
4、服务器应答
在收到浏览器发送的请求后,服务器会对其进行回应,应答的第一部分是协议的版本号和应答状态码;
5、服务器回应头信息
与浏览器端同理,服务器端也会将自身的信息发送一份至浏览器;
6、服务器发送数据
在完成所有应答后,会以Content-Type应答头信息所描述的格式发送用户所需求的数据信息;
7、断开TCP连接
在完成此次数据通信后,服务器会通过TCP四次挥手主动断开连接。但若此次连接为长连接,那么浏览器或服务器的头信息会加入keep-alive的信息,会保持此连接状态,在有其它数据发送时,可以节省建立连接的时间;
欢迎大家多多关注我,在下方评论区说出自己的见解。
哟哟吼说科技
Http请求的一次详解:
客户端输入URL
有缓存且较新,客户端直接读取本地缓存进行资源展示;
有缓存但是不新,准备http请求包,发送至服务端进行缓存校验;
备注:http1.0中Expire、http1.1中是Cache-Control根据发起http请求:
请求报文包含:
a) 请求行
用来说明请求类型(get\\post\\delete等)、要访问的资源(URI)以及使用的HTTP版本(1.0还是1.1)
b) 首部(header)
HOST将指出请求的目的地;
User-Agent由浏览器来定义,自动发送;
Connection:通常设置为keep-Alive, 长连接;
其他首部包括等。
c) 空行
d) 请求实体
3. 提取请求首部HOST通过DNS域名解析获取服务IP(DNS缓存\\递归等)
4. 通过IP与默认端口创建TCP连接,进行http请求报文数据发送,其中重点就三次握手进行描述:
客户端向服务端发送syn=1,seq=client请求的ID;
服务端向客户端发送syn=1,seq=服务端请求的ID,ack=客户端请求的ID+1;
客户端向服务端发送syn=0,seq=客户端请求的ID+1,ack=服务端请求的ID+1,data\\data…
5. 服务端程序接受请求,定向到请求路径处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
元数据:请求报文首部<method> <version>
HEADERS格式name:value
<request>
示例:
Host: www.chuyuni.cn 请求的主机名称
Server: Apache/2.4.7/<request>/<version>/<method>
HTTP常用请求方式:MethodGET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
6.访问资源:
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
\t资源放置于本地文件系统特定的路径:DocRoot\tDocRoot → /var/www/html
\t/var/www/html/images/logo.jpg
\thttp://www.magedu.com/images/logo.jpg
web服务器资源路径映射方式:
(a) docroot (b) alias
(c) 虚拟主机docroot(d) 用户家目录docroot
7. 返回处理结果,准备http响应:
响应报文包含:a) 状态行:http版本(1.1或者1.0),状态码
200:请求正常处理
304:返回上次请求资源未作改动,验证浏览器的缓存机制
400:请求参数错误
401:客户端无权访问,要去输入用户名\\密码之类的授权信息
403:禁止访问(读写权限等影响)
404:请求的资源不存在
500:服务内部错误
502:网关错误
503:临时过载或者维护,导致服务端无法正常处理请求
b) 首部
报文支持的语言\\编码格式\\等,注意If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答,用于服务端缓存校验
c) 空行
d) 响应报文实体
8. 通过建立的tcp连接来返回相关的http响应报文及http状态信息,然后根据实际情况看是否关闭连接(Connection的keep-alive)
9. TCP连接关闭经历4次握手
客户端主动关闭连接放发送FIN进入FIN_WAIT1状态
服务端发最后的data和ack客户端接收进入CLOSEWAIT状态,客户端进入接受ACK进入FINWAIT2状态
服务端主动发FIN,客户端接受FIN并发送ack进入TIMEWAIT状态
服务器端正式关闭连接进入close状态
10. 客户端拿到http响应的报文信息,经过一系列前端处理过程最终将请求的资源进行展示。
夕阳雨晴
一,在浏览器地址栏输入网址
二,解析域名,找到主机的ip地址
三,浏览器与主机建立TCP连接
四,浏览器向主机发起GET请求
五,服务器响应请求,返回html页面
六,浏览器开始显示服务器返回的页面,并且在显示html页面的时候,如果遇见css文件,js文件,图片,就又会再次给相应地址服务器发起请求。
神圣秋刀鱼
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户