#HTTP
简介
HTTP就是Web上客户与服务器之间通信用的协议
( Hyper Text Transfer Protocol (超文本传输协议)的缩写)
浏览器与服务器的交互
浏览器作为HTTP客户端 通过 URL (地址)向 HTTP服务端 即 WEB服务器 发送所有请求
- 例如:你在浏览器输入网址 → 浏览器发送HTTP请求 → 服务器返回网页内容。
Http协议
HTTP是 TCP/IP的上层协议
TCP
负责确保从一个网络节点向另一个网络节点发送的文件能作为一个完整的文件到达目的地这个文件[尽管在传输的过程会分解为小块传输]
- 类似快递员确保包裹完整送到你家,即使分多个包裹运输。
IP
是一个底层协议 ,负责把数据块 (数据包) 沿路移动/路由到目的地
- 类似快递系统根据地址将包裹送到正确城市。
客户端发送给服务器的格式叫 "请求协议 " ;
服务器发送给客户端的格式叫 “响应协议” ;
浏览器中书写格式
![[Pasted image 20250225194103.png]]
组件 | 含义 |
---|---|
HTTP:// | 协议类型(HTTP/HTTPS),规定通信规则。 |
127.0.0.1 | 服务器IP地址(本机地址)。 |
:8080 | 服务器端口(Tomcat默认端口)。 |
/myweb/ | Web应用的上下文路径(类似网站根目录)。 |
serverlet01 | 具体资源(如Servlet名称或JSP页面)。 |
?name=zhangsan | 查询参数,向服务器传递数据(键值对形式)。 |
Http协议的特点
1.支持客户/服务器模式
2.简单快速
一次请求对应一次响应,无需复杂交互
客户向服务器请求服务时,只需要传送请求方法和路径 .常见的方法有GET和POST [每种方法规定了客户与服务器的类型不同]
由于规模小(数据包小) , 因此通信速度快
3.灵活
** 允许传输任意类型的数据对象**:通过 Content-Type
头部标识(如 JSON/XML/HTML)
4.无连接
每次连接只处理一个请求,服务器处理完客户的请求,并收到客户 的应答后,即立刻断开连接
网络日志示例:
(TCP Connect) → GET image1.jpg → (TCP Close)
(TCP Connect) → GET image2.jpg → (TCP Close)
…(重复 10 次)
HTTP1.1后版本支持可连续连接
每次请求独立:TCP 连接建立后立即传输数据并关闭
网络日志示例:
(TCP Connect) → GET image1.jpg
GET image2.jpg
(无需等待响应)
GET image3.jpg
…
Response1
Response2
…
(TCP Close
特性 | 无连接(HTTP/1.0 默认) | HTTP/1.1 持续连接 |
---|---|---|
TCP 连接次数 | 每个请求新建连接 | 多个请求复用一个连接 |
握手开销 | 高(频繁三次握手) | 低(仅需一次握手) |
流水线支持 | 不支持 | 支持(请求无需等待响应) |
适用场景 | 少量请求、简单服务 | Web 页面、API 高频交互 |
资源占用 | 服务器资源消耗高 | 服务器资源占用低 |
5.无状态
HTTP协议是无状态协议 . 无状态是指事务处理没有记忆能力 .(每个 HTTP 请求都是独立的操作,服务器不记录客户端的历史行为或状态信息)
缺少意味这后续如何过必须处理前面的信息,必须要重传
场景 | 无状态问题 |
---|---|
用户登录后访问个人页面 | 服务器无法自动识别用户身份,需客户端每次请求携带认证信息(如 Cookie/Token)。 |
购物车功能 | 服务器不知道用户已添加的商品,需客户端在每次请求中传递购物车数据。 |
Http的请求
请求流(客户端 → 服务器)

- HTTP方法:
- GET: 获取资源(例如加载网页)
- POST:提交数据(例如登录表单)
- URL:
请求的目标地址(例如
https://example.com/login
)
- 参数:
?id=123
(URL参数,用于 GET 请求)- 用户名/密码(表单参数,用于 POST 请求)
http请求由三部分组成 分别是请求头 ,请求行 ,请求正文
GET请求
![[Pasted image 20250226232442.png]]
Host:域名
Connection:
user-Agent:当前浏览器版本
Accept:接受的类型
post请求
格式
请求行
请求头1
请求头2
...
请求空行
请求体
响应流(服务器 → 客户端)
- 状态码:表示请求结果,例如:
- 200 OK`:成功。
404 Not Found
:请求的资源不存在。500 Internal Server Error
:服务器内部错误。
- 内容类型(Content-Type):
- 告诉客户端响应数据的格式,如
text/html
(网页)、image/png
(图片)。
- 告诉客户端响应数据的格式,如
- 内容(Content):
- 实际返回的数据(如HTML代码、图片二进制数据)。
http响应分为响应头 响应行 响应正文(浏览器看到的)
格式
状态行 //协议版本 状态码 状态码的说明
响应头1
响应头2
Content-Type 响应类型
Date 日期
Set-Cookie: Cookie缓存
消息头
请求头
referer:该请求指明请求从那来[表示当前请求的来源页面 URL(用于统计或防盗链)。]
- 来源追踪
记录用户是从哪个页面跳转过来的
GET /download/file.pdf HTTP/1.1
Host: example.com
Referer: https://example.com/docs/
- 防盗链(Hotlink Protection)
防止其他网站直接引用你的资源(如图片、文件)。例如,仅允许来自自己域名的请求访问资源。 - 统计分析
分析流量来源(如搜索引擎、广告链接、社交媒体)。 - 安全验证
结合 CSRF(跨站请求伪造)防护,验证请求是否来自可信页面
响应头
常见响应头及作用
响应头名称 | 作用描述 | 示例值 |
---|---|---|
**Content-Type ** | 定义响应体的数据格式(客户端根据此头解析数据)。 | application/json 、text/html; charset=utf-8 |
**Cache-Control ** | 控制客户端和代理的缓存行为(如缓存时间、是否允许缓存)。 | max-age=3600 、no-cache |
**Set-Cookie ** | 向客户端设置 Cookie(用于会话管理、身份验证)。 | sessionId=abc123; Path=/; Secure |
**Access-Control-Allow-Origin ** | 指定允许跨域请求的源(CORS 关键头)。 | * 或 https://your-site.com |
**Content-Length ** | 响应体的字节长度(用于客户端判断数据完整性)。 | 1024 |
**Content-Encoding ** | 响应体使用的压缩编码(如 gzip)。 | gzip |
**Server ** | 标识服务器软件信息(如 Apache、Nginx)。 | Nginx/1.18.0 |
**X-Content-Type-Options ** | 禁止浏览器猜测内容类型(防止 MIME 类型攻击)。 | nosniff |
**Strict-Transport-Security ** | 强制客户端使用 HTTPS 连接(HSTS 策略)。 | max-age=31536000; includeSubDomains |
Location
-
重定向
当服务器返回3xx
状态码(如 301、302、307)时,Location
头指定客户端应跳转的目标 URL。 -
标识新资源
当服务器返回201 Created
(资源创建成功)时,Location
头指向新创建资源的 URL(如新用户信息的详情页)。
refersh
-
自动刷新当前页面
在指定时间后刷新当前页面(常用于实时数据更新,如股票行情)。 -
重定向到其他页面
在指定时间后跳转到新的 URL(类似3xx
重定向,但由浏览器直接处理)。
<!-- 5 秒后刷新当前页面 -->
<meta http-equiv="Refresh" content="5">
<!-- 3 秒后跳转到新页面 -->
<meta http-equiv="Refresh" content="3; url=https://example.com/new-page">
HTTP之URL
http是一个基于请求和响应模式的,应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用
URL 的核心作用
- 定义:统一资源定位符,用于在互联网上唯一标识和访问资源。
- 本质:一个字符串,告诉服务器「如何找到并处理请求的资源」。
- 示例:
https://www.example.com/api/v1/users/123?sort=name&order=asc#profile
一个完整的 URL 通常包含以下部分
以 http://example.com/path
为例):
( http://IP(主机/域名):端口/访问的资源路径 )
组成部分 | 说明 | 示例值 |
---|---|---|
协议(Scheme) | 通信协议类型(如 HTTP/HTTPS/FTP)用来定位网络资源 | https |
域名(Domain) | 服务器的地址标识(由 IP 地址或域名解析而来)。 | www.example.com |
端口(Port) | 服务器监听的网络端口(可选,默认 HTTP=80,HTTPS=443)。 | :8080 |
路径(Path) | 资源在服务器上的具体位置(虚拟目录或文件路径)。 | /api/v1/users |
查询参数(Query) | 附加参数,以 ? 开头,键值对形式传递给服务器。 | ?sort=name&order=asc |
锚点(Fragment) | 页面内的定位标识,客户端跳转至指定位置(服务器不处理)。 | #profile |
1. 协议(Scheme)
- 作用:定义客户端与服务器之间使用的通信协议。
- 常见协议:
http
:非加密的超文本传输协议。https
:加密的 HTTP(TLS/SSL 加密)。file
:访问本地文件系统。ftp
:文件传输协议。
2. 域名(Domain)
- 组成:由子域名、域名主体和顶级域名(TLD)构成。
- 解析过程:通过 DNS 服务器将域名转换为服务器的 IP 地址。
- 示例:
www.example.co.uk
→ 解析为 IP 地址192.0.2.1
。
3. 端口(Port)
- 作用:标识服务器上运行的具体服务进程。
- 默认端口:
- HTTP:
80
- HTTPS:
443
- HTTP:
- 显式指定端口:非默认端口需显式声明(如
http://localhost:3000
)。
4. 路径(Path)
- 作用:标识服务器上的资源位置。
- 特点:
- 层级结构:用
/
分隔目录层级(如/images/logo.png
)。 - 动态路径:可包含变量(如
/users/{id}
,需服务器解析)。
- 层级结构:用
5. 查询参数(Query Parameters)
-
语法:
key=value
对,多个参数用&
连接。 -
用途:
- 传递过滤条件(如搜索关键词)。
- 控制页面
(如空格转为
%20
)。
6. 锚点(Fragment)
- 作用:标识 HTML 页面内的特定位置(如章节标题)。
- 特点:
- 仅客户端处理,服务器不接收锚点内容。
- 常用于单页应用(SPA)的路由导航。
URL 示例与解析
示例 1:基础 URL
text
http://example.com/about
- 协议:
http
- 域名:
example.com
- 路径:
/about
示例 2:带查询参数的 API 请求
text
https://api.github.com/repos/user/repo/issues?state=open&sort=created
- 协议:
https
- 域名:
api.github.com
- 路径:
/repos/user/repo/issues
- 查询参数:
state
:open
(筛选打开的问题)sort
:created
(按创建时间排序)#
TCP
tcp端口是一个16位的数,用来标识服务器硬件上的特定的软件程序
![[Pasted image 20250227105909.png]]