http请求报文和响应报文

HTTP报文由请求报文和响应报文组成,包括请求行、请求头部、空行、请求体或响应行、响应头部、空行、响应体。Content-Length字段表示报文的长度,不准确会导致读取异常。HTTP状态码如200、404、500等表示不同的响应状态。响应报文也会包含Content-Length、Content-Type等头部信息。
摘要由CSDN通过智能技术生成

说说http请求报文包含什么?(追问:Content-Length知道吗?如果Content-Length的长度 大于报文的实际长度,分析下会有什么问题? )

HTTP报文大致可分为报文首部和报文主体两块,两者由最初出现的空行来划分。
在这里插入图片描述
请求报文由四部分组成(请求行+请求头部+空行+请求体):
请求行:
在这里插入图片描述

  • 请求方法:GET,POST最常见,除此之外还有DELETE,HEAD.OPTIONS,PUT,TRACE。
  • 请求对应的URL地址:它和报文头的Host属性组成完整的请求URL
  • 协议名称以及版本号
    报文头:
    包含若干属性:
    Client-IP:提供了运行客户端的机器的IP地址
    From:提供了客户端用户的E-mail地址
    Host:给出了接收请求的服务器的主机名和端口号,用来指定服务器的域名
    Referer:提供了包含当前请求URI的文档的URL
    User-Agent:将发起请求的应用程序名称告知服务器
    Accept:告诉服务器能够发送哪些媒体类型
    Accept-Charset:告诉服务器能够发送哪些字符集
    Accept-Encoding:告诉服务器能够发送哪些编码方式
    Accept-Language:告诉服务器能够发送哪些语言
    Range:如果服务器支持范围请求,就请求资源的指定范围
    Cookie:客户端用它向服务器传送数据
    Cookie2:用来说明请求端支持的cookie版本
    Connection:字段最常用于要求服务器使用HTP长连接机制,以便其他请求复用

报文体:
它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。

关于Content-Length

Content-Length使用十进制的数字表示了消息的长度, 服务端/客户端通过它来得知后续要读取消息的长度.
Content-Length是HTTP消息长度, 用十进制数字表示的八位字节的数目, 是Headers中常见的一个字段. Content-Length应该是精确的, 否则就会导致异常 (特别地, HTTP1.0中这个字段可有可无).
Content-Length首部指示出报文中实体主体的字节大小. 这个大小是包含了所有内容编码的, 比如, 对文本文件进行了gzip压缩的话, Content-Length首部指的就是压缩后的大小而不是原始大小.
少数情况下发生了Content-Length与实际消息长度不一致, 程序可能会发生比较奇怪的异常, 如:
无响应直到超时.
请求被截断, 而且下一个请求解析出现错乱.
如果Content-Length比实际的长度大, 服务端/客户端读取到消息结尾后, 会等待下一个字节, 自然会无响应直到超时.

如果这个长度小于实际长度, 首次请求的消息会被截取, 而第二次没有发生预期的截断, 而是服务端抛出了异常,上一次请求被截取,剩下的消息, 在第二次请求出现了。导致这种情况的原因就是开启了Connection:keep-alive, 如果使用Connection:close, 所产生的现象就是每一次的请求都被截断, 但不会产生解析混乱(如将上一次剩下的消息拼接到后续的请求消息中).
Content-Length如果存在且生效, 必须是正确的, 否则会发生异常.(大于实际值会超时, 小于实际值会截断并可能导致后续的数据解析混乱)
如果报文中包含Transfer-Encoding: chunked首部, 那么Content-Length将被忽略.

Http的响应报文有哪几部分组成

响应报文由四部分组成(响应行+响应头部+空行+响应体):
响应行:
在这里插入图片描述
报文协议以及版本
状态码以及状态描述
在这里插入图片描述
「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。
「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据
「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
301 和 302 都会在响应头里使用字段 Location指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。
「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。
「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。
「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。

响应报文头:
Content-Length :服务器返回数据时,表明本次回应的数据长度
Content-Type:用于服务器回应时,告诉客户端,本次数据是什么格式
Content-Encoding:字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式
Age:(从最初创建开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Server:服务器应用程序软件的名称和版本
Retry-After:如果资源不可用的话,在此日期或时间重试
Title:对HTML文档来说,就是HTML文档的源端给出的标题
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
响应报文体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙崎流河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值