浏览器访问服务器时,都发生了什么?

        前几天写了Servlet的转发(forward)和重定向(redirect),今天继续写一个相关的知识点,使用Servlet开发技术开发的后台服务中,浏览器访问服务器时发生了什么。(欢迎交流指正!)


        直入正题,简单来说,浏览器在访问服务器时,浏览器发送请求给服务器,服务器调用servlet,servlet根据请求调用相应业务逻辑处理,拿到结果并返回给服务器,服务器发送给浏览器。

        看起来非常简单,不过我们来详细分析一下:

        1.浏览器向服务器发送建立连接(ip:端口号)的请求(涉及三次握手)

        2.将请求数据打包发送给服务器

        3.服务器创建request和response对象,将请求包解析放入request中

        4.根据资源路径找到servlet配置,通过反射创建servlet实(若已创建则直接使用,servlet有请求到达的时候才会创建也可以在web.xml配置load-on-starup,容器加载时就创建,0为优先级最高。)

        5.调用Servlet的service( )方法,将request和response作为参数传递

        6.Servlet通过request获取参数,将处理结果放入response中

        7.服务器读取response信息

        8.服务器将结果打包发送给浏览器。

        9.发送完毕关闭连接。(涉及四次挥手)

        10.浏览器解析数据包,取出数据生成响应界面


        上面的过程中还涉及到三个知识点:TCP协议的三次握手(连接)和四次挥手(断开)、浏览器服务器互相发送的数据包、session与Cookie(下篇再讲)。

        首先讲一下数据包,由浏览器发送给服务器的,我们可以称之为请求数据包,服务器发送给浏览器的称之为响应数据包。那里面都有什么东西呢?

        请求数据包结构:

        1. 请求行:请求方式(get/post)、资源路径、协议类型与版本

        2. 若干消息头:如jsp的page指令中的,content-type= text/html等

        3. 实体内容:post的话请求参数放这里,get请求参数附在资源路径上

        响应数据包结构跟请求数据包差不多:

        1. 状态行:状态码(200,404,500...),协议类型与版本

        2. 若干消息头:(如我们上篇文章提到的重定向(redirect)原理:服务器向浏览器发送一个302状态码和一个消息头location,浏览器接收到后会立即向location指向的地址发送请求)

        3. 实体内容:处理结果


        扩展:(在《HTTP权威指南》一书中,对于URI的定义是:统一资源标识符;对于URL的定义是:统一资源定位符。二者的区别在于,URI表示请求服务器的路径(appname开始),定义这么一个资源。而URL同时说明要如何访问这个资源(http://))


        在讲TCP协议的三次握手和四次挥手之前,我们要先了解一下TCP报文的报头中的几个标志性字段:

        1、 SYN:同步连接序号,TCP SYN报文就是把这个标志设置为1,来请求建立连接;

        2、 ACK:请求/应答状态。0为请求,1为应答;

        3、 FIN:结束连线。如果FIN为0是结束连线请求,FIN为1表示结束连线;

        4、 RST:连线复位,首先断开连接,然后重建;

        5、 PSH:通知协议栈尽快把TCP数据提交给上层程序处理。


        三次握手首先Client端发送连接请求报文,Server器接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server器发生ACK报文,并分配资源,这样TCP连接就建立了。具体看图:

        

        1. 客户端-->服务器 连接请求:发送SYN=1请求报文

        2. 服务器-->客户端 授予连接:回复ACK=1应答报文,服务器分配资源

        3. 客户端-->服务器 确认连接:回复ACK=1应答报文,客户端分配资源

        三次握手,TCP连接建立。


        四次挥手:

        Client端发起中断连接请求,发送FIN报文。

        Server端接到FIN报文后发送ACK,告诉Client端请求收到了但数据未传输完成,Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。

        当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端数据发完准备关闭连接。

        Client端收到FIN报文后发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。

        Server端收到ACK后,断开连接。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,Client端也关闭连接。

        TCP连接关闭。

        

        客户端-->服务器 断开请求:发送FIN=1结束连线报文

        服务器-->客户端 应答请求:回复ACK=1应答报文,继续传输数据,客户端继续等待FIN

        服务器-->客户端 断开请求:发送FIN=1结束连线报文,收到客户端ACK=1报文后关闭

        客户端-->服务器 应答请求:回复ACK=1报文,客户端等待响应2MSL后无响应则关闭

        四次挥手,TCP连接关闭。


        其中还涉及到session和Cookie的相关知识,日后再补充。更加底层的事情目前还不了解,如有错漏,欢迎交流指正!

        PS:图片来源与网络,侵删~

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我了解了。关于您的问题,整个过程可以分为以下几个步骤: 1. 输入URL:当您在浏览器地址栏中输入URL浏览器将该URL发送到域名系统(DNS),通过域名系统将URL转化为IP地址。 2. 发送HTTP请求:浏览器根据URL发起HTTP请求,请求访问Web服务器的特定资源。 3. 服务器响应:当Web服务器接收到请求,它将处理请求并返回所请求的资源。 4. 浏览器渲染:浏览器收到服务器响应后,它将解析HTML源代码,并根据CSS样式表和JavaScript代码来渲染页面。 5. 页面展示:最终,浏览器将HTML、CSS和JavaScript代码解析完毕后,它在屏幕上展示出页面内容。 以上就是从输入URL到页面展示的整个过程,希望能够帮到您。 ### 回答2: 当我们在浏览器的地址栏中输入URL,整个过程可以分为以下几个步骤: 1. DNS解析:浏览器首先根据URL中的域名(例如www.example.com)进行DNS解析,将域名解析为对应的IP地址。这一步骤是为了找到存放网页的服务器。 2. 建立TCP连接浏览器通过IP地址与服务器建立TCP连接TCP协议提供可靠的连接,确保数据的完整性。 3. 发起HTTP请求:一旦建立了TCP连接浏览器服务器发起HTTP请求,请求包括请求方法、请求头、请求体等信息。请求方法可以是GET、POST等,服务器根据请求的不同做出相应的响应。 4. 服务器处理请求并响应:服务器接收到浏览器的请求后,根据请求的内容进行相应的处理。处理包括读取数据库、执行后端代码等操作。之后,服务器生成响应对象,包含响应状态码、响应头、响应体等信息。 5. 接收服务器响应:浏览器接收到服务器的响应后,根据响应头中的Content-Type确定响应的数据类型。如为HTML类型,则浏览器将响应的HTML代码解析成DOM树。 6. 解析页面并渲染:浏览器根据DOM树构建渲染树,并依据CSS样式对各元素进行布局和样式计算,最终生成页面的渲染结果。同浏览器执行页面中的JavaScript代码。 7. 页面展示:最后,浏览器将渲染好的页面内容显示在用户的视窗中,用户可以看到页面的展示效果。 总结起来,从输入URL到页面展示,经历了DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求并响应、接收服务器响应、解析页面并渲染等多个步骤。最终,浏览器将渲染好的页面内容显示给用户。 ### 回答3: 从输入URL到页面展示,大致经历如下步骤: 1. 域名解析:当我们在浏览器中输入URL后,首先进行域名解析。浏览器向DNS服务器发送域名请求,获取该域名对应的IP地址。 2. 建立连接浏览器通过获取到的IP地址与Web服务器建立TCP连接。这个过程使用的是三次握手协议,确保连接的可靠性。 3. 发送请求:建立连接后,浏览器发送HTTP请求给Web服务器,请求的内容包括请求的类型(GET/POST等)、地址、头部信息、可能还包括cookie等相关信息。 4. 服务器处理请求:Web服务器收到请求后,根据请求内容进行处理。处理过程可能包括调取数据库、运行后台程序等动作。 5. 服务器响应:Web服务器根据请求的内容,返回一个HTTP响应给浏览器。响应的内容包括状态码、响应头部、实际的网页内容等。 6. 下载页面资源:浏览器接收到服务器返回的响应后,开始下载网页的资源,如HTML、CSS、JavaScript、图片等。浏览器根据响应头部中的Content-Type确定如何解析资源。 7. 页面渲染:当所有的资源下载完成后,浏览器根据HTML结构、CSS样式,解析并渲染出网页。浏览器从上到下解析HTML文档,解析过程包括构建DOM树、计算CSS样式、布局页面等。 8. JavaScript执行:在渲染过程中,浏览器遇到JavaScript代码。浏览器逐行解析执行JavaScript代码,并根据代码修改DOM树和样式,可能还触发网络请求等。 9. 页面展示:当页面渲染和JavaScript执行完成后,页面便可以完整地展示给用户了。用户可以看到页面内容,与页面进行交互。 以上仅是一个大致的过程,实际上还有很多细节和额外的步骤,比如缓存机制、重定向、Cookie处理等等。不同的浏览器服务器也可能有些许差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值