深刻理解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握手时间

相关推荐
生活很暖很治愈2 小时前
Linux——HTTP协议
linux·服务器·c++·网络协议·ubuntu·http
自在极意功。2 小时前
TCP三次握手与四次挥手
网络·网络协议·tcp/ip·计算机网络·三次握手·四次挥手
m0_738120723 小时前
应急响应——知攻善防挖矿事件应急溯源详细过程
网络·数据库·安全·web安全
西装没钱买3 小时前
QT组播的建立和使用(绑定特定的网卡,绑定特定IP)
网络·c++·qt·udp·udp组播
小江的记录本3 小时前
【HTTP】HTTP请求方法与状态码(全体系知识总结+附表格)
前端·网络·后端·网络协议·http·状态模式·web
是宇写的啊3 小时前
网络原理1
网络
幸福指北4 小时前
我用 Tauri + Vue 3 + Rust 开发了一款跨平台网络连接监控工具Portview,性能炸裂!
前端·网络·vue.js·tcp/ip·rust
萝卜白菜。4 小时前
http头键名大小写问题
网络·网络协议·http
爱凤的小光4 小时前
Wireshark长时间循环抓包操作说明
网络·测试工具·wireshark