zoukankan      html  css  js  c++  java
  • 一次完整的HTTP请求流程(当我们在浏览器输入一个URL后,发生了什么)

    首先是域名解析

    浏览器检查是否有缓存(游览器缓存-系统缓存-路由器缓存)。如果有,直接显示。如果没有,跳到第三步。
    在发送http请求前,需要域名解析(DNS解析),解析获取对应过的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请求

    客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)。

    客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕。

    服务器发送HTML响应

    服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK。

    服务器向客户端发送应答头信息。

    服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端。

    TCP连接的释放

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

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

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

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

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

  • 相关阅读:
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺
    第09组 Beta版本演示
    第09组 Beta冲刺(4/4)
    第09组 Beta冲刺(3/4)
    第09组 Beta冲刺(2/4)
    第09组 Beta冲刺(1/4)
    第09组 Alpha事后诸葛亮
    第09组 Alpha冲刺(4/4)
    第09组 Alpha冲刺(3/4)
  • 原文地址:https://www.cnblogs.com/yet-320/p/13540131.html
Copyright © 2011-2022 走看看