http请求头origin、referer和host区别

本文探讨了HTTP请求中的两个关键头字段,Origin在CORS和POST请求中的作用,以及Referer的用途和不发送的情况。重点比较了Origin与Referer的异同,包括携带条件、值的构成和浏览器行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Host

描述请求将被发送的目的地,包括且仅仅包括域名和端口号。 HTTP/1.1 的所有请求报文中必须包含一个Host头字段,且只能设置一个。

2. Origin

请求头origin表明了请求来自于哪个站点。包括且仅仅包括协议、域名和端口,并不包含任何路径信息。经常用于CORS请求或者POST请求,可以看到response有对应的header:Access-Control-Allow-Origin。

@CrossOrigin(origins="http://wx.xxxx.com:80")

@RequestMapping(value = "list", method = RequestMethod.POST)

public String list(HttpServletRequest request, HttpServletResponse response) {

}

3. Referer

告知服务器请求的原始资源的URI,其用于所有类型的请求,并且包括协议、域名、路径和查询参数。

在以下几种情况Referer不会被发送:

1)来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;

2)当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS);

3)直接输入网址或通过浏览器书签访问;

4)使用 JavaScript 的 Location.href 或者是 Location.replace();

5)使用html5中noreferrer;

6)使用iframe的hack写法去除referer。

请求头中referer与origin功能相似,但有如下几点不同:

1、只有跨域请求,或者同域时发送post请求,才会携带origin请求头,而referer不论何种情况下,只要浏览器能获取到请求源都会携带,除了上面提到的几种情况。

2、如果浏览器不能获取请求源,那么origin满足上面情况也会携带,不过其值为null。referer则不同,浏览器如果不能获取请求源,那么请求头中不会携带referer。

3、origin的值只包括协议、域名和端口,而erferer不但包括协议、域名、端口,还包括路径和参数。

<think>好的,用户让我介绍一下HTTP请求头部。首先,我需要回忆HTTP请求的基本结构,确保自己理解正确。HTTP请求由请求行、请求头请求体组成,而请求头部是关键部分,包含了很多重要信息。接下来,我需要确定哪些是最常用的部字段,比如Host、User-Agent、Accept这些,然后逐一解释它们的作用。 用户可能刚接触HTTP,可能需要一些例子来理解每个部的用途。比如,Host字段用来指定服务器域名,这在虚拟主机托管中很重要。User-Agent说明客户端类型,帮助服务器返回合适的响应。Accept相关的部告诉服务器客户端能处理的内容类型,比如Accept-Language处理语言偏好。 同时,还要注意区分请求头响应部,虽然用户问的是请求部分,但可能需要简要对比。另外,是否需要提到缓存相关的部,比如Cache-Control或If-Modified-Since?这些对性能优化很重要,应该包含进去。 还要考虑安全性相关的部,如AuthorizationCookie,这些处理用户认证会话。不过Cookie可能存在隐私问题,可以稍微提一下。还有像RefererOrigin这类涉及来源的部,跨域请求相关,可能涉及CORS,是否需要深入?可能用户需要基础介绍,所以保持简明。 另外,现代开发中常见的自定义部,比如X-开的,虽然现在规范不推荐,但仍有使用。可能需要提到,但强调遵循标准。 在组织内容时,应该分点解释每个部,结构清晰,用例子说明。比如用GET请求的例子展示Host、User-Agent等,POST请求的例子展示Content-TypeContent-Length。这样用户能更直观地理解。 还要注意语法正确性,比如确保LaTeX格式正确,但用户的问题不涉及数学公式,可能不需要太多。但根据系统指令,行内表达式要用$...$,比如在提到版本号时,比如HTTP/1.1可能需要用$HTTP/1.1$?不过可能不需要,可能系统指令更多针对数学内容。这里可能不需要特别处理,但需注意。 最后总结请求头部的作用,强调它们如何帮助客户端服务器通信。可能用户是开发者,需要实际应用中的例子,所以给出实际案例会更好。确保回答准确、易懂,结构清晰,符合用户的需求。</think>HTTP请求头部(HTTP Request Headers)是HTTP协议中客户端(如浏览器)向服务器发送请求时附加的元数据,用于传递请求的附加信息控制参数。以下是逐步解析: --- ### 一、HTTP请求结构 一个完整的HTTP请求包含三部分: 1. **请求行**:包含方法(GET/POST等)、URL路径协议版本,例如: `GET /index.html HTTP/1.1` 2. **请求头部**:多行键值对,描述请求的属性客户端能力 3. **请求体**(可选):例如POST请求提交的表单数据 --- ### 二、常见请求头部字段及作用 #### 1. 基础信息类 - **Host** 指定目标服务器的域名端口,例如: `Host: www.example.com:8080` *用途*:必需字段(HTTP/1.1起),用于虚拟主机区分同一IP的不同网站。 - **User-Agent** 标识客户端类型(浏览器、操作系统等),例如: `User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0` *用途*:服务器可据此返回适配不同设备的页面。 #### 2. 内容协商类 - **Accept** 声明客户端可接受的内容类型,例如: `Accept: text/html, application/json;q=0.9` *用途*:`q=0.9`表示优先级权重(0~1),帮助服务器返回合适格式。 - **Accept-Language** 指定首选语言,例如: `Accept-Language: en-US, zh-CN;q=0.8` *用途*:服务器可能返回对应语言的资源版本。 #### 3. 缓存控制类 - **Cache-Control** 控制缓存行为,例如: `Cache-Control: max-age=3600` *用途*:指示资源可缓存的最大时间(秒)。 - **If-Modified-Since** 条件请求,例如: `If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT` *用途*:若资源未在此时间后修改,服务器返回`304 Not Modified`节省带宽。 #### 4. 安全与认证类 - **Authorization** 携带认证凭证,例如: `Authorization: Bearer eyJhbGciOiJIUzI1Ni...` *用途*:用于JWT、OAuth等身份验证场景。 - **Cookie** 发送服务器设置的Cookie,例如: `Cookie: sessionId=abc123; theme=dark` *用途*:维持会话状态(但需注意隐私风险)。 --- ### 三、示例:完整HTTP请求 ```http GET /api/data HTTP/1.1 Host: api.example.com User-Agent: curl/7.64.1 Accept: application/json Accept-Encoding: gzip, deflate Connection: keep-alive ``` --- ### 四、核心作用总结 1. **传递上下文**:如客户端类型、语言偏好 2. **控制行为**:缓存策略、连接管理(如`Connection: keep-alive`) 3. **安全交互**:身份验证、跨域限制(如`Origin`) 4. **优化性能**:压缩支持(如`Accept-Encoding`)、条件请求 --- ### 五、开发者工具查看 浏览器开发者工具(F12)→ Network标签 → 点击任意请求 → 查看`Headers`选项卡,可直观观察请求头内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值