精华内容
下载资源
问答
  • HTTP中的Host字段

    万次阅读 多人点赞 2018-10-11 14:46:41
    我们知道Http请求头信息里面会带有一个Host字段,很多人不是很清楚这个字段具体的作用或者用法,包括我被很多人问过也曾经有些迷茫,这里具体扫盲下。 我们知道一个IP地址可以对应多个域名,比如假设我有这么几个...

    我们知道Http请求头信息里面会带有一个Host字段,很多人不是很清楚这个字段具体的作用或者用法,包括我被很多人问过也曾经有些迷茫,这里具体扫盲下。

    我们知道一个IP地址可以对应多个域名,比如假设我有这么几个域名www.qiniu.com,www.taobao.com和www.jd.com然后在域名提供商那通过A记录或者CNAME记录的方式最终都和我的虚拟机服务器IP 111.111.111.111关联起来,那么我通过任何一个域名去访问最终解析到的都是IP 111.111.111.111。

    但是还是没有提到Host的概念,其实可以这样看,我们的那台虚拟机111.111.111.111上面其实是可以放很很多网站的(不然如果只能放一个网站的话就太不合理了,虚拟机那么多资源都浪费了),我们可以把www.qiniu.com,www.taobao.com和www.jd.com这些网站都假设那台虚拟机上面,但是这样会有一个问题,我们每次访问这些域名其实都是解析到服务器IP 111.111.111.111,我怎么来区分每次根据域名显示出不同的网站的内容呢,其实这就要用到请求头中Host的概念了,每个Host可以看做是我在服务器111.111.111.111上面的一个站点,每次我用那些域名访问的时候都是会解析同一个虚拟机没错,但是我通过不同的Host可以区分出我是访问这个虚拟机上的哪个站点。

    上面讲了这些如果还不能明白的话,我这里再举一个具体的Tomcat搭建网站站点的例子来说明这些Host具体在实际中是怎样设置的,我这里直接给出截图,因为只要是用Tomcat搭建过网站的应该都清楚,我直接在Tomcat目录中创建3个子目录来放我上面的3个站点就可以了,然后把具体的代码放到各个目录下面:
    这里写图片描述
    现在就需要我们来设置相关Host了,其实也比较简单,只需要编辑conf目录下的server.xml就可以了, 这里直接给出代码,可以看到其实是加了3个Host然后关联到以上3个目录下就可以了。
    Host name="www.qiniu.com" appBase="qiniuwebapp"
    Host name="www.taobao.com" appBase="taobaowebapp"
    <Host name="www.jb.com" appBase="jbwebapp"

    <Engine name="Catalina" defaultHost="www.qiniu.com">
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                 resourceName="UserDatabase"/>
    
           <Host name="www.qiniu.com" appBase="qiniuwebapp"  unpackWARs="true" autoDeploy="true" >     
               <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="qiniuwebapp_access_log." suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />
           </Host>
          <Host name="www.taobao.com" appBase="taobaowebapp"  unpackWARs="true" autoDeploy="true" >
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="taobaowebapp_access_log." suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />
         </Host> 
         <Host name="www.jb.com" appBase="jbwebapp"  unpackWARs="true" autoDeploy="true" >
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="jbwebapp_access_log." suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />
         </Host> 
     </Engine>

    然后每次访问都会根据不同的Host的信息请求到不同的站点上面。

     

     

    说白了,HTTP还是TCP协议,所以发起http请求也就是建立TCP连接并发送的过程,也就是说connect-->send。

        TCP在connect的时候必须要知道对方我IP地址和监听端口。比如我们要发起对www.baidu.com的请求,那第一步就是得到www.baidu.com对应的IP地址,然后connect,进而send。

        在http1.1中新增了一个Host头,那大家有没有想过Host的作用是什么。因为在connect的时候已经指定了IP,也就是说connect后已经知道主机了,那还用Host做什么。另外需要说明的是Host是1.1中才有的,Http1.1中如果没指定Host,则返回404。

        用curl做一个实验

     

    curl -I "http://220.195.19.18/app/index.php?i=4&c=entry&p=designer&pageid=1&m=ewei_shop&do=plugin" -H "host: www.hao23.net" -v

     

            可以看到,服务器返回了200,表示成功。在这里通过-H 指定了host字段,在请求头中也确实看到了有host字段,而且可以看到确实Http1.1。再ping一下host

     

    ping www.hao23.net

     

             能ping通host,那也就是说host确实存在。

        再看看curl时的那个URL,在URL指定了主机ip(220.195.19.18),再看上面ping的结果,www.hao23.net的ip为119.147.253.16,这是两个ip,换句话说在一个请求中出现了两个不同的主机IP,这是怎么回事?

     

    curl -I "http://220.195.19.18/app/index.php?i=4&c=entry&p=designer&pageid=1&m=ewei_shop&do=plugin" -v

     

             当不用-H指定host时,curl会自动讲host字段填充为url中的主机(域名),但最后返回的却是404。

        再换一种方法,用-H中的host替换URL中的主机。

     

    curl -I "http://www.hao23.net/app/index.php?i=4&c=entry&p=designer&pageid=1&m=ewei_shop&do=plugin" -v   

     

        我们将URL中的220.195.19.18替换成了-H中的www.hao23.net,发现最后的返回是200,也就说最后真正访问的主机是www.hao23.net。为什么会这样?

        猜想一下:这里出现了两个主机,一个较明显,一个较隐蔽,而真正访问的是教隐蔽的一个,感觉有点像总分结构————可以让所有的URL一样,但Host不同,可以根据不同的Host将同一个请求定向到不同发主机,从而达到分布均衡的效果。

        事实上,Host的存在就是为了实现虚拟WEB服务器,我的理解就是实现负载均衡。

     

    展开全文
  • http 请求中host字段作用

    千次阅读 2019-07-04 13:54:50
    目前很多一个ip对应多个域名的情况(nginx虚拟主机的实现原理),在http请求头中有host字段,该字段默认为请求的url 也可以自己设定 当我们发送一个请求时,先通过DNS域名解析,得到ip,然后建立tcp连接,当服务器...

    可以实现nginx虚拟服务器

    第一部分解析

    目前很多一个ip对应多个域名的情况(nginx虚拟主机的实现原理),在http请求头中有host字段,该字段默认为请求的url 也可以自己设定

    当我们发送一个请求时,先通过DNS域名解析,得到ip,然后建立tcp连接,当服务器(以nginx为例)收到请求时,就会解析http请求host字段来判断你是访问的那个server配置下的代码。nginx配置多个server。这样 就可以实现在一个服务器上通过http的host字段实现虚拟服务器

    第二部分解析

    Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。

    虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。

    举个栗子,有一台 ip 地址为 61.135.169.125 的服务器,在这台服务器上部署着谷歌、百度、淘宝的网站。为什么我们访问 https://www.google.com 时,看到的是 Google 的首页而不是百度或者淘宝的首页?原因就是 Host 请求头决定着访问哪个虚拟主机。

    第三部分解析

    我们知道Http请求头信息里面会带有一个Host字段,很多人不是很清楚这个字段具体的作用或者用法,包括我被很多人问过也曾经有些迷茫,这里具体扫盲下。

    我们知道一个IP地址可以对应多个域名,比如假设我有这么几个域名www.qiniu.com,www.taobao.com和www.jd.com然后在域名提供商那通过A记录或者CNAME记录的方式最终都和我的虚拟机服务器IP 111.111.111.111关联起来,那么我通过任何一个域名去访问最终解析到的都是IP 111.111.111.111。

    但是还是没有提到Host的概念,其实可以这样看,我们的那台虚拟机111.111.111.111上面其实是可以放很很多网站的(不然如果只能放一个网站的话就太不合理了,虚拟机那么多资源都浪费了),我们可以把www.qiniu.com,www.taobao.com和www.jd.com这些网站都假设那台虚拟机上面,但是这样会有一个问题,我们每次访问这些域名其实都是解析到服务器IP 111.111.111.111,我怎么来区分每次根据域名显示出不同的网站的内容呢,其实这就要用到请求头中Host的概念了,每个Host可以看做是我在服务器111.111.111.111上面的一个站点,每次我用那些域名访问的时候都是会解析同一个虚拟机没错,但是我通过不同的Host可以区分出我是访问这个虚拟机上的哪个站点。

    可以查看:https://blog.csdn.net/zj6257/article/details/83012282

    展开全文
  • HTTP请求首部的Host字段

    千次阅读 2017-08-25 17:28:29
    HTTP请求首部的Host字段
    HTTP请求首部的Host字段
    展开全文
  • http请求头host字段作用

    千次阅读 2019-08-12 22:34:25
    当服务器接收到来自浏览器的请求时,会根据请求头中的host字段访问哪个站点。 举个栗子,我有一台服务器A ip地址为120.79.92.223,有三个分别为www.baidu.com、www.google.com、www.sohu.com的域名解析到了这三个网站...

    host是HTTP 1.1协议中新增的一个请求头字段,能够很好的解决一个ip地址对应多个域名的问题。

    当服务器接收到来自浏览器的请求时,会根据请求头中的host字段访问哪个站点。

    举个栗子,我有一台服务器A ip地址为120.79.92.223,有三个分别为www.baidu.comwww.google.com、www.sohu.com的域名解析到了这三个网站上,当我们通过http://www.baidu.com这个网址去访问时,DNS解析出的ip为120.79.92.223,这时候服务器就是根据请求头中的host字段选择使用www.baidu.com这个域名的网站程序对请求做响应。

    展开全文
  • http头中的host字段详解

    万次阅读 2016-04-13 02:36:25
    今天同事问了一个问题引发...1.host字段可以是域名,也可以是ip地址。host字段域名/ip后可以跟端口号,如Host: www.6san.com:8080 2.host可以由程序自定义,某些程序为了防止运营商或防火墙拦截会定义虚假host
  • Mysql root用户对应的host字段缺少localhost导致本地无法访问数据库问题修复
  • 我们知道Http请求头信息里面会带有一个Host字段,很多人不是很清楚这个字段具体的作用或者用法,包括我被很多人问过也曾经有些迷茫,这里具体扫盲下。 我们知道一个IP地址可以对应多个域名,比如假设我有这么几个...
  • nginx HOST字段

    2020-09-05 21:22:33
    log_format main '[$HOST] - $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; #access_log off; access_...
  • mysql数据库user表host字段的%问题

    千次阅读 2018-01-11 16:22:00
    mysql数据库user表host字段的%问题 连接:http://blog.csdn.net/xiaomengh/article/details/48706149 在mysql数据库中,使用select user();查看当前用户。 mysql中host字段的%与localhost不是谁包括谁的问题...
  • Mysql的user表中的host字段分析 测试版本:Mysql Server version: 5.5.64-MariaDB MariaDB Server结果: Mysql的user表中的host字段分析: %:不包括localhost和127.0.0.1的其他ip或域名 Localhost:包括localhost和...
  • 关于http请求头host字段中的port

    千次阅读 2016-02-02 10:01:13
    http请求头host字段用来指定host和port。 如果该字段中没有指定port,表示使用默认端口。比如,http的则使用默认端口80,https的则使用默认端口443。按照这个描述,对于默认端口,host中是否指定似乎都是可以的。 ...
  • 目前很多一个ip对应多个域名的情况(nginx虚拟主机的实现原理),在http请求头中有host字段,该字段默认为请求的url 也可以自己设定 当我们发送一个请求时,先通过DNS域名解析,得到ip,然后建立tcp连接,当服务器...
  • http头中的host字段

    2021-07-31 11:10:02
    1.host字段可以是域名,也可以是ip地址。host字段域名/ip后可以跟端口号,如Host: www.6san.com:8080 2.host可以由程序自定义,某些程序为了防止运营商或防火墙拦截会定义虚假host 3.http1.1中host字段可以是空值,...
  • HTTP/1.0不支持Host请求头;而在HTTP/1.1中,Host请求头部必须存在,否则会返回400 Bad RequestHost的作用是实现多个虚拟主机假如在192.168.9.10机器上部署三个站点:www.baidu.com,www.taobao.com和www.jd.com用...
  • mysql中host字段的%与localhost不是谁包括谁的问题,是由精确到模糊进行匹配的。说明当用户从客户端请求登陆时,MySQL将授权表中的条目与客户端所提供的条目进行比较,包括用户的用户名,密码和主机。授权表中的Host...
  • http头host字段详解

    千次阅读 2016-10-09 09:04:06
    http host
  • Http请求头Host字段作用

    千次阅读 2019-11-10 14:31:23
    HTTP/1.0不支持Host请求头;...Host的作用是实现多个虚拟主机 假如在192.168.9.10机器上部署三个站点:www.baidu.com,www.taobao.com和www.jd.com 用nginx配置就是 http { server { server_name...
  • host字段变复杂了

    千次阅读 2014-11-07 16:44:11
    讨论的是openstack中卷的host属性。 印象中,社区H版本对于volume的host值表示的就是对应cinder-volume服务的host配置项,默认为GuestOS的hostname。比如单板A上的cinder-volume创建了卷V,那么V的host就是A。同时,...
  • 请问HTML,ASPX这样页面有没有设置HTTP请求Host字段值的办法?W3C说这个字段值是不允许修改的,是这样吗?
  • 解析mysql的spring.datasource.url获取host,端口,数据库名,获取表里的 字段名,字段类型,字段注释 做项目做了一个功能:需要展示一个表中的所有信息:字段名,字段类型,字段注释。 需要解析mysql的url,获取到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 218,987
精华内容 87,594
关键字:

host字段