在浏览器输入 URL 回车之后发生了什么?

在浏览器输入 URL 回车之后发生了什么事情?

  1. 解析url中的Scheme(https://),HTTPS 代表的是安全超文本传输协议(Hypertext Transfer Protocol Secure,这个scheme 会告诉浏览器连接服务器 用TLS(Transport Layer Security安全传输协议。
  2. 查询DNS,浏览器会先检查是否在缓存中,通过调用一个类似 gethostbyname 的库函数,此函数会先去检测本地 hosts 文件,查看是否有对应 ip没有则调用系统库函数进行查询,这里有一个点,localhost 默认 ip 是 127.0.0.1,这是一个回路段,也叫换回接口。也就是不会发往服务器,是直接在本地打开的。
  3. 如果浏览器和系统缓存都没有,系统的 gethostname 函数就会像 DNS 服务器发送请求。而网络服务一般都会先经过路由器以及网络服务商(电信),所以会先查询路由器缓存,然后再查询 ISP 的 DNS 缓存。
  4. 查询到对应的ip地址后,找到连接server的最短路径。
  5. 应用层发送http请求到server,在前面的步骤我们已经得到服务器的 IP 地址,浏览器会开始构造一个 HTTP 报文。

    报文包括:
    请求报头(Request Header):请求方法、目标地址、遵循的协议等等
    请求主体(其他参数)

    需要注意的点:浏览器只能发送 GET、POST 方法,而打开网页使用的是 GET 方法。

    传输层会发起一条到达服务器的 TCP 连接,为了方便传输,会对数据进行分割(以报文段为单位),并标记编号,方便服务器接受时能够准确地还原报文信息。

    在建立连接前,会先进行 TCP 三次握手。

    所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

    (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之间可以开始传输数据了。

  6.  浏览器接受响应,浏览器接收到来自服务器的响应资源后,会对资源进行分析。首先查看 Response header,根据不同状态码做不同的事,
    如果响应资源进行了压缩(比如 gzip),还需要进行解压。
    然后,对响应资源做缓存。
    接下来,根据响应资源里的 MIME 类型去解析响应内容(比如 HTML、Image各有不同的解析方式)。
  7. 装置dom数,渲染页面,不同的浏览器内核,渲染过程也不完全相同,但大致流程都差不多。

你可能感兴趣的:(计算机基础知识,网络,http,服务器)