HTTP中header的常见类型以及作用

本文详细解析了HTTP头部的常见类型及其作用,包括Content-Type、Content-Length、Host、User-Agent、referer、location和Cookie,帮助读者理解HTTP通信过程中的关键信息。

我们知道无论是http报文中的响应还是请求,里面都是含有header的,而header都是一个个键值对组成的
那木header都有那些常见类型呢

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度 (注意,长度以字节为单位)
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上 ,若是没写端口号,端口号一般为默认值,看具体的操作系统及主机。
  • User-Agent: 声明用户的操作系统和浏览器版本信息
  • referer: 当前页面是从哪个页面跳转过来的
  • location: 搭配3xx状态(重定向)码使用, 告诉客户端接下来要去哪里访问
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能。浏览器端存储的字符串,来源是服务器通过set-cookie返回的,会按照域名来存储,后续的访问相同域名的网站时,就会自动带上Cookie。
<think>我们正在讨论HTTP 400 Bad Request响应的常见header字段。根据HTTP协议标准和实际实践,我们可以总结如下: 1. **必选的标准header字段**: - `Content-Type`: 指示响应正文的媒体类型,例如`text/html`或`application/json`。服务器必须指定此字段以帮助客户端解析错误详情。 - `Content-Length`: 明确响应正文的字节长度,避免客户端因分块传输编码(chunked encoding)而解析错误[^1][^2]。 2. **可选的header字段**: - `Date`: 服务器生成响应的时间戳(GMT格式),例如`Date: Wed, 21 Oct 2024 07:28:00 GMT`。 - `Server`: 标识服务器软件类型(如`Server: nginx/1.18.0`),但出于安全考虑,生产环境有时会隐藏此信息。 - `Connection`: 控制TCP连接行为,如`Connection: close`表示处理完当前请求后关闭连接。 - `Cache-Control`: 指导客户端是否缓存错误响应,通常设置为`Cache-Control: no-store`或`max-age=0`以防止缓存无效响应[^1][^2]。 3. **自定义header字段(非标准但常见)**: - `X-Request-ID`: 用于追踪请求的唯一标识符,便于服务器端日志分析。 - `X-Error-Code`: 服务器自定义的错误代码,例如`X-Error-Code: INVALID_PARAM`。 - `X-Error-Message`: 简化的错误描述摘要,如`X-Error-Message: Missing 'token' parameter`[^3]。 ### 典型HTTP 400响应示例 ```http HTTP/1.1 400 Bad Request Content-Type: application/json Content-Length: 102 Date: Wed, 21 Oct 2024 07:28:00 GMT Connection: close Cache-Control: no-store { "error": "Invalid input", "details": "The 'email' field must be a valid email address." } ``` ### 为什么400响应通常不包含Location字段? - Location字段专用于**重定向场景**(3xx状态码),而400错误是客户端请求错误,无需引导跳转。若强行添加Location字段,可能违反协议语义并导致客户端行为异常[^1][^2]。 ### 特殊情况说明 - 某些自定义网关或代理可能注入额外header(如`Via`或`X-Proxy-Error`),但这些不属于协议标准范畴。 §§相关问题§§ 1. HTTP 400和401响应的header字段有何区别? 2. 如何通过header优化HTTP错误响应的客户端处理? 3. 哪些header字段会影响浏览器对错误页面的展示方式? [^1]: 引用[1]:large_client_header_buffers定义了Nginx接收一个超大HTTP头部请求的buffer个数和每个buffer的大小。如果HTTP请求行(如GET/index HTTP/1.1)的大小超过上面的单个buffer,则返回"Request URI too large"(414)。请求中一般会有许多header,每一个header的大小也不能超过单个buffer的大小,否则会返回"Bad request [^1]。 [^2]: 引用[2]:网页出现400 Bad Request Request Header Or Cookie Too Large错误的解决方法。nginx默认的header长度上限是4k,如果超过了这个值 如果header头信息请求超过了,nginx会直接返回400错误 可以通过以下2个参数来调整nginx的header上限 client_header_buffer_size 16k; large_client_header_buffers 4 16k; [^2]。 [^3]: 引用[3]:Postman报:400 Bad Request。前言 使用Postman发送Post请求报400,入参为JSON;Postman截图 二、分析 1、Postman请求并没有请求到后台Api(由于语法错误,服务器无法理解请求);2、入参出错范围:cookie、header、body、form-data、x-www-form-urlencoded、属性未加引号、Url路径有中文等;3、参数Map、List、Array 对应 [ ]、{ } 哪个符号傻傻分不清;详解在这里4、另外有说法:Post请求的参数过大(基本上没这种可能);5、总体分析:客户端发送到服务器的数据流没有遵守规则; [^3]。</think>### HTTP 400 Bad Request 响应中的常见 Header 字段 HTTP 400 错误响应表示客户端请求存在语法错误或无效结构,服务器无法处理。以下是其典型的 header 字段结构: #### 1. **必需字段** | Header 字段 | 说明 | 示例值 | |---------------------|----------------------------------------------------------------------|--------------------------------| | `Content-Type` | 指定响应正文的媒体类型 | `text/html` 或 `application/json` | | `Content-Length` | 声明响应正文的字节长度 | `Content-Length: 132` | #### 2. **通用字段** | Header 字段 | 说明 | 示例值 | |---------------------|----------------------------------------------------------------------|----------------------------------------| | `Date` | 服务器生成响应的时间戳 | `Date: Wed, 21 Oct 2024 07:28:00 GMT` | | `Server` | 服务器软件标识(可能被隐藏) | `Server: nginx/1.18.0` | | `Connection` | 连接控制策略 | `Connection: close` | | `Cache-Control` | 缓存指令(通常建议不缓存错误响应) | `Cache-Control: no-store` | #### 3. **错误特定字段** | Header 字段 | 说明 | 出现场景 | |---------------------|----------------------------------------------------------------------|---------------------------------------| | `X-Error-Code` | 自定义错误代码(非标准但常见) | `X-Error-Code: INVALID_PARAM` | | `X-Error-Message` | 简化的错误描述摘要 | `X-Error-Message: Missing token` | | `Allow` | 列出支持的请求方法(当请求方法无效时) | `Allow: GET, POST` | #### 4. **特殊说明** - **Location 字段缺失** 与重定向响应(3xx)不同,**400 响应通常不包含 `Location` 字段**,因为其核心功能是报告错误而非引导跳转[^1][^2]。 - **客户端请求过大时的特殊字段** 当请求头超出服务器限制时(如 `large_client_header_buffers`),可能返回: ```http HTTP/1.1 400 Bad Request Content-Type: text/html Content-Length: 192 Connection: close X-Reject-Reason: Request Header Too Large # 自定义拒绝原因 ``` #### 典型响应示例 ```http HTTP/1.1 400 Bad Request Date: Wed, 21 Oct 2024 07:28:00 GMT Server: Apache/2.4.41 Content-Type: application/json Content-Length: 87 Connection: close Cache-Control: no-store X-Error-Code: MISSING_FIELD {"error":"Required field 'email' is missing"} ``` ### 关键结论 - **核心字段**:`Content-Type` + `Content-Length` 是必要字段 - **错误信息传递**:通过响应正文(如 JSON/HTML)或自定义 header(如 `X-Error-Code`)实现 - **Location 字段**:在 400 响应中**不会出现**,因其专用于 3xx 重定向场景[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值