HTTP 请求“报头”——Referer 和 Cookie
HTTP请求报头是客户端向服务器发送HTTP请求时携带的额外信息。它们用于提供关于请求的上下文、客户端的特性、认证信息等。常见的HTTP请求头包括 User-Agent
、Accept
、Content-Type
、Authorization
等,其中 Referer
和 Cookie
是两个非常常见且重要的请求头。
本文将详细介绍这两个请求头的功能,并提供相应的代码示例。
1. Referer 请求头
功能:
Referer
(注意拼写有误,实际为“Referrer”)是HTTP请求报头中的一项,用来表示当前请求是从哪个页面跳转过来的。它可以帮助服务器识别请求的来源页面,并可用于日志记录、分析流量来源、页面访问统计等。
格式:
Referer: <URL>
Referer
头部通常包含发起请求的页面的完整URL(例如:https://www.example.com
)。
举例:
当用户从页面A点击链接跳转到页面B时,页面B的HTTP请求会携带来自页面A的Referer
信息。
常见用途:
- 防止CSRF攻击:服务器可以根据
Referer
头验证请求来源,防止跨站请求伪造(CSRF)攻击。 - 日志分析与流量追踪:网站可以通过
Referer
分析流量来源,了解哪些外部页面或广告带来了流量。 - 内容定向与个性化:根据
Referer
字段判断用户是否通过某个推广链接、广告或推荐页面访问,进而定向展示不同的内容。
代码示例:
假设你正在编写一个简单的Python客户端,发送一个HTTP请求并包含Referer
头:
import requests
url = "https://www.target-website.com"
headers = {
"Referer": "https://www.source-website.com/pageA"
}
response = requests.get(url, headers=headers)
print(response.status_code)
在上面的例子中,当你向目标网站 (https://www.target-website.com
) 发起请求时,Referer
头部会告知目标网站,用户是从 https://www.source-website.com/pageA
页面过来的。
2. Cookie 请求头
功能:
Cookie
请求头携带客户端存储的cookie信息,服务器可以通过这些信息识别用户、维持会话状态、执行个性化操作等。Cookie是由服务器发送给浏览器并存储在浏览器中的一小块数据,浏览器在后续的请求中会自动带上这些cookie。
格式:
Cookie: <name1>=<value1>; <name2>=<value2>; ...
每个cookie是由一个name
和value
组成,多个cookie之间用分号分隔。
常见用途:
- 会话管理:通过
Set-Cookie
头,服务器可以设置一个会话cookie来识别用户并维持会话。 - 个性化:存储用户偏好、语言设置等信息。
- 身份认证:通过cookie存储身份验证信息,确保用户在多个页面之间无缝切换。
代码示例:
下面是一个简单的例子,展示如何使用Python的requests
库来发送携带Cookie
的HTTP请求:
import requests
url = "https://www.example.com/dashboard"
headers = {
"Cookie": "sessionid=abc123; user=JohnDoe; lang=en"
}
response = requests.get(url, headers=headers)
print(response.text)
在这个例子中,客户端发送一个HTTP请求到 https://www.example.com/dashboard
,并带上了Cookie
头,其中包括了sessionid
、user
、lang
等信息。服务器可以通过这些cookie来识别当前用户的会话、用户名和语言偏好。
3. Referer 与 Cookie 的结合应用
实际应用场景:
- 登录验证: 当用户登录时,服务器可以在响应中发送一个
Set-Cookie
头部来设置sessionid
,并在后续请求中通过Cookie
头传递该sessionid,帮助服务器识别用户身份。 - 广告点击追踪: 通过
Referer
头部,广告平台可以追踪用户的跳转来源,并根据来源页面来优化广告投放策略。
例子:结合Referer与Cookie的使用
假设我们有一个简单的Web应用,用户登录后会被重定向到一个用户首页,并且在请求中会携带Referer
和Cookie
:
import requests
# 用户登录后,带有cookie(模拟登录态)
login_url = "https://www.example.com/login"
login_data = {
"username": "john_doe",
"password": "password123"
}
# 登录请求
session = requests.Session()
login_response = session.post(login_url, data=login_data)
# 登录后请求用户首页,携带Referer和Cookie
dashboard_url = "https://www.example.com/dashboard"
headers = {
"Referer": "https://www.example.com/login",
"Cookie": "sessionid=abc123; user=JohnDoe; lang=en"
}
dashboard_response = session.get(dashboard_url, headers=headers)
print(dashboard_response.text)
在上面的例子中:
- 用户首先发送一个登录请求,成功登录后,服务器会将
sessionid
存储在cookie中。 - 登录成功后,用户访问
/dashboard
页面时,携带Referer
头部和登录过程中返回的cookie信息。 - 服务器通过
sessionid
在cookie中识别用户的会话,并根据Referer
头了解用户是从哪里来到当前页面的。
4. 总结
- Referer 请求头记录了请求来源页面的URL,常用于流量分析、安全防护和个性化定向。
- Cookie 请求头携带了客户端存储的cookie信息,服务器通过cookie识别用户身份、管理会话和实现个性化功能。
- 在实际开发中,
Referer
和Cookie
常常一起使用,帮助服务器实现用户会话管理和行为分析。
这两个请求头是现代Web开发中的基础,对于提高用户体验、增强安全性和进行精准的用户行为分析非常重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-02-22 刀片服务器
2012-02-22 看人之长处天下尽有用之人,看人之短处天下无有用之人