HTTP消息在服务器端的路由

Host = uri-host [ ":" port ]

  • HTTP/1.1 规范要求,不传递Host头部则返回 400 错误响应码
  • 为防止陈旧代理服务器,发正向代理请求 request-target 必须以 absolute-form 形式出现

为什么要求传递Host?

HTTP/1.0中是没有Host头部的,当时域名较少,一个域名只针对一个IP,当用户对服务器建立起连接的时候,是不要考虑匹配哪个域名对应的服务。现在域名众多,IP地址较少,一个IP可能对应多个域名。

关于Host头部:https://tools.ietf.org/html/rfc7230#section-5.4

  • A client MUST send a Host header field in all HTTP/1.1 request messages.
  • A server MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message that lacks a Host header field and to an requestmessage that contains more than one Host header field or a  Host header field with an invalid field-value.

请求发到服务器端消息如何路由?

为什么陈旧的服务器加上绝对路径就会正确处理,相对路径就不会呢?

  • 只识别http/1.0的代理服务器,是不认识Host头部的,但它会识别绝对URI包括里面的域名。
  • Nginx如果找到绝对URI中的域名,就不会使用Host中的域名。所以URI中域名优先级更高。
posted @ 2019-06-02 16:17  冯小圆  阅读(468)  评论(0编辑  收藏  举报