- HTTP 响应
- 响应行
- 响应头
HTTP 响应
HTTP 响应和 HTTP 请求看起来很相似,他们都被称作 HTTP 报文。一个响应看起来像这样:
行数 内容1 HTTP/1.1 200 OK2 Content-length: 3503 Content-Type: text/html
在特殊情况下会出现 1xx 状态码的响应,代表信息性的响应,这类报文不包含其他部分的信息,只是一种信号,用来告诉客户端继续传输数据。如果出现了 100 响应,则下一个响应会是一个非 100 的响应。这意味着出现多个响应的时候,其中可能包含有一个单独的信息性响应,这只会出现在keep-alive模式下(1xx 信息仅在 HTTP/1.1 中可用)。HAProxy 能正确识别并忽略此类信号,只处理非 100 的响应,鉴于此,除非明确声明,否则此类信息不会被日志记录或被传递。
状态码 101 的信息表明当前连接正在切换协议,此时 HAProxy 必须像处理一个CONNECT信号一样切换到 tunnel 模式,接着一个Upgrade头会携带附加协议切换信息被传输过来。
响应行
第一行是响应行,它总是由三部分组成:
- 一个版本标签:HTTP/1.1
- 一个状态码:200
一个解释:OK状态码总是由三位数组成,其中第一位数代表状态的类别:
1xx:请求已接受,需要继续处理
- 2xx:OK,接下来是内容
- 3xx:OK,接下来没有内容
- 4xx:客户端错误
- 5xx:服务端错误如果需要查看所有状态码和它对应的意思,请参看 RFC7231,里面的
Reason不是客户端解析出来的,经供参考而已,因为你可能看到任何意想不到的东西,不过大家通常都会遵循这些既定的信息。它可能由一个或多个单词组成,比如OK、Found、Authentication Required。
HAProxy 可能自身会输出以下信息:
状态码 何时/何因200 打开 state 页面,或响应一个监控状态时301 执行一个跳转时(取决于配置)302 执行一个跳转时(取决于配置)303 执行一个跳转时(取决于配置)307 执行一个跳转时(取决于配置)308 执行一个跳转时(取决于配置)400 遇到一个过大或者非法的请求时401 执行一个动作时需要鉴权 (在打开 state 页面时)403 当被“block”ACL 规则或“reqdeny”过滤器拒绝时408 当请求完成前因超时而中断时500 当当前代理遇到了不应出现的、无法恢复的错误,比如内存分配出错时502 当后端服务器返回了空的、非法的或不完整的响应,或被“rsdeny”过滤器中断时503 当没有后端服务器去处理请求或在响应监控请求时遇到了“monitor fail”条件时504 当没有得到后端响应就因超时而中断时
上述的 4xx 和 5xx 状态码可以自定义(参看章节 4.2)。
响应头
响应头和请求头的工作原理一致,故 HAProxy 用相同的解析函数来处理。
请参看章节 1.2。
