陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2167,comments - 570,views - 413万

HTTP 请求“报头”——Referer 和 Cookie

HTTP请求报头是客户端向服务器发送HTTP请求时携带的额外信息。它们用于提供关于请求的上下文、客户端的特性、认证信息等。常见的HTTP请求头包括 User-AgentAcceptContent-TypeAuthorization 等,其中 RefererCookie 是两个非常常见且重要的请求头。

本文将详细介绍这两个请求头的功能,并提供相应的代码示例。


1. Referer 请求头

功能:

Referer(注意拼写有误,实际为“Referrer”)是HTTP请求报头中的一项,用来表示当前请求是从哪个页面跳转过来的。它可以帮助服务器识别请求的来源页面,并可用于日志记录、分析流量来源、页面访问统计等。

格式:

Referer: <URL>

Referer头部通常包含发起请求的页面的完整URL(例如:https://www.example.com)。

举例:
当用户从页面A点击链接跳转到页面B时,页面B的HTTP请求会携带来自页面A的Referer信息。

常见用途:

  1. 防止CSRF攻击:服务器可以根据Referer头验证请求来源,防止跨站请求伪造(CSRF)攻击。
  2. 日志分析与流量追踪:网站可以通过Referer分析流量来源,了解哪些外部页面或广告带来了流量。
  3. 内容定向与个性化:根据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是由一个namevalue组成,多个cookie之间用分号分隔。

常见用途:

  1. 会话管理:通过Set-Cookie头,服务器可以设置一个会话cookie来识别用户并维持会话。
  2. 个性化:存储用户偏好、语言设置等信息。
  3. 身份认证:通过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头,其中包括了sessioniduserlang等信息。服务器可以通过这些cookie来识别当前用户的会话、用户名和语言偏好。


3. Referer 与 Cookie 的结合应用

实际应用场景:

  • 登录验证: 当用户登录时,服务器可以在响应中发送一个Set-Cookie头部来设置sessionid,并在后续请求中通过Cookie头传递该sessionid,帮助服务器识别用户身份。
  • 广告点击追踪: 通过Referer头部,广告平台可以追踪用户的跳转来源,并根据来源页面来优化广告投放策略。

例子:结合Referer与Cookie的使用

假设我们有一个简单的Web应用,用户登录后会被重定向到一个用户首页,并且在请求中会携带RefererCookie

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识别用户身份、管理会话和实现个性化功能。
  • 在实际开发中,RefererCookie常常一起使用,帮助服务器实现用户会话管理和行为分析。

这两个请求头是现代Web开发中的基础,对于提高用户体验、增强安全性和进行精准的用户行为分析非常重要。

 
posted on   宏宇  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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 看人之长处天下尽有用之人,看人之短处天下无有用之人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示