网络协议01-Http

网络协议01-Http HTTP协议全面详解一、HTTP协议概述HTTP(HyperText Transfer Protocol超文本传输协议)是互联网上应用最广泛的应用层协议它定义了客户端与服务器之间如何交换数据是万维网(WWW)的核心基础协议。HTTP采用客户端-服务器架构和请求-响应模型客户端(通常是浏览器或移动应用)向服务器发送请求服务器处理请求并返回响应。它是一种无状态协议即服务器不会在多个请求之间保留任何客户端的状态信息。二、HTTP协议的起源与发展历史2.1 起源(1989-1991)1989年蒂姆·伯纳斯-李(Tim Berners-Lee)在欧洲核子研究组织(CERN)提出了万维网的构想旨在解决科学家之间信息共享的问题1990年开发出了第一个Web服务器、第一个Web浏览器和第一个HTML页面1991年发布HTTP/0.9这是HTTP的第一个版本极其简单仅支持GET方法没有请求头和响应头只能传输HTML文件服务器响应后立即关闭连接2.2 标准化与演进1996年HTTP/1.0(RFC 1945)正式发布引入了请求头和响应头状态码POST和HEAD方法支持多种媒体类型(图片、视频等)1997年HTTP/1.1(RFC 2068)发布这是使用最广泛的版本主要改进默认启用持久连接(Keep-Alive)支持管道化请求引入了更多方法(PUT、DELETE、OPTIONS等)支持分块传输编码引入了缓存控制机制2015年HTTP/2(RFC 7540)发布基于Google的SPDY协议革命性改进二进制分帧层多路复用(单个TCP连接上并发多个请求)头部压缩(HPACK)服务器推送流优先级2022年HTTP/3(RFC 9114)正式成为标准基于QUIC协议传输层从TCP改为UDPQUIC彻底解决队头阻塞问题0-RTT连接建立连接迁移(Wi-Fi切换到4G时保持连接)三、HTTP协议的核心特点与适用范围3.1 核心特点无状态性每个请求都是独立的服务器不保存客户端的状态信息客户端-服务器模型请求由客户端发起服务器被动响应灵活性支持传输任意类型的数据(通过Content-Type指定)可扩展性可以通过头部字段扩展新功能简单性HTTP/1.1是纯文本协议易于阅读和调试3.2 适用范围网页浏览最基本的应用传输HTML、CSS、JavaScript等资源API通信RESTful API、GraphQL等几乎所有现代API都基于HTTP移动应用手机App与后端服务器的通信物联网(IoT)设备与云平台之间的数据交换文件传输通过HTTP下载和上传文件流媒体视频和音频的流式传输四、HTTP工作原理HTTP通信过程可以概括为以下步骤建立TCP连接客户端与服务器通过三次握手建立TCP连接发送HTTP请求客户端向服务器发送请求报文服务器处理请求服务器解析请求处理业务逻辑返回HTTP响应服务器向客户端返回响应报文关闭或保持连接根据Connection头部决定是否关闭连接在HTTP/1.1中默认使用持久连接多个请求可以复用同一个TCP连接减少了连接建立的开销。五、HTTP请求报文详解(带完整样例分解)HTTP请求报文由请求行、请求头、空行和请求体四部分组成。5.1 完整请求报文样例POST /api/v1/users/login HTTP/1.1 Host: api.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Accept: application/json, text/plain, */* Accept-Language: zh-CN,zh;q0.9,en-US;q0.8,en;q0.7 Accept-Encoding: gzip, deflate, br Content-Type: application/json Content-Length: 48 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Connection: keep-alive {username:admin,password:supersecret123}5.2 逐行详细分解1. 请求行(第一行)POST /api/v1/users/login HTTP/1.1POST请求方法表示要执行的操作/api/v1/users/login请求URI指定要访问的资源HTTP/1.1协议版本2. 请求头(从第二行到空行之前)Host: api.example.com指定服务器的域名和端口号(默认80)是HTTP/1.1中唯一必须的头部User-Agent客户端的标识信息包括浏览器类型、操作系统等Accept客户端能够接受的响应内容类型Accept-Language客户端偏好的语言Accept-Encoding客户端支持的压缩算法Content-Type: application/json请求体的媒体类型Content-Length: 48请求体的长度(字节数)Authorization身份认证信息这里使用的是Bearer TokenConnection: keep-alive表示希望保持连接以便后续请求复用3. 空行由CRLF(回车换行)组成用于分隔请求头和请求体这是HTTP报文格式中非常重要的部分告诉服务器请求头已经结束4. 请求体{username:admin,password:supersecret123}包含要发送给服务器的数据只有POST、PUT、PATCH等方法才会有请求体GET方法通常没有请求体数据通过URL参数传递六、HTTP响应报文详解(带完整样例分解)HTTP响应报文由状态行、响应头、空行和响应体四部分组成。6.1 完整响应报文样例HTTP/1.1 200 OK Date: Thu, 21 May 2026 07:34:56 GMT Server: Apache/2.4.57 (Ubuntu) Content-Type: application/json Content-Length: 123 Connection: keep-alive Cache-Control: no-cache, no-store, must-revalidate Set-Cookie: session_idabc123def456; Path/; HttpOnly; Secure; Max-Age86400 {code:200,message:登录成功,data:{token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,expires_in:3600}}6.2 逐行详细分解1. 状态行(第一行)HTTP/1.1 200 OKHTTP/1.1协议版本200状态码表示请求成功OK状态码的文本描述2. 响应头(从第二行到空行之前)Date服务器生成响应的时间Server服务器软件信息Content-Type: application/json响应体的媒体类型Content-Length: 123响应体的长度(字节数)Connection: keep-alive表示连接将保持打开状态Cache-Control缓存控制指令这里表示不缓存响应Set-Cookie服务器设置的Cookie包含会话ID和安全属性3. 空行同样由CRLF组成分隔响应头和响应体4. 响应体{code:200,message:登录成功,data:{token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,expires_in:3600}}包含服务器返回的数据格式由Content-Type头部指定这里是JSON格式浏览器或客户端会根据Content-Type来解析和处理响应体七、HTTP方法详解HTTP定义了多种请求方法每种方法表示对资源的不同操作方法描述幂等性安全性有请求体GET获取资源是是否POST创建资源否否是PUT全量更新资源是否是PATCH部分更新资源否否是DELETE删除资源是否否HEAD获取资源的头部信息是是否OPTIONS获取服务器支持的方法是是否CONNECT建立隧道连接否否否TRACE追踪请求路径是是否幂等性多次执行相同的操作结果相同安全性操作不会修改服务器上的资源八、HTTP状态码详解HTTP状态码分为5大类由三位数字组成8.1 1xx 信息性状态码100 Continue客户端可以继续发送请求体101 Switching Protocols服务器同意切换协议8.2 2xx 成功状态码200 OK请求成功201 Created资源创建成功204 No Content请求成功但没有响应体206 Partial Content部分内容用于断点续传8.3 3xx 重定向状态码301 Moved Permanently永久重定向302 Found临时重定向304 Not Modified资源未修改使用缓存307 Temporary Redirect临时重定向(保持请求方法)308 Permanent Redirect永久重定向(保持请求方法)8.4 4xx 客户端错误状态码400 Bad Request请求语法错误401 Unauthorized未授权需要身份验证403 Forbidden服务器拒绝执行请求404 Not Found资源不存在405 Method Not Allowed请求方法不被允许408 Request Timeout请求超时409 Conflict资源冲突422 Unprocessable Entity请求格式正确但语义错误8.5 5xx 服务器错误状态码500 Internal Server Error服务器内部错误501 Not Implemented服务器不支持请求的功能502 Bad Gateway网关错误503 Service Unavailable服务不可用504 Gateway Timeout网关超时九、HTTP/1.1、HTTP/2和HTTP/3对比特性HTTP/1.1HTTP/2HTTP/3底层协议TCPTCPUDPQUIC数据格式文本二进制帧二进制帧多路复用不支持(管道化有限)支持支持队头阻塞存在TCP层存在基本解决头部压缩无HPACKQPACK服务器推送不支持支持有限支持连接迁移不支持不支持支持0-RTT建连不支持不支持支持加密可选推荐强制(TLS 1.3)采用率(2024)~35%~65%~30%且增长中十、HTTPS简介HTTPS(HTTP Secure)是HTTP的安全版本在HTTP和TCP之间加入了TLS/SSL层提供数据加密防止数据在传输过程中被窃听数据完整性防止数据在传输过程中被篡改身份认证验证服务器的真实身份HTTPS使用443端口而HTTP使用80端口。现在几乎所有的现代网站都使用HTTPS。十一、实际应用示例浏览器访问百度首页当你在浏览器地址栏输入www.baidu.com并按下回车时发生了以下HTTP通信请求报文GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Cache-Control: max-age0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q0.9,en-US;q0.8,en;q0.7 Cookie: BAIDUIDABC123DEF456; BIDUPSID789GHI012JKL; PSTM1716276896响应报文(简化版)HTTP/1.1 200 OK Date: Thu, 21 May 2026 07:35:00 GMT Server: BWS/1.1 Content-Type: text/html; charsetutf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private Expires: Thu, 21 May 2026 07:35:00 GMT Content-Encoding: gzip !DOCTYPE html html head meta charsetutf-8 title百度一下你就知道/title ... /head body ... /body /html浏览器接收到响应后会解析HTML文档然后发起更多的HTTP请求来获取CSS、JavaScript、图片等资源最终渲染出完整的页面。