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连接)

  • 相关阅读:
    前端面试常考知识点---CSS
    vue中的适配:px2rem
    判断DOM元素是否出现再浏览器窗口中
    前端构建:3类13种热门工具的选型参考
    webpack4 中的最新 React全家桶实战使用配置指南!
    [C++] 自动关闭右下角弹窗
    Java RandomAccessFile用法(转载)
    Java Annotation详解(二): 反射和Annotation
    Java Annotation详解(一): 理解和使用Annotation
    Java反射机制(五):使用反射增强简单工厂设计模式
  • 原文地址:https://www.cnblogs.com/yet-320/p/13540131.html
Copyright © 2011-2022 走看看