HTTP基本概述

HTTP基本概述

报文格式

HTTP报文分为 请求报文响应报文

一、请求报文

复制代码
 请求行(Request Line)
 请求头部(Request Headers)
 (空行)
 请求体(Request Body)  ← 可选,如 POST 请求时携带的数据

示例:

复制代码
 GET /index.html HTTP/1.1
 Host: www.example.com
 User-Agent: Mozilla/5.0
 Accept: text/html
 ​

报文的最后是一个空白行结束,没有 body。

在很多时候,特别是浏览器发送 GET 请求的时候都是这样,HTTP 报文经常是只有 header 而没 body,相当于只发了一个超级"大头"过来,你可以想象的出来:每时每刻网络上都会有数不清的"大头儿子"在跑来跑去。

不过这个"大头"也不能太大,虽然 HTTP 协议对 header 的大小没有做限制,但各个 Web 服务器都不允许过大的请求头,因为头部太大可能会占用大量的服务器资源,影响运行效率。


说明:

  1. 请求行:

    • 格式:请求方法 请求URL HTTP版本

    • 示例:GET /index.html HTTP/1.1

  2. 请求头部:

    • 描述客户端环境和请求信息

    • 示例:Host: www.example.com User-Agent: Mozilla/5.0

  3. 空行:

    • 请求头与请求体之间有一个空行,用来分割
  4. 请求体:

    • 可选,一般用于 POSTPUT 等方法,包含提交的数据(如表单、JSON)

二、响应报文

复制代码
 状态行(Status Line)
 响应头部(Response Headers)
 (空行)
 响应体(Response Body) ← 可选,如 HTML 页面、图片等
 ​

示例:

复制代码
 HTTP/1.1 200 OK
 Date: Mon, 12 May 2025 10:00:00 GMT
 Content-Type: text/html; charset=UTF-8
 Content-Length: 137
 ​
 <html>
   <body>
     <h1>Hello, World!</h1>
   </body>
 </html>
 ​

说明:

  1. 状态行:

    • 格式:HTTP版本 状态码 状态描述

    • 示例:HTTP/1.1 200 OK

  2. 响应头部:

    • 描述服务器和响应内容信息

    • 示例:

      Content-Type: text/html; charset=UTF-8 Content-Length: 137

  3. 空行:

    • 头部与主体之间必须有一个空行,用来分割
  4. 响应体:

    • 服务器返回的实际内容,如 HTML 网页、图片、JSON 数据等

状态码

状态码 含义 常见的状态码
1XX 接收的请求正在处理 101、102
2XX 成功,报文已经收到并被正确处理 200、204
3XX 重定向,资源位置发生变动,需要客户端重新发送请求 301、302
4XX 客户端错误,服务器无法处理 400、403、404
5XX 服务器错误,服务器在处理请求时内部发生了错误 500、501、502

常用方法

一、分类

HTTP/1.1 规定了八种方法,单词都必须是大写的形式,我先简单地列把它们列出来,后面再详细讲解。

  1. GET:获取资源,可以理解为读取或者下载数据;

  2. HEAD:获取资源的元信息;

  3. POST:向资源提交数据,相当于写入或上传数据;

  4. PUT:类似 POST;

  5. DELETE:删除资源;

  6. CONNECT:建立特殊的连接隧道;

  7. OPTIONS:列出可对资源实行的方法;

  8. TRACE:追踪请求 - 响应的传输路径。

二、安全与幂等

  1. 安全:所谓的"安全 ",是指请求方法不会"破坏"服务器上的资源,即不会对服务器上的资源造成实质的修改。

按照这个定义,只有 GET 和 HEAD 方法是"安全"的,因为它们是"只读"操作,只要服务器不故意曲解请求方 法的处理方式,无论 GET 和 HEAD 操作多少次,服务器上的数据都是"安全的"。

而 POST/PUT/DELETE 操作会修改服务器上的资源,增加或删除数据,所以是"不安全"的。

  1. 幂等:所谓的"幂等 ",意思是多次执行相同 的操作,结果也都是相同的,即多次"幂"后结果"相等"。

    很显然,GET 和 HEAD 既是安全的也是幂等的,DELETE 可以多次删除同一个资源,效果都是"资源不存在",所以也是幂等的。


URI和URL

一、定义区别

概念 全称 含义
URI Uniform Resource Identifier(统一资源标识符) 可以唯一标识一个资源
URL Uniform Resource Locator(统一资源定位符) 一种具体的 URI,它不仅唯一标识资源,而且提供了定位该资源的信息

二、二者关系

  • URLURI子集

  • 所有 URL 都是 URI 的一种

但不是所有 URI 都是 URL(比如 URN)

简而言之:

URL 是 URI 的子集,URI 侧重于"标识",URL 侧重于"访问"


端口号:

HTTP默认端口号为:80

HTTPS默认端口号为:443

如果用户指定了端口,比如端口号:8080,则目标端口号为8080


连接

在 TCP 协议里,建立连接和关闭连接都是非常"昂贵"的操作。TCP 建立连接要有"三次握手" ,发送 3 个数据包,需要 1 个 RTT;关闭连接是"四次挥手",4 个数据包需要 2 个 RTT。

一、短连接

每次客户端与服务器通信时,都要新建一次连接,请求发送完毕后立即关闭连接。

也就是说,一次请求对应一次连接。

特点:

  • 每次通信都需要三次握手 + 四次挥手,开销较大

  • 实现简单,适合偶尔通信的场景

  • 典型代表是:HTTP/1.0

举例: 打开网页,每点击一次链接,就建立一次 TCP 连接,请求数据,拿到响应后就断开。


二、长连接

长连接是指建立一次连接后,可以发送多个请求和接收多个响应,期间保持连接不断开,直到空闲太久或手动断开。

特点:

  • 避免频繁建立/断开连接,性能更高

  • 节省网络资源和时间

  • 常用于:HTTP/1.1(默认支持长连接)、HTTP/2、数据库连接池等

举例: 打开一个网页,加载多个图片、样式、脚本等资源时,复用一个连接,减少延迟。


三、队头阻塞

"队头阻塞"与短连接和长连接无关,而是由 HTTP 基本的"请求 - 应答"模型所导致的。

因为 HTTP 规定报文必须是**"一发一收"** ,这就形成了一个先进先出的"串行"队列。队列里的请求没有轻重缓急的优先级,只有入队的先后顺序,排在最前面的请求被最优先处理。

如果队首的请求因为处理的太慢耽误了时间 ,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本。

相关推荐
一个天蝎座 白勺 程序猿26 分钟前
Python爬虫(37)Python爬虫深度实践:Splash渲染引擎与BrowserMob Proxy网络监控协同作战
网络·爬虫·python
爬点儿啥35 分钟前
[爬虫知识] IP代理
服务器·网络·爬虫·python·tcp/ip·代理
江畔柳前堤1 小时前
PyQt学习系列11-综合项目:多语言文件管理器
开发语言·网络·python·学习·django·pyqt
tmacfrank2 小时前
Android 网络全栈攻略(四)—— 从 OkHttp 拦截器来看 HTTP 协议一
android·网络·okhttp
supingemail2 小时前
深度剖析 MCP SDK 最新版:Streamable HTTP 模式
网络·网络协议·http
猎板PCB厚铜专家大族3 小时前
2025有铜半孔工艺参数设计规范
网络·算法·设计规范
领世达检测V133529092493 小时前
智能门锁为什么需要做欧盟网络安全 EN18031 标准检测认证
运维·服务器·网络
九州ip动态4 小时前
自媒体运营新利器:账号矩阵+指纹浏览器,解锁流量密码
网络·网络协议·tcp/ip
流星雨在线4 小时前
Chrome中http被强转成https问题
chrome·http·https
2401_876907524 小时前
IEC 60034-30-1标准解析:旋转电机能效分级与全球影响
网络·数据结构·经验分享·科技·学习方法