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

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

相关推荐
Bruce_Liuxiaowei1 小时前
权限维持:操作系统后门技术分析与防护
网络·安全·web安全
利刃大大3 小时前
【高并发服务器:HTTP应用】十六、HttpContext上下文模块 && HttpServer服务器模块&& 服务器测试
运维·服务器·http·高并发·项目
是专家不是砖家3 小时前
rk3562 udp发送带宽500Mbps出现丢包问题
网络·网络协议·udp·rk3562·udp丢包·t507
wanhengidc3 小时前
云手机通常使用什么架构
服务器·网络·安全·游戏·智能手机·云计算
在路上看风景4 小时前
5.1 路由选择算法
网络
xiaoxiongip6664 小时前
假设两个设备在不同网段,网关怎么设置才能通呢
网络·爬虫·python·https·智能路由器
Full Stack Developme4 小时前
java.net.http 包详解
java·http·.net
Li zlun5 小时前
TCP/IP协议:互联网的基石与通信灵魂
网络·网络协议·tcp/ip
SSL店小二5 小时前
IP SSL证书申请全过程及注意事项
服务器·网络·网络协议·https·ssl
NewCarRen6 小时前
自动驾驶与联网车辆网络安全:系统级威胁分析与韧性框架
网络·网络安全·自动驾驶