什么是 HTTP“主机”标头?

2023-12-01

由于发送 HTTP 请求时 TCP 连接已经建立,因此 IP 地址和端口是隐式已知的——TCP 连接是 IP + 端口。

那么,为什么我们需要Host标题?这是否仅在有多个主机映射到 TCP 连接中隐含的 IP 地址的情况下才需要?


The Host标头告诉网络服务器哪个虚拟主机使用(如果已设置)。您甚至可以使用多个相同的虚拟主机aliases(= 域和通配符域)。在这种情况下,如果您想根据所寻址的不同域提供不同的行为,您仍然可以在 Web 应用程序中手动读取该标头。这是可能的,因为在你的网络服务器中你可以(如果我没记错的话你必须)设置onevhost 成为默认主机。每当以下情况时,都会使用此默认虚拟主机host标头与任何配置的虚拟主机都不匹配。

这意味着:你说得对,尽管说“多个主机”可能有点误导:主机(寻址的机器)是相同的,真正解析为 IP 地址的内容是不同的域名(包括子域)也称为主机名(但不是主机!)。


虽然不是问题的一部分,但有一个有趣的事实:该规范在早期导致了 SSL 问题,因为 Web 服务器必须提供与客户端已寻址的域相对应的证书。但是,为了知道要使用什么证书,网络服务器应该提前知道寻址的主机名。但由于客户端仅通过加密通道发送该信息(这意味着:在发送证书之后),服务器必须假设您浏览了默认主机。这意味着每个 IP 地址/端口组合都有一个 SSL 安全域。

这已被克服服务器名称指示;然而,这再次破坏了一些隐私,因为服务器名称现在再次以纯文本形式传输,因此每个中间人都会看到哪个主机名您正在尝试连接到。

虽然网络服务器可以从服务器名称指示中知道主机名,但Hostheader 并未过时,因为服务器名称指示信息仅在 TLS 握手中使用。对于不安全的连接,根本没有服务器名称指示,因此Host标头仍然有效(并且必要)。

另一个有趣的事实:大多数 HTTP 服务器实现(如果不是全部)都会拒绝您的 HTTP 请求,如果它不包含恰好一个Host标头,即使它可以被省略,因为只配置了默认虚拟主机。这意味着 HTTP-(GET-) 请求中所需的最少信息是包含以下内容的第一行:METHOD RESOURCE and PROTOCOL VERSION并且至少Host标题,像这样:

GET /someresource.html HTTP/1.1
Host: www.example.com

In the 关于“Host”标头的 MDN 文档他们实际上是这样表述的:

所有 HTTP/1.1 请求消息中都必须发送 Host 标头字段。 A 400(错误请求)状态代码将发送到任何 HTTP/1.1 请求 缺少主机标头字段或包含多个主机标头字段的消息。

正如 Darrel Miller 所提到的,完整的规格可以在RFC7230.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是 HTTP“主机”标头? 的相关文章

  • 这个重写规则是什么意思?

    我正在安装 phpancake 有一个像这样的文件夹 application install library public sql schema install html install php 这条规则意味着什么 RewriteEngin
  • Go客户端程序生成大量TIME_WAIT状态的socket

    我有一个 Go 程序 它从多个 goroutine 生成大量 HTTP 请求 运行一段时间后 程序报错 connect cannot allocaterequestedaddress 当检查时netstat 我得到大量 28229 个连接T
  • C# HTTP 请求解析器[重复]

    这个问题在这里已经有答案了 可能的重复 将原始 HTTP 请求转换为 HTTPWebRequest 对象 https stackoverflow com questions 318506 converting raw http reques
  • 在express js中禁用http方法

    我正在我的 Express 应用程序上进行 nessus 测试 这是我得到的 基于每种方法的测试 HTTP 方法 ACL CHECKOUT COPY DELETE GET HEAD LOCK MERGE MKACTIVITY MKCOL 移
  • Node.js:在检索 http 请求正文之前断开 http 请求连接

    我正在用 Node js 编写一个 http 服务器 我有一个客户端通过 HTTP POST 多部分 数据 将大文件上传到该服务器 我想接受唯一使用有效文件名上传文件的连接 我有一些条件 在服务器检索数据之前应断开无效文件名连接 我不知道如
  • 哪些具体用例需要通过 WebSockets 和长轮询使用 BOSH? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • 在 JSF 自定义验证器中区分 ajax 请求和完整请求

    我的验证器需要知道它是完整请求还是 ajax 请求 在我当前的解决方案中 我检查 http 请求标头X Requested With元素 public void validate FacesContext context UICompone
  • Crystal lang如何从http获取二进制文件

    In Ruby require open uri download open http example com download pdf IO copy stream download my file pdf 如何在水晶中做同样的事情 我们
  • 如何在 G-WAN 中添加 HTTP/2

    我想知道是否可以通过使用解决方案 nghttp2 https nghttp2 org https nghttp2 org 很抱歉这么晚才回答 出于某种原因 Stackoverflow 没有通知我们这个问题 我之所以找到它只是因为收到了更新的
  • AngularJS 1.X 中的异步调用是如何工作的? $Http 调用没有返回值

    我有以下名为的函数getvalue 它与控制器一起位于 AngularJS 模块内 我试图在单击事件上调用此函数 调用控制器中的另一个函数 我希望我很清楚 功能 function getvalue Data http var value u
  • jQuery.ajax 发送 OPTIONS 和 POST,如何使用 Express.js (Node.js) 处理

    每当我的应用程序向服务器发送 ajax 请求时 ajax url config api url 1 register type POST contentType application json data some JSON data he
  • 在 Python 中将 GET 更改为 POST (Flask)

    我正在尝试创建一个简单的应用程序 其中在服务器上生成整数数组并将其发送到客户端 以下是 app py 中的一些示例 工作 代码 from flask import Flask render template request url for
  • Web API GET 请求中的电子邮件地址

    我正在开发在 ASP NET Web API 中实现的 REST API 我们想要支持的一个场景是执行GET通过电子邮件地址请求一些用户信息 理想情况下 客户应该能够执行以下操作 GET api v1 users email your em
  • Java 中的下载管理器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要通过 FTP HTTP 从 Java 获取几个大文件 几个演出 有现成的库 java 命令行工具
  • HTTPbis - bis 是什么意思?

    我经常看到 bis 附加到协议版本 例如 v 34bis 或 httpbis bis 是什么意思或代表什么 我认识的一位电信工程师认为它可能起源于法国 正如其他人已经说过的 bis 来自 两次 或 重复 http oxforddiction
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • jQuery JSONP ajax,未设置身份验证标头

    我正在尝试使用以下设置向 google 联系人 API 发出 ajax 请求 ajax url https www opensocial googleusercontent com api people me all dataType js
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav

随机推荐

  • 如何理解Ruby的.each和.map

    我无法理解之间的差异map and each 以及何时何地使用它们 我读 地图有什么作用 and Ruby 迭代器 但想要一些澄清 如果我有 z 1 2 3 map x x 1 map获取数组中的每个元素z并向每个元素添加一个 但是它不会改
  • Swift:当用户在 UITextView 中键入时连续调整 tableViewCell 的大小

    介绍 Context 我正在创建我的第一个应用程序 但遇到了一个我无法解决的问题 我有 tableView 其中的单元格中填充了相当多的 UIElements 所有约束都是使用 EasyPeasy 库完成的 它基本上只是设置自动布局约束 我
  • 脚本不适用于匿名用户、Google 电子表格

    我目前正在编辑一个 Google 电子表格 该电子表格设置为供登录和匿名用户公开编辑 我不是所有者 我在电子表格中创建了一个脚本并将其分配给一个绘图 插入绘图 我还为图像分配了脚本 有两个不幸的奇怪现象 1 如果您是匿名的 则不会出现绘图
  • 如何测量代码的内存使用情况?

    我正在尝试测量代码的内存使用情况 但我不知道如何继续 我不想使用 DotMemory 或任何我需要通过编程来完成的 分析器 有什么方法可以知道分配了多少对象 就像 5 int 4 字节 4 Object 16 字节 I used 流程 Wo
  • Angular 2 中的背景图像

    如何通过ngOnInit添加图片到背景 我不想使用background url link of my image 在 CSS 中 因为这会增加我网站的负载 我想通过 Angular 2 Typescript 来做到这一点 在您的 compo
  • 替换全局变量,如何以及为什么

    好的 到目前为止我已经工作并使用了全局变量 并且仅调用 USER 来获取用户 ID 没有问题 大多数时候 人们对 SO 的看法以及一些到处阅读的文章都对使用全局变量持负面态度 所以现在我准备改变方式而不是使用全局变量 现在我包含一个函数 p
  • 将 HashMap 放入 jsonobject

    我构建一个 json 对象 该对象由 Hashmap 中定义的 nameValue 对组成 我遇到的问题是当我调用时 jsonObject put hashmap 它添加 nameValue 对 如下所示 name value代替name
  • CUDA + OpenGL 互操作,不带已弃用的功能

    我之前已经能够通过以下方式在 CUDA 中填充纹理以在 OpenGL 中使用 创建并初始化 GL 纹理 gl GenTextures etc 创建 GL 像素缓冲区对象 向 CUDA 注册 PBO 在更新 渲染循环中 cudaGraphic
  • 尝试将yield理解为一个表达式

    我正在摆弄生成器和生成器表达式 但我不完全确定我理解它们是如何工作的 一些参考资料 gt gt gt a x for x in range 10 gt gt gt next a 0 gt gt gt next a 1 gt gt gt a
  • 如何切换到 Coq 的特定版本——尤其是在使用 Opam 管理 Coq 版本时?

    我目前使用的是标准方式 可能通过网站 安装的标准方式 但我想用tcoq 我相信我已经正确安装了它 因为我有一个 bin 文件 并且所有常见的 Coq 内容似乎都在那里 pinno gamepad tcoq ls bin coq tex co
  • 脚本仅在页面重新加载时工作

    我正在使用 jQuery 在水平视图网站上对齐图像 但该脚本仅在我重新加载页面时才起作用 http joliannelm steveforest com edition roux de service html 该脚本在之前被调用 这是脚本
  • Node.js 生成子进程并实时获取终端输出

    我有一个脚本 输出 hi 休眠一秒 输出 hi 休眠 1 秒 依此类推 现在我想我可以用这个模型来解决这个问题 var spawn require child process spawn temp spawn PATH TO SCRIPT
  • SupportPlaceAutocompleteFragment 的 OnPlaceSelectedListener 未触发

    我遇到了问题OnPlaceSelected监听器的方法支持地点自动完成片段 My onViewCreated method Override public void onViewCreated View view Bundle savedI
  • 移动网站 - 仅强制横向/不自动旋转

    我有一个具有移动样式表的网站 我还使用 jQuery 来检查移动设备并相应地更改功能 但我想知道是否有办法强制仅横向方向并禁用自动旋转 CSS 或 jQuery 解决方案都可以 Thanks 使用媒体查询来测试方向 在纵向样式表中隐藏所有内
  • 欧拉项目 #10 (Python)

    为什么我求 200 万以下所有素数总和的算法这么慢 我是一个相当初级的程序员 这就是我为寻找解决方案而想出的方法 import time sum 2 start time time for number in range 3 2000000
  • 为什么 secp256k1 未压缩公钥的格式不符合预期?

    一小段 Rust 代码 let secret key SecretKey from slice rand thread rng gen lt u8 32 gt expect 32 bytes within curve order let p
  • 带有回形针的水印

    根据这个例子 http dimaspriyanto com 2010 06 08 image watermarking with paperclip 我尝试在我上传的每张图片上添加水印 目前 我限制自己在大一 你猜怎么着 这不起作用 所以在
  • WPF 用户控件与父视图/视图模型的交互

    您好 我有一个 mainView 窗口 其 dataContext 设置为它自己的 viewModel 在该 viewModel 上有一个 DateTime 属性 该属性又使用 2 路绑定绑定到我的主视图上的日期选择器
  • 在 ViewPager 内水平滚动 webview

    我已将加载图像的 WebView 放入 ViewPager 中 当我尝试水平滚动图像时 我会移至下一个视图 而不是滚动图像 在移动到下一个视图之前是否可以使其滚动到图像的末尾 Override public Object instantia
  • 什么是 HTTP“主机”标头?

    由于发送 HTTP 请求时 TCP 连接已经建立 因此 IP 地址和端口是隐式已知的 TCP 连接是 IP 端口 那么 为什么我们需要Host标题 这是否仅在有多个主机映射到 TCP 连接中隐含的 IP 地址的情况下才需要 The Host