zoukankan      html  css  js  c++  java
  • 当我们在浏览器中输入一个URL后,发生了什么?

    在输入网址后回车或者刷新页面的时候,渲染出页面,计算机和浏览器要做的:

    首先是域名解析:

    通过DNS(domain name system域名系统)获取IP地址,DNS查询步骤,其中一步成功则直接跳到建立连接部分:

    • 浏览器搜索自身的DNS缓存
    • 搜索操作系统自身的DNS缓存

    • 读取本地的HOST文件

    • 向域名服务器发送请求

    建立TCP连接(TCP三次握手):

    浏览器获得域名对应的IP地址后,建立TCP连接,TCP协议通过“三次握手”等方法保证传输的安全可靠:

    • 发送方:SYN(synchronize),客户端发送SYN包(SYN=j)到服务器

    • 接收方:SYN/ACK:在接收到客户端的syn包后,服务器也要发送一个SYN包给客户端,即SYN+ACK包,(确认信息传达)

    • 发送方:ACK:客户端收到SYN+ACK包后,向服务器发送ACK包(确认接收方在线可收消息,握手结束)

    • Accept:完成三次握手,客户端与服务器开始传送数据

    发送HTTP请求:

    TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。使用了比如HTTP的get方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。

    • 请求行(如:GET /index.html HTTP/1.0用来说明请求类型,要访问的资源以及所使用的HTTP版本.)

    • 请求头(用来说明服务器要使用的附加信息)

    • 空行(CR+LF)

    • 报文主体

    服务器发送HTML响应:

    服务器端接收到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器

    • 状态行(如:HTTP/1.1 200 OK,HTTP协议版本号、响应状态码、状态码信息)

    • 响应首部(用来说明客户端需要使用的一些附加信息)

    • 空行(CR+LF)

    • 报文主体(响应正文)

    浏览器解析HTML页面代码

    浏览器拿到了拿到了完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求,都需要经过上面的步骤

    浏览器渲染

    浏览器根据拿到的资源对页面进行渲染

    TCP连接的释放(四次挥手)

    数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。

    • 客户端:FIN:客户端进程发出连接释放报文,并且停止发送数据;

    • 服务器:ACK:服务器收到连接释放报文,发出确认报文;

    • 服务器:FIN+ACK:将最后的数据发送完毕后,就向客户端发送连接释放报文

    • 客户端:ACK:收到服务器的连接释放报文后,发出确认报文(服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接)

  • 相关阅读:
    C#使用xpath简单爬取网站的内容
    Python的安装以及编译器的安装
    解析二维码
    C#的历史及IDE总结
    我又回来了,这回是带着C++来的
    Python 基础知识
    template declarations(模板声明)中 class 和 typename 有什么不同?
    投影点坐标
    内存对齐代码解析
    互斥量和信号量的区别
  • 原文地址:https://www.cnblogs.com/3yleaves/p/9608505.html
Copyright © 2011-2022 走看看