之后的第一条HTTP报文,宅在家里确实效率不高。最近在忙着总结前端面试相关的技术文档,等完美度达到70%以上的时候再打开!!!HTTP对于前端的重要性不用说了。本文只介绍HTTP报文的内容构成。如果您对以下内容还不熟悉,那说明您还需要加把劲!!HTTP消息由多行以ASCII编码的文本组成。在HTTP/1.1及更早版本中,这些消息是通过连接公开发送的。在HTTP/2中,曾经将人类可读的消息拆分为多个HTTP帧以进行优化和性能改进。让我们看看请求和响应实际上是什么样的:HTTP消息由HTTP请求和响应组成,结构相似,由以下部分组成:起始行用于描述要执行的请求,或相应的状态,成功或失败.起始行始终是单行;一组可选的HTTP标头,指定请求或描述消息文本;一个空行,表示有关请求的所有元数据已发送;包含请求相关数据(例如HTML表单内容)或响应相关文档的可选文本。文字的大小由起始行的HTTP标头指定;HTTP消息中的起始行和HTTP标头统称为请求标头,其有效负载称为消息文字。HTTP请求开始行HTTP请求是客户端发送的消息,用于促使服务器执行操作。起始行(start-line)包含三个元素:HTTP方法;请求目标(requesttarget),通常是一个URL,或者是协议、端口、域名的绝对路径;HTTP版本,它定义了消息其余部分的结构,作为所需响应版本的指示符;一个不区分大小写的请求标头字符串,后跟一个冒号(:)和一个取决于标头值的结构。整个标题(包括值)由一行组成,可能会很长。请求标头分为几组:通用标头,例如Via,适用于整个消息;请求头,如User-Agent、Accept-Type,通过进一步定义(如Accept-Language)、Either给定上下文(如Referer),或条件限制(如If-None)来修改请求;实体头(Entityheaders),比如Content-Length,适用于请求的body。显然,如果请求中没有正文,则不会发送此类标头。请求的最后一部分是它的正文。并非所有请求都有主体:例如获取资源的请求、GET、HEAD、DELETE和OPTIONS,通常它们不需要主体。一些请求向服务器发送数据以更新数据:常见的情况是POST请求(包含HTML表单数据)。HTTP响应起始行HTTP响应的起始行称为状态行,包含以下信息:协议版本,通常为HTTP/1.1;状态码;状态文本;典型的状态行如下所示:HTTP/1.1404NotFound响应标头是一个不区分大小写的字符串,后跟一个冒号(:)和一个其结构取决于标头类型的值。整个标题(包括它的值)表示为一行。这些响应标头可以分为几组:通用标头,例如Via,适用于整个消息;响应标头,例如Vary和Accept-Ranges,提供与状态行不匹配的有关服务器的其他信息;实体标头,例如Content-Length,适用于请求的正文。显然,如果请求中没有正文,则不会发送此类标头;响应主体响应的最后一部分是响应主体。并非所有响应都有正文:具有状态代码(例如201或204)的响应通常没有正文。Body大致可以分为三类:Single-resourcebody,由一个已知??长度的文件组成。类型主体由两个标头定义:Content-Type和Content-Length;由未知长度的单个文件组成的单资源主体通过将Transfer-Encoding设置为chunked使用块编码。多资源主体,由多部分主体组成,每个部分包含不同的信息。但这是比较少见的;总结HTTP请求体格式POST/queryHTTP/1.1Host:web-api.juejin.imConnection:keep-aliveContent-Length:132Origin:https://juejin.imUser-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/78.0.3904.108Safari/537.36Content-Type:application/jsonAccept:*/*Referer:https://juejin.im/timelineAccept-Encoding:gzipAccept-Language:zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7{"variables":{"type":"ARTICLE","since":"2019-12-17T02:22:52.801Z"},"extensions":{"query":{"id":"0d2f86267cfa529141a196314c2038e2"}}}HTTP响应体格式HTTP/1.1200OKServer:nginx/1.10.2Date:Tue,18Feb202004:28:54GMTContent-Type:application/jsonContent-Length:56Connection:closeAccess-Control-Allow-Credentials:trueAccess-Control-Allow-Methods:GET、PUT、POST、DELETE、PATCHAccess-Control-Allow-Origin:*Access-控制允许标头:内容类型、X-Agent、X-Token、X-Legacy-Token、X-Legacy-Uid、X-Legacy-Device-Id、X-Legacy-New-Token、X-Request-IdAccess-Control-Max-Age:86400{"data":{"followingActivityFeed":{"newItemCount":348}}}补充HTTP/1.x消息有一些性能上的缺点:Header不像body,不会被压缩;两个数据包之间的头部通常非常相似,但它们仍然在连接中重复传输;不能重复使用在同一台服务器上打开多个连接时:TCP热连接比冷连接更有效;HTTP2解决方案:HTTP/2引入了一个额外的步骤:它将HTTP/1.x消息分解为帧并将它们嵌入到流中。数据帧和头帧是分开的,这将允许头压缩。组合多个流,一个称为多路复用的过程,允许更有效的底层TCP连接。HTTP框架现在对Web开发人员是透明的。在HTTP/2中,这是HTTP/1.1和底层传输协议之间的附加步骤。Web开发人员无需对他们使用的API进行任何更改即可利用HTTP框架;当浏览器和服务器都可用时,HTTP/2将被打开和使用。关注公众号,回复加群,加群主微信,拉入交流群,有问题一一解答,欢迎加入。感谢阅读,欢迎关注我的公众号云影天空,带你解读前端技术,掌握最本质的技能。
