HTTP协议

HTTP协议超详细学习笔记:从基础到实战

一、HTTP协议概述

1.1 基本定义

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是互联网上应用最为广泛的网络协议之一。它基于TCP/IP通信协议来传递数据(HTML文件、图片、查询结果等)。

1.2 核心特点

  • 无状态:服务器不保存任何客户端的状态信息,每次请求都是独立的
  • 无连接:HTTP/1.1之前每次请求都需要建立一个TCP连接,请求完成后立即断开
  • 基于请求-响应模型:客户端发送请求,服务器返回响应
  • 可扩展:通过头部字段可以扩展各种功能
  • 明文传输:HTTP本身不加密,数据在网络上以明文形式传输

1.3 版本演进

版本 发布时间 主要改进
HTTP/0.9 1991年 仅支持GET方法,只能传输HTML文本
HTTP/1.0 1996年 支持POST、HEAD等方法,引入状态码和头部
HTTP/1.1 1999年 持久连接、管道化、分块传输、缓存机制
HTTP/2 2015年 二进制帧、多路复用、头部压缩、服务器推送
HTTP/3 2022年 基于QUIC协议,解决队头阻塞问题

二、HTTP请求结构

HTTP请求由请求行请求头空行请求体四部分组成。

2.1 请求行

请求行包含三个部分:请求方法、请求URI和HTTP版本,格式如下:

复制代码
Method Request-URI HTTP-Version

示例:

复制代码
GET /index.html HTTP/1.1
POST /api/user/login HTTP/1.1

2.2 请求头

请求头包含客户端向服务器传递的附加信息,由多个键值对组成,每行一个。常用请求头:

头部字段 说明
Host 请求的主机名和端口号
User-Agent 客户端浏览器信息
Accept 客户端能接收的媒体类型
Accept-Encoding 客户端支持的编码方式(gzip、deflate等)
Accept-Language 客户端支持的语言
Connection 连接管理(keep-alive表示持久连接)
Cookie 客户端存储的Cookie信息
Referer 请求的来源页面
Content-Type 请求体的媒体类型
Content-Length 请求体的长度

2.3 空行

请求头和请求体之间必须有一个空行,用于分隔头部和内容。

2.4 请求体

请求体包含要发送给服务器的数据,GET请求通常没有请求体,POST、PUT等请求有请求体。常见的请求体格式:

  • application/x-www-form-urlencoded:表单数据
  • application/json:JSON数据
  • multipart/form-data:文件上传
  • text/plain:纯文本

三、HTTP响应结构

HTTP响应由状态行响应头空行响应体四部分组成。

3.1 状态行

状态行包含三个部分:HTTP版本、状态码和状态描述,格式如下:

复制代码
HTTP-Version Status-Code Reason-Phrase

示例:

复制代码
HTTP/1.1 200 OK
HTTP/1.1 404 Not Found

3.2 响应头

响应头包含服务器向客户端传递的附加信息,常用响应头:

头部字段 说明
Server 服务器软件信息
Content-Type 响应体的媒体类型
Content-Length 响应体的长度
Content-Encoding 响应体的编码方式
Set-Cookie 服务器设置Cookie
Cache-Control 缓存控制
Expires 缓存过期时间
Last-Modified 资源最后修改时间
ETag 资源的唯一标识
Location 重定向目标URL

3.3 空行

响应头和响应体之间必须有一个空行。

3.4 响应体

响应体包含服务器返回给客户端的数据,如HTML页面、JSON数据、图片等。

四、常用HTTP状态码详解

HTTP状态码分为5大类,由三位数字组成,第一个数字定义了状态码的类别:

4.1 1xx:信息性状态码

表示服务器已接收请求,正在处理。

  • 100 Continue:继续,客户端应继续发送请求
  • 101 Switching Protocols:切换协议,服务器将切换到客户端请求的协议

4.2 2xx:成功状态码

表示请求已成功被服务器接收、理解和处理。

  • 200 OK:请求成功,服务器返回了请求的资源
  • 201 Created:资源创建成功,通常用于POST请求
  • 204 No Content:请求成功,但没有返回任何内容
  • 206 Partial Content:部分内容,用于断点续传或分块下载

4.3 3xx:重定向状态码

表示需要客户端进一步操作才能完成请求。

  • 301 Moved Permanently:永久重定向,资源已永久移动到新URL
  • 302 Found:临时重定向,资源临时移动到新URL
  • 304 Not Modified:未修改,资源未发生变化,客户端可以使用缓存
  • 307 Temporary Redirect:临时重定向,与302类似,但不允许改变请求方法
  • 308 Permanent Redirect:永久重定向,与301类似,但不允许改变请求方法

4.4 4xx:客户端错误状态码

表示客户端发送的请求有错误,服务器无法处理。

  • 400 Bad Request:请求语法错误,服务器无法理解
  • 401 Unauthorized:未授权,需要身份验证
  • 403 Forbidden:禁止访问,服务器拒绝请求
  • 404 Not Found:资源未找到,服务器找不到请求的资源
  • 405 Method Not Allowed:方法不允许,请求方法不被服务器支持
  • 408 Request Timeout:请求超时,服务器等待请求时间过长
  • 409 Conflict:冲突,请求与服务器当前状态冲突
  • 413 Payload Too Large:请求体过大,服务器无法处理
  • 415 Unsupported Media Type:不支持的媒体类型,请求体格式不被支持
  • 429 Too Many Requests:请求过多,客户端请求频率超过服务器限制

4.5 5xx:服务器错误状态码

表示服务器在处理请求时发生了错误。

  • 500 Internal Server Error:服务器内部错误,服务器遇到了意外情况
  • 501 Not Implemented:未实现,服务器不支持请求的功能
  • 502 Bad Gateway:网关错误,网关或代理服务器收到了无效的响应
  • 503 Service Unavailable:服务不可用,服务器暂时无法处理请求
  • 504 Gateway Timeout:网关超时,网关或代理服务器等待响应超时
  • 505 HTTP Version Not Supported:不支持的HTTP版本

五、HTTP请求方法

HTTP定义了多种请求方法,用于指定对资源的操作类型:

方法 说明 幂等性 安全性
GET 获取资源
HEAD 获取资源的头部信息
POST 提交数据,创建资源
PUT 更新资源
DELETE 删除资源
PATCH 部分更新资源
OPTIONS 获取服务器支持的方法
CONNECT 建立隧道连接
TRACE 追踪请求路径

幂等性 :多次执行相同的操作,结果相同。
安全性:操作不会修改服务器上的资源。

六、Cookie与Session详解

由于HTTP是无状态协议,服务器无法识别不同的客户端,因此需要Cookie和Session来保持会话状态。

Cookie是服务器发送给客户端并存储在客户端的一小段数据,客户端下次请求时会自动携带该数据。

工作原理
  1. 客户端第一次请求服务器
  2. 服务器生成Cookie,通过Set-Cookie响应头发送给客户端
  3. 客户端将Cookie保存到本地
  4. 客户端后续请求时,自动在Cookie请求头中携带该Cookie
  5. 服务器通过Cookie识别客户端身份
Cookie属性
  • Name:Cookie的名称
  • Value:Cookie的值
  • Domain:Cookie所属的域名
  • Path:Cookie生效的路径
  • Expires/Max-Age:Cookie的过期时间
  • Secure:仅在HTTPS连接中发送
  • HttpOnly:禁止JavaScript访问,防止XSS攻击
  • SameSite:防止CSRF攻击,可选值:Strict、Lax、None
Cookie的限制
  • 每个域名下的Cookie数量有限制(通常为50个)
  • 每个Cookie的大小限制为4KB左右
  • 存储在客户端,安全性较低

6.2 Session

Session是服务器端存储的用户会话信息,每个Session有一个唯一的Session ID。

工作原理
  1. 客户端第一次请求服务器
  2. 服务器创建Session,生成唯一的Session ID
  3. 服务器将Session ID通过Cookie发送给客户端
  4. 客户端后续请求时,携带包含Session ID的Cookie
  5. 服务器根据Session ID找到对应的Session,识别客户端身份
Session与Cookie的区别
特性 Cookie Session
存储位置 客户端 服务器端
安全性 较低,容易被窃取和篡改 较高
存储容量 4KB左右 无限制(取决于服务器内存)
生命周期 可设置长期有效 通常较短,会话结束或超时失效
服务器压力 较大,大量用户同时在线时会消耗服务器资源
Session的实现方式
  • 基于Cookie:最常用的方式,将Session ID存储在Cookie中
  • URL重写:将Session ID附加在URL后面,适用于禁用Cookie的情况
  • 隐藏表单字段:将Session ID放在表单的隐藏字段中提交

七、HTTP缓存机制

HTTP缓存是提高网站性能的重要手段,可以减少网络传输和服务器负载。

7.1 缓存分类

  • 强缓存:直接从本地缓存中获取资源,不向服务器发送请求
  • 协商缓存:向服务器发送请求,由服务器判断是否使用缓存

7.2 强缓存

强缓存通过以下响应头控制:

  • Expires:绝对过期时间,格式为GMT时间
  • Cache-Control:相对过期时间,优先级高于Expires

Cache-Control常用值:

  • max-age=3600:缓存有效期为3600秒
  • no-cache:不使用强缓存,需要进行协商缓存
  • no-store:不使用任何缓存
  • public:可以被任何缓存(包括代理服务器)缓存
  • private:只能被客户端浏览器缓存

7.3 协商缓存

协商缓存通过以下响应头控制:

  • Last-Modified/If-Modified-Since:基于资源最后修改时间
  • ETag/If-None-Match:基于资源的唯一标识,优先级高于Last-Modified
工作流程
  1. 客户端第一次请求资源,服务器返回资源和Last-Modified/ETag
  2. 客户端将资源和响应头缓存到本地
  3. 客户端再次请求资源时,发送If-Modified-Since/If-None-Match请求头
  4. 服务器比较资源的最后修改时间或ETag
  5. 如果资源未变化,返回304 Not Modified,客户端使用缓存
  6. 如果资源已变化,返回200 OK和新的资源

八、HTTPS简介

HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,在HTTP和TCP之间加入了SSL/TLS层,对数据进行加密传输。

8.1 HTTPS工作原理

  1. 客户端向服务器发送HTTPS请求,建立TCP连接
  2. 服务器返回数字证书,包含公钥和证书信息
  3. 客户端验证证书的合法性
  4. 客户端生成随机的对称密钥,用服务器的公钥加密后发送给服务器
  5. 服务器用私钥解密得到对称密钥
  6. 双方使用对称密钥进行加密通信

8.2 HTTPS的优点

  • 数据加密:防止数据在传输过程中被窃取
  • 数据完整性:防止数据在传输过程中被篡改
  • 身份认证:验证服务器的身份,防止钓鱼网站

8.3 HTTPS的缺点

  • 性能开销:加密和解密需要消耗CPU资源
  • 证书成本:需要购买和维护数字证书
  • 握手延迟:SSL/TLS握手需要额外的网络往返

九、HTTP/1.1 vs HTTP/2 vs HTTP/3

9.1 HTTP/1.1的问题

  • 队头阻塞:同一TCP连接中,前一个请求未完成,后面的请求会被阻塞
  • 头部冗余:每次请求都携带大量重复的头部信息
  • 明文传输:安全性差
  • 不支持服务器推送:服务器无法主动向客户端推送资源

9.2 HTTP/2的改进

  • 二进制帧:将请求和响应分割成二进制帧,提高传输效率
  • 多路复用:同一TCP连接中可以同时传输多个请求和响应,解决队头阻塞问题
  • 头部压缩:使用HPACK算法压缩头部,减少传输量
  • 服务器推送:服务器可以主动向客户端推送资源
  • 流优先级:可以设置请求的优先级,优先传输重要资源

9.3 HTTP/3的改进

  • 基于QUIC协议:使用UDP协议,解决TCP的队头阻塞问题
  • 0-RTT握手:减少连接建立时间
  • 连接迁移:客户端网络切换时,连接不会中断
  • 内置TLS 1.3:默认加密,提高安全性

十、常见HTTP安全问题

  • XSS(跨站脚本攻击):攻击者在网页中注入恶意脚本,窃取用户信息
  • CSRF(跨站请求伪造):攻击者利用用户已登录的身份,执行未授权的操作
  • SQL注入:攻击者在请求中注入SQL语句,获取或修改数据库数据
  • 中间人攻击:攻击者在客户端和服务器之间拦截和篡改数据
  • 点击劫持:攻击者将目标网站隐藏在透明层中,诱导用户点击

十一、总结

HTTP协议是互联网的基础,理解HTTP协议对于Web开发至关重要。本文详细介绍了HTTP协议的基本概念、请求响应结构、状态码、请求方法、Cookie与Session、缓存机制、HTTPS以及不同版本的HTTP协议。掌握这些知识可以帮助我们更好地开发和调试Web应用,提高应用的性能和安全性。

相关推荐
暴力求解1 小时前
Linux--网络-->UDP_socket
linux·网络·网络协议·udp·操作系统
難釋懷1 小时前
Redis网络模型-单线程和多线程网络模型变更
网络·redis·git
顶点多余1 小时前
传输层协议TCP详解----下
网络·网络协议·tcp/ip
哼?~1 小时前
数据链路层
网络
想唱rap1 小时前
NAT、内网穿透、代理服务
java·linux·网络·网络协议·udp·智能路由器
H Journey2 小时前
TCP三次握手
网络协议·tcp/ip·三次握手
liulilittle2 小时前
TCP BBR调优及监控
linux·网络·网络协议·tcp/ip·win
程思扬2 小时前
Android 悬浮窗状态错乱终极解决方案:告别 onResume
android·网络
凯瑟琳.奥古斯特2 小时前
IP组播跨子网传输核心技术解析
java·开发语言·网络·网络协议·职场和发展