深刻理解HTTP

文章目录

HTTP是什么?

HTTP叫超文本传输协议 ,本质是格式超级严格的"发货单/收获单"文本

底层的TCP/IP协议是货车和高速公路,只负责把字节流安全、有序地从 A 送到 B,当货车到底服务器时,怎么知道车里装的什么?是要入库?还是要退回?

HTTP协议就是货物上贴的标准化物流单

HTTP报文只分为两类:

1️⃣ 客户端发来的HTTP请求(Request)

  • 请求行: 要求服务器干嘛,格式:[方法][][url][][版本] []代表空格
  • 请求头: 请求的属性,格式:: 冒号加空格分割的键值对,每组键值对之间用\r\n分割,直到遇到空行,代表头结束
  • **空行: ** \r\n,表示属性写完了,下面就是真货
  • **正文: ** 实际给服务器的数据,如果正文body存在,请求头里会有Content-Length标识正文长度

2️⃣ 服务器发来的HTTP响应(Response)

  • **状态行: ** 客户端要求的事情办得咋样,格式[版本号][][状态码][状态码解释]
  • 响应头: ** 响应的属性,格式:: 冒号加空格分割的键值对,每组键值对之间用\r\n分割,直到遇到空行**,代表头结束
  • **空行: ** 分割线
  • **正文: ** 实际给客户端的数据,如果正文body存在,请求头里会有Content-Length标识正文长度,如果服务器返回一个html页面,那么html页面是在正文body里

HTTP 常见的状态码

  • 2xx:成功,报文已经收到并被正确处理
    • 200 OK
    • 204 No Content 请求成功,我没啥发给你的
  • 3xx:重定向,资源位置发生变动,需要客户端重新发送请求
    • 301 Mover Permanently 永久重定向,比如我的网站原先是Vect.com,现在换成了VVect.com
    • 302 Found 临时重定向,比如用户没登陆就访问一些界面,返回302让登录
  • 4xx:客户端错误,请求报文有问题,服务器无法处理
    • 400 Bad Request,报文语法错误,匹配不上
    • 403 Forbidden,权限不足
    • 404 Not Found,访问资源不存在
  • 5xx:服务器错误,服务器处理请求时内部发生错误
    • 500 Internal Server Error,服务器内部崩溃
    • 501 Not Implemented,客户端的请求功能还不支持
    • 502 Bad Gateway,网关错误,业务进程挂了或者网络不通畅
    • 503 Service Unavailable,服务器繁忙,暂时无法响应

HTTP常见的头部字段

  • Host 字段:客户端发送请求时,用来指定服务器的域名
    • Host: www.xxx.com
  • Content-Length 字段:表明正文的长度字节
    • Content-Length: 18
  • Content-Type 字段:表明正文的格式类型
    • Content-Type: text/html
  • Connection 字段:标识长短连接
    • keep-alive:长连接,告诉底层TCP别断开
    • close:短连接,告诉底层,传完这个报文就close(fd)
  • Cookie (客户端 -> 服务端): 浏览器每次发请求时,把本地存的身份 ID 带上
  • Set-Cookie (服务端 -> 客户端): 服务器在登录接口处理完后,告诉浏览器:"把这个 ID 记住,下次带过来!"

GET和HOST辨析

GET是动作,在最前面,决定了要对货物做什么

HOST是名词,藏在属性栏,决定了货物要送到哪

  • GET请求方法
    • GET在请求行里,标识客户端要获取什么资源
    • GET请求一般没有正文
  • HOST请求头字段
    • HOST在请求头中,标识客户端最后要访问的目标主机域名
    • 为啥得有HOST?
      • 假设一台服务器(IP为11.22.33.44)同时挂了10个不同的网站,不同的网站解析出来的IP都一样,而客户端数据包到达服务器后,通过HOST字段就可以知道客户端要去哪!

HTTP版本迭代

  • HTTP/1.0短连接时代

    客户端发起请求 -> 建立 TCP 连接(三次握手) -> 服务器返回数据 -> 断开 TCP 连接(四次挥手)

    连接开销极大,假设网页里有100张小图片,就饿得连接100次,断开100次

  • HTTP/1.1长连接时代

    客户端和服务器建立一次 TCP 连接后,这条公路保持畅通,后续的多个 HTTP 请求都在这一条公路上排队跑

    队头请求数据过大,容易造成对头阻塞,后续请求只能阻塞等待

  • HTTP/2.0多路复用时代

    把HTTP报文切成极其细小的二进制帧,并打上 Stream ID 编号。这样一来,同一个 TCP 连接里,可以同时并发无数个请求,到了服务器再根据编号拼装起来

  • HTTP/3.0

    • 底层采用UDP改造的QUIC协议

    • 减少三次握手和TLS握手时间

相关推荐
andxe10 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一11 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈12 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
水境传感 李兆栋12 小时前
GNSS 位移监测站 :毫米级感知,筑牢安全监测防线
网络
中微极客13 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
猿的天空17 小时前
机器人双手迎来全栈训练系统:灵初智能EgoSteer让灵巧手无所不能
网络·人工智能·计算机·ai·程序员·机器人·编程
Xzaveir_77717 小时前
OPPO、vivo、荣耀号码认证:多终端拨测矩阵与异常复现
大数据·网络·科技·矩阵·产品经理·ai-native
wuqingshun31415917 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
牛马工作号18 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
牛马工作号18 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器