当前位置: 首页 > news >正文

HTTP协议

1:HTTP概述

HTTP是客户端和服务端的规定,就是客户端发送的东西和浏览器回发的东西,两者都能看懂,规定的传输的内容

2:HTTP传输的过程

 一、建立连接阶段

1:DNS解析

浏览器解析URL中的域名(如www.example.com

2:TCP三次握手

第一次握手:客户端发送SYN=1, seq=x报文,请求建立连接。

第二次握手:服务器响应SYN=1, ACK=1, seq=y, ack=x+1报文。

第三次握手:客户端确认ACK=1, ack=y+1,双方进入ESTABLISHED状态 

作用:确保双工通信的可靠性,同步序列号并交换窗口大小

二、请求发送阶段

客户端构建HTTP请求报文并发送:

  1. 请求报文结构

    • 请求行:包含方法(GET/POST等)、URI(如/index.html)、HTTP版本(如HTTP/1.1) 
    • 请求头:关键字段如:
      • Host(目标域名)、User-Agent(客户端信息)、Content-Type(数据类型)、Content-Length(数据长度) 
    • 空行:分隔头部与正文。
    • 请求体:POST/PUT等方法携带的数据(如表单提交内容name=John&age=30) 
       
  2. 传输过程

    • 报文通过已建立的TCP连接发送至服务器端口(默认80) 

 三、服务器处理阶段

  1. 接收与解析请求

    • 服务器解析请求行和头部,确定资源路径、方法及参数。
    • 根据Content-TypeContent-Length处理请求体数据 
  2. 执行业务逻辑

    • 执行对应操作(如读取文件、查询数据库) 
       
    • 生成响应数据(如HTML页面、JSON结果) 

 四、响应返回阶段

服务器构建HTTP响应报文:

  1. 响应报文结构

    • 状态行:HTTP版本、状态码(如200 OK)、状态描述。
      • 状态码分类:
        • 2xx:成功(如200请求成功,204无内容)。
        • 3xx:重定向(如301永久重定向)。
        • 4xx:客户端错误(如404资源未找到)。
        • 5xx:服务器错误(如500内部错误) 
    • 响应头:关键字段如:
      • Content-Type(响应数据类型,如text/html)、Content-LengthServer(服务器类型) 
    • 空行:分隔头部与正文。
    • 响应体:返回的实际数据(如HTML代码、图片二进制流

五、浏览器解析与渲染

  1. 解析HTML

    • 浏览器解析响应体中的HTML,构建DOM树。
    • 遇到静态资源(CSS/JS/图片)时,复用TCP连接发起新请求(HTTP/1.1默认Connection: keep-alive) 
       
  2. 渲染页面

    • 结合CSS生成渲染树,布局后绘制到屏幕。
    • 执行JavaScript逻辑(可能阻塞渲染)

六、连接关闭

  1. TCP四次挥手(非持久连接时):
    • 第一次挥手:客户端发送FIN报文,进入FIN_WAIT_1状态。
    • 第二次挥手:服务器确认ACK,进入CLOSE_WAIT状态。
    • 第三次挥手:服务器发送FIN报文,进入LAST_ACK状态。
    • 第四次挥手:客户端确认ACK后等待2MSL(最大报文生存时间)后关闭 

3:请求协议(请求数据的格式)

4:响应协议(响应数据的格式)

5:HTTP协议的解析

我们用浏览器发送到服务器之后,服务器会进行代码处理,并返回

浏览器收到响应回来的数据之后会自动解析

http://www.lqws.cn/news/189091.html

相关文章:

  • 影楼精修-AI衣服祛褶皱算法解析
  • LLM Agent 如何颠覆股价预测的传统范式
  • PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式
  • 高效复用 Cursor 请求,提升开发效率 —— 使用 interactive-feedback-mcp 工具详解
  • 三维GIS开发cesium智慧地铁教程(4)城市白模加载与样式控制
  • Python 训练营打卡 Day 45
  • 【001】frida API分类 总览
  • css元素的after制作斜向的删除线
  • 飞云智能波段主图+多空短线决策副图指标,组合操盘技术图文解说
  • SpringCloud学习笔记-2
  • 【Elasticsearch】映射:Nested 类型
  • day46python打卡
  • 【Linux】虚拟机代理,自动化脚本修改~/.bashrc
  • vue3子组件获取并修改父组件的值
  • 【计算机网络】非阻塞IO——poll实现多路转接
  • 【佳易王个体诊所电子处方软件】助力智慧诊疗! #医疗数字化 #电子处方效率提升
  • 【 知你所想 】基于ernie-x1-turbo推理模型实现趣味猜心游戏
  • QT自定义资源管理器
  • 使用UDP连接ssh
  • maven私服
  • vanna+deepseek+chainlit 实现自然语言转SQL的精度调优
  • Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
  • MySQL 性能调优入门 - 慢查询分析与索引优化基础
  • 行业案例 | ASOS 借助 Azure AI Foundry(国际版)为年轻时尚爱好者打造惊喜体验
  • [electron]预脚本不显示内联script
  • AIGC 基础篇 Python基础 01
  • [特殊字符]解决 “IDEA 登录失败。不支持早于 14.0 的 GitLab 版本” 问题的几种方法
  • Halcon透视矩阵
  • 深入了解JavaScript当中如何确定值的类型
  • 经典文献阅读之--PIVOT-R(原始驱动的航点感知世界模型用于机器人操作)