当前位置: 首页 > article >正文

HTTP协议-报文结构

文章目录

  • 一、HTTP 报文结构
  • 二、HTTP 报文结构-起始行
    • 起始行-请求行
    • 起始行-状态行
  • 三、HTTP 报文结构-头部字段
    • 常用头字段
      • HOST
      • User-Agent
      • Referer
      • Date
      • Server
      • Allow
      • Accept-Ranges
    • header常见问题
  • 四、HTTP 报文结构-Body
    • 两种传输HTTP包体的方式
      • Content-Length 发送HTTP消息时已经确定包体的全部长度
      • Transfer-Encoding = chunked 发送HTTP消息时不能确定包体的全部长度



一、HTTP 报文结构

HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成。

  1. 起始行(start line) : 描述请求和响应的基本信息;
  2. 头部字段集合(header) : 使用key-value形式更详细地说明报文;
  3. 消息正文(entity): 实际传输的数据,它不一定是纯文本,可以是图片,视频等二进制数据。

HTTP协议规定报文必须有header,但是可以没有body,而且在header之后必须有一个“空行”,也就是“CRLF”, 十六进制的“0D0A”

二、HTTP 报文结构-起始行

起始行-请求行

请求行由三部分构成:

  1. 请求方法: 例如GET/POST,标识对资源的操作
  2. 请求目标:表示一个URI
  3. 版本号:标识报文使用的HTTP版本

request-line = method SP request-target SP HTTP-version CRLF

起始行-状态行

状态行同样由三部分构成:

  1. 版本号:表示报文使用的HTTP协议版本;
  2. 状态码:一个三位数,用代码的形式表示处理结果;
  3. 原因:作为数字状态码的补充,是更详细的解释文字,帮助人理解原因。

status-line = HTTP-version SP status-code SP reason-phrase CRLF

HTTP/1.1 200 OK

三、HTTP 报文结构-头部字段

头部字段header,是key-value的形式,key和value之间用“:”分隔,最后用CRLF换行表示字段结束。

常用头字段

HOST

HOST字段属于请求字段,只能出现在请求头里,唯一一个HTTP/1.1规范里面要求必须出现的字段。

User-Agent

User-Agent是请求字段,只出现在请求头里。

Referer

浏览器的请求,来自的页面,对自动添加的头部。
常用来统计分析,缓存优化,防盗链。

Date

Date是一个通用字段,通常出现在响应头里,表示HTTP报文创建的时间,客户端可以使用这个时间和其他字段决定缓存策略

Server

指明服务器上所用软件的信息。响应字段,不建议暴露给外界。

Allow

Allow: 告诉客户端,服务器上的URI对应的资源允许哪些方法的执行。

Accept-Ranges

告诉客户端服务器上该资源是否允许range请求。
例如:
Accept-Ranges: bytes
Accept-Ranges: none

header常见问题

1)Nginx,默认请求头大小不超过8K,可以通过指令“large_client_header_buffers”修改
2)默认情况下,Nginx不允许头部字段使用“_”,配置指令“underscores_in_headers on”可以解除限制,但是不推荐。

四、HTTP 报文结构-Body

两种传输HTTP包体的方式

Content-Length 发送HTTP消息时已经确定包体的全部长度

使用Content-Length头部明确指明包体的长度,表示包体的字节数。

Transfer-Encoding = chunked 发送HTTP消息时不能确定包体的全部长度

包含Transfer-Encoding头部后Content-Length头部会被忽略。



http://www.kler.cn/a/467598.html

相关文章:

  • 后台运行 Python
  • 【2025年最新】OpenWrt 更换国内源的指南(图形界面版)
  • 【强化学习】演员评论家Actor-Critic算法(万字长文、附代码)
  • Vue 全局事件总线:Vue 2 vs Vue 3 实现
  • 代码随想录 day62 第十一章 图论part11
  • 基于ESP32的桌面小屏幕实战[5]:PCB下单
  • Java 内存溢出(OOM)问题的排查与解决
  • 《攀爬者》
  • 探讨面向未来的框架新技术:逻辑驱动和自适应框架的突破
  • k8s集群,CRI-Docker部署条件及方法
  • Spring Cloud微服务多模块架构:父子工程搭建实践
  • 提示词教程:零样本提示
  • ArkTs-@Builder引用传递问题
  • 【MongoDB详解】
  • 旧服务改造及微服务架构演进
  • 如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
  • 现代光学基础6
  • ruckus R510升级到Unleashe后不能访问
  • 端到端性能体验稳定性优化常见方案
  • webpack01
  • Elasticsearch 文档批处理 混合处理 批量操作
  • (四)基于STM32通过Event Recoder实现时间测量功能
  • Android中创建ViewModel的几种方法
  • 体验谷歌最新Gemini 2.0 Flash原生多模态音视频对话桌面分享功能
  • 数据结构C语言描述7(图文结合)--哈希、哈希冲突、开放地址法、链地址法等实现
  • 阿里云效自动化部署 Docker镜像