B/S架构发送请求访问服务器详细流程
详细描述一下bs架构的访问流程:
浏览器(web browser):浏览器的主要组件包括用户界面、浏览器引擎、渲染引擎、网络、UI后端、JS解释器、数据存储。 是一种用于检索并展示万维网信息资源的应用程序。这些信息资源可为HTML 页面、XML 文档、图像、多媒体文件等等其他内容,它们由统一资源标志符URI标志。URI 包括统一资源名称 (URN) 和统一资源定位器 (URL),URI是在Internet上定位资源的常规方案,它的着重点在于资源(resource),而不是位置(location)。至于浏览器的各个组件是怎么工作的,这里就不作说明了。
服务器:我以前是单纯的理解为服务器就是一台独立的计算机,其实还可以更详细的划分为WEB服务器和应用服务器。WEB服务器比如Apache、IIS、Nginx(也是反向代理服务器),应用服务器比如Tomcat、Weblogic、Jboss。但我们更习惯的把这台计算机成为WEB服务器,也就是整个网站的服务器。
当用户输入请求地址后,浏览器会进行域名解析:
1.浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。
2.如果浏览器中没有缓存,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。Windows系统默认hosts文件位置"C:\Windows\System32\drivers\etc\hosts",linux系统为/etc/named.conf。
windows查看dns服务器地址--在cmd.exe中输入 ipconfig/all 命令即可,如下图:
linux下查看DNS服务器地址--输入 cat /etc/resolv.conf 命令即可,如下图:
当然查看的方法都有很多种啦。
3.如果浏览器和操作系统都没有缓存这个域名,操作系统会把这个域名发送给你当前网络接入区域的DNS服务器。
4.如果当前区域的DNS服务器还是没有找到这个域名,那么会直接访问根域名服务器(Root Server)请求解析。
5.根域名服务器返回给当前区域域名服务器一个所查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。
6.当前区域域名服务器再访问gTLD服务器。
7.gTLD服务器接受请求并查找返回你注册域名时提供商(Name Server)的服务器地址。
8.Name Server域名服务器会查询存储的域名和IP的映射关系表,连同一个TTL值(该字段指定IP包被路由器丢弃之前允许通过的最大网段数量)返回给DNS Server域名服务器。
9.返回该域名对应的IP和TTL值,当前区域DNS服务器会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。
10.最后把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,最终域名解析过程结束。
说了这么多,如果你不用域名访问,直接用ip地址访问的话就没有这些操作了,但是ip地址属实是不方便记忆。
TCP三次握手,建立连接:
1.第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
2.第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
3.第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
使用HTTP向服务器发送请求:
1.浏览器连接到web服务器后,根据http规范,产生请求数据包,发送请求的过程中,浏览器会向Web服务器以Stream(流)的形式传输数据,告诉Web服务器要访问服务器里面的哪个Web应用下的Web资源。
2.服务器接收到浏览器传输的数据后,开始解析接收到的数据,并对请求进行处理(怎么处理就是程序逻辑)生成web资源,处理结束将资源再以Stream(流)的形式响应给浏览器。
3.浏览器接受到服务器给响应的数据之后,经过解析处理,最终展示给用户。