Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 当发出相对请求时,主机标头取自何处?_Html_Http_Httprequest_Fiddler - Fatal编程技术网

Html 当发出相对请求时,主机标头取自何处?

Html 当发出相对请求时,主机标头取自何处?,html,http,httprequest,fiddler,Html,Http,Httprequest,Fiddler,根据报告: 最常见的请求URI形式是用于标识 源服务器或网关上的资源。在这种情况下,绝对 URI的路径必须作为 请求URI和URI(授权)的网络位置必须 将在主机头字段中传输。 例如,客户希望 直接从源服务器检索上面的资源 创建到主机“www.w3.org”端口80的TCP连接并发送 台词: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org 因此,当用户发出此请求时,它会得到响应 好了,现在这个循环结束了(!)-用户单击链

根据报告:

最常见的请求URI形式是用于标识 源服务器或网关上的资源。在这种情况下,绝对 URI的路径必须作为 请求URI和URI(授权)的网络位置必须 将在主机头字段中传输。
例如,客户希望 直接从源服务器检索上面的资源 创建到主机“www.w3.org”端口80的TCP连接并发送 台词:

   GET /pub/WWW/TheProject.html HTTP/1.1
   Host: www.w3.org
因此,当用户发出此请求时,它会得到响应

好了,现在这个循环结束了(!)-用户单击
链接

  • 请注意,地址是相对的

  • 另外请注意,
    表单
    没有(!)包含带有基本url(“www.w3.org/help”)的
    操作

:

  • 还要注意-没有表示基本url的
    标记
嗯。那么问题是什么呢

问题

如果用户单击超链接,浏览器如何知道要转到的
host
值?抱歉,它不是从地址栏url来的

我知道document.location包含所有信息,但我认为这里不涉及
JS

知道上一个周期(请求)已经结束(第一个请求)-
主机
头值是从哪里获取的,而现在发出相对请求

如有规范参考,将不胜感激

编辑:

有点像小提琴手:

因此,对于此html:

<body>
  <a href="/GetSomething"> Click me</a>
</body>
URL是完整的URL(显然):


这可能是一个非常简单的问题,但它从哪里获取基本url呢?(Javascript(document.location?)地址栏url?浏览器内部的一些内部存储?

它取自表单所包含文档的基本URI

(顺便说一句:您正在查看一个绝对规范;相关规范是RFC 7230)。

" 12.4.1解析相对URI

用户代理必须根据第3节计算用于解析相对URI的基本URI。下面描述如何专门应用于HTML

用户代理必须根据以下先决条件(从最高优先级到最低优先级)计算基本URI:

  • 基本URI由基本元素设置
  • 基本URI由协议执行期间发现的元数据提供 交互,例如HTTP头(请参阅)
  • 默认情况下,基本URI是当前文档的URI HTML文档有一个基本URI(例如,有效的HTML文档可能 出现在电子邮件中,并且可能不由URI指定)。例如HTML 如果文档包含相对URI和 依赖于默认的基本URI
  • "

    www.anotherebsite.com/action\u page.php
    中定义。这些数据可用于浏览器指纹识别,以通过服务器识别浏览器


    正如网络模型所说,持久性(连接可能不是真正的持久性,因为页面已经加载,但是作为ip地址和上面提到的其他标识符,服务器知道它在同一会话期间是同一个浏览器/用户代理)连接通过会话层在客户端和服务器之间进行管理。服务器通过握手时获取的数据了解其客户端。之后,它可以知道为每个客户端实例化会话id,并且通过cookies客户端可以记住“AFAIK it not from the address bar url”-您假设这是真的,因为…啊,因为在这种情况下,浏览器url不是带有链接的页面的url,由于iFrame的原因,浏览器只需跟踪哪个文件是从哪个URL下载的——就这么简单。@Eric我不这么认为。看这张SO的表格。没有目标url。你指的是地址栏url吗?地址栏是一个用户界面元素,所以它是不相关的。所以我想我不明白你的答案。单击相对链接时,主机地址在何处?不要忘记,文档不必具有表单,用户代理知道它从何处加载文档,通常这就是基本URI。关于这一点的血淋淋的细节应该在HTML5规范中。但我不明白:当我请求
    A.com
    ,然后得到响应时,这个重新响应的周期就结束了!以前任何请求的内存都不会保留在任何位置。那么现在如果我点击一个
    ,那么基本URI是从哪里获取的呢?(我提醒您,前面的请求已经完成。我很乐意提供参考。您向我解释和http是如何工作和发送的(我已经知道)。我只问了一个问题:“在相对请求中,它从哪里获取主机头?”。OSI模型与此无关。@RoyiNamir在删除的模型图像上添加了一个段落。想了解更多信息,请在此提供帮助:)不清楚您在这里谈论的是哪台服务器。(“服务器总是将链接作为本地if协议进行尝试”)。当我单击
    -在该阶段,还没有涉及任何服务器。但它仍然知道在相对URL中的位置。所以这个答案仍然没有回答这个问题。另外-我正在寻找规范证明。@RoyiNamir添加了对多达的引用。:)哦。这就是你想知道的,所以我正在移除所有其他部分。:)
    GET http://null.jsbin.com/GetSomething HTTP/1.1
    Host: null.jsbin.com
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36
    DNT: 1
    Referer: http://null.jsbin.com/runner
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,he;q=0.6
    Cookie: _ga=GA1.2.474312101.1437654587; _gat=1; jsbin=s%3A...
    
    http://null.jsbin.com/GetSomething
    
    GET http://null.jsbin.com/GetSomething HTTP/1.1
    Host: null.jsbin.com