【前端 · 面试 】HTTP 总结(二)—— HTTP 消息
最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。
争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。
前言
在上一篇文章《HTTP 概述》中我们认识了 HTTP ,知道它是一个规范客户端请求和服务端响应的应用层协议,今天,我们来学习一下它里面的另一个重要概念——HTTP 消息。
HTTP 消息
HTTP 消息是服务器和客户端之间交换数据的方式。
分类
HTTP 消息分为两类:
客户端请求消息(requests)—— 由客户端发送用来触发一个服务器上的动作。
服务端响应消息(responses)—— 来自服务器的应答。
构成
典型的 HTTP 消息由以下四部分构成:
起始行(start line) —— 一行起始行用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。
HTTP 头(HTTP headers)—— 表示在 HTTP 请求或响应中的用来传递附加信息的字段,修改所传递的消息(或者消息主体)的语义,或者使其更加精确。
空行(empty line) —— 空行指示所有关于请求的元数据已经发送完毕。
数据体(body)—— 一个可选的包含请求相关数据的正文 (比如HTML表单内容), 或者响应相关的文档。
请求消息和响应消息的构成大体相同。
HTTP 头字段
HTTP 头字段(HTTP header fields)是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分。
它们定义了一个超文本传输协议事务中的操作参数。
HTTP 头部字段可以自己根据需要定义,因此可能在 Web 服务器和浏览器上发现非标准的头字段。
格式
HTTP 头字段是在请求(request)或响应(response)行(一条消息的第一行内容)之后传输的。
协议头的字段特点是:
以明文的字符串格式传输
是以冒号分隔的键名与键值对
以回车(CR)加换行(LF)符号序列结尾
协议头部分的结尾以一个空白字段标识,也就是传输两个连续的 CR + LF。
分类
HTTP 头字段根据实际用途被分为以下 4 种类型:
通用头字段(General Header Fields)
请求头字段(Request Header Fields)
响应头字段(Response Header Fields)
实体头字段(Response Header Fields)
字段值
某些字段中可以包含注释内容(例如User-Agent、Server和Via字段中),这些注释内容可由应用程序忽略。
很多字段的值中可以包含带有权重的质量(quality,常被简称为Q)的键值对,指定的“重量”会在内容协商的过程中使用。
大小限制
标准中没有对每个协议头字段的名称和值的大小设置任何限制,也没有限制字段的个数。
然而,出于实际场景及安全性的考虑,大部分的服务器、客户端和代理软件都会实施一些限制。
例如,Apache 2.3服务器在默认情况下限制每个字段的大小不得超过8190字节,同时,单个请求中最多有100个头字段。
总结
HTTP 消息分为请求消息和响应消息,完整的消息由四部分组成。
HTTP 头可以分为四类。
~
~ 本文完,感谢阅读!