GET /calcuapp/calculator.jsp HTTP/1.1
Host: 192.168.1.66:8080
我正在使用PuTTy,并且已经在设置上设置了主机目标。为什么我需要再次输入主机目的地,如上所示?
答案 0 :(得分:3)
简短的回答是Virtual Hosts。
多年来,从单个服务器托管多个站点/域是很常见的。 HTTP 1.1通过要求host
标头来支持此功能。如果您使用HTTP 1.0,则可以将其保留。
答案 1 :(得分:1)
Host
HTTP标头是必需的,因为HTTP / 1.1并且它用于虚拟主机。
必须包含服务器的域名以及服务器正在侦听的TCP端口号。如果端口是请求服务的标准端口(HTTP为80
,HTTPS为443
),则可以省略端口号。
缺少Host
标头的HTTP / 1.1请求应使用400
(错误请求)状态代码进行响应。
RFC 7230,HTTP / 1.1中的当前参考消息语法和路由,讲述了有关此标题的整个故事:
请求中的
Host
标头字段提供主机和端口 来自目标URI的信息,启用源服务器 在为多个请求提供服务时区分资源 单个IP地址上的主机名。Host = uri-host [ ":" port ]
客户端务必在所有HTTP / 1.1请求中发送
Host
头字段 消息。如果目标URI包含权限组件,则a 客户端必须发送与Host
相同的字段值 权限组件,不包括任何userinfo子组件及其@
分隔符。如果缺少权限组件或 未定义目标URI,然后客户端必须发送Host
标头 具有空字段值的字段。由于
Host
字段值是处理a的关键信息 请求,用户代理应该生成Host
作为第一个头字段 请求行之后。例如,对源服务器的GET请求
开头http://www.example.org/pub/WWW/
将以:GET /pub/WWW/ HTTP/1.1 Host: www.example.org
客户端必须在HTTP / 1.1请求中发送
Host
头字段,即使 请求目标是绝对形式,因为这允许 要通过古代HTTP / 1.0代理转发的Host
信息 可能没有实现Host
。当代理收到绝对形式的请求时 request-target,代理必须忽略收到的
Host
头字段 (如果有的话),而是将其替换为主机信息 请求目标。转发此类请求的代理必须生成一个 新的Host
字段值基于收到的请求目标而不是 转发收到的Host
字段值。由于
Host
标头字段充当应用程序级路由 机制,它是恶意软件寻求毒害的常见目标 共享缓存或将请求重定向到非预期的服务器。一个 拦截代理特别容易受到攻击Host
字段值,用于将请求重定向到内部服务器或用于 在没有首先验证的情况下,用作共享缓存中的缓存键 截获的连接针对的是有效的IP地址 主机。服务器必须以任何
400
(错误请求)状态代码进行响应 缺少Host
标头字段的HTTP / 1.1请求消息 请求包含多个Host
标头字段或a的请求消息 带有无效字段值的Host
标头字段。
答案 2 :(得分:0)
您的本地解析程序(DNS等)在连接之前将命令行上的主机名转换为IP地址;如果有多个主机名解析为相同的IP地址,则远程服务器无法知道您在命令行上提供了哪个主机名(这就是所谓的“虚拟主机”;对于HTTP 1.0,您需要单独使用每个不同的HTTP主机的IP地址非常浪费,但不需要传输Host:
标头。