HTTP报文中的HTTP信息

一、编码提升传输速率

编码的好处:有效处理大量的访问请求

编码的弊端:会消耗更多的CPU资源

报文主体&实体主体

报文:HTTP通信的基本单元,8位组字节流组成,通过HTTP通信传输

实体:作为请求或响应的有效载荷数据被传输,实体首部+实体主体

一般情况下 报文=实体

编码操作时 报文≠实体 实体主体的内容发生了变化

常见的内容编码:gzip、compress(UNIX系统的标准编码)、deflate、identity(不编码)

分块传输编码:将实体主体分块,分割发送数据,逐步显示在页面。

二、发送多种数据的多部分对象集合

MIME多用途因特网邮件扩展机制:允许邮件处理文本、图片、视频等多个不同类型的数据。MIME中使用多部分对象集合的方法来容纳多份不同类型的数据。

多部分对象集合包含的对象包括:

  1. multipart/form-data:在Web表单文件上传时使用

  2. multipart/byteranges:状态码为206 Partial Content响应报文包含多个范围的内容时使用

三、获取部分内容的范围请求

下载中断问题的解决:可恢复机制,从下载出恢复下载

可恢复机制的实现:在请求中指定下载的实体范围。

例如:

请求5001-10000字节:Range: bytes=5001-10000

请求5001之后全部的内容:Range: bytes=5001-

从一开始到3000字节和5000-7000字节的多重范围:Range: bytes=-3000, 5000-7000

响应会返回状态码位206Partial Content的响应报文,如果是多重范围的范围请求,会在首部字段的Content-Type中标明multipart/byteranges。

如果服务器无法响应范围请求,则会返回状态码200OK和完整的实体请求

四、内容协商

内容协商机制:客户端和服务端就响应的资源内容进行交涉,提供给客户端最为合适的资源。内容协商的判断基准:响应资源的语言、字符集、编码方式等。

具体的应用举例:当浏览器默认语言是英语/中文,访问相同的WEB页面,显示对应的英文/中文。

请求报文中的某些首部字段可以作为判断的基准:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language

内容协商技术的三种类型

1. 服务器驱动协商:以请求的首部字段作为参考,在服务端处理。以浏览器发送的信息作为判定依据,对用户而言不一定最优。

2. 客户端驱动协商:用户在浏览器中进行选择。或者利用JavaScript脚本在Web页面上字段进行选择。例如根据OS和浏览器类型,自动切换为PC页面/手机页面。

3. 透明协商:服务器驱动协商+客户端驱动协商

HTTP状态码

一、HTTP状态码及其分类

状态码:表示HTTP请求的返回结果,用于标记服务器端处理是否正常,通知出现的错误。

状态码的类别
  类别 原因
1XX 信息性状态码 接收的请求正在处理
2XX 成功状态码 请求正常处理完毕
3XX 重定向状态码 需要进行附加操作以完成请求 
4XX 客户端错误 服务端无法处理请求
5XX 服务端错误 服务处理请求出错

二、成功状态码2XX

1. 200 OK

表明从客户端发来的请求在服务端正常处理了。响应报文内,随状态码一起返回的信息会根据方法的不同而不同。GET获取到的信息是请求资源的实体。HEAD获取到的是实体首部,不获取实体的主体部分。

2. 204 OK

表明服务器接收的请求已经成功处理,但是返回的响应报文中不包含实体的主体部分。例如,浏览器发出请求后得到204响应,则浏览器显示的页面不会更新。

使用场景:需要客户端向服务端发信息,但不需要发送新信息内容。

3. 206 Partial Content

表示客户端发送了范围请求,服务端成功处理了请求。响应报文中包含由Content-Range指定范围的实体内容。

三、3XX重定向

3XX表明浏览器需要执行某些特殊的处理,从能正确处理请求

1. 301 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的URI,之后使用的资源是新的URI的内容。(客户端要主动变更书签引用)【搬家房子卖了】

2. 302 Found

临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。(客户端不需要操作)已移动的资源对象的URI将来可能还会发生改变。【去旅游了暂时住在宾馆 旅游结束还可以回去】

3. 303 See Other

表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。类似于302,但303明确表示了要让客户端用GET方法获取资源。

例如:使用POST访问CGI程序,执行结果是希望客户端以GET方法重定向到另一个URI,返回303。(现在很多浏览器将302视为303)

4. 304 Not Modified

表示客户端发送附带条件(GET请求报文中包含if-match/if-modified-since/if-none-match/if-range/if-unmodified-since)的请求时,服务端允许请求访问资源,但是不满足条件。304返回时,不包含任何响应的主体部分。【虽然是3XX但是和重定向无关】

说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GET 或HEAD 或在请求中附带了头部信息: If-None-Match 或If-Modified-Since。

如果是 200 OK ,响应会带有头部 Cache-Control, Content-Location, Date, ETag, Expires,和 Vary.

5. 307 Temporary Redirect

临时重定向,和302相同,302禁止POST变换为GET,但大家不遵守。307会遵照浏览器的标准,不会从POST变成GET,但是处理响应时的行为,不同的浏览器有不同的情况。

四、客户端错误4XX

1. 400 Bad Request

请求报文中存在语法错误,服务端无法理解请求。浏览器会像200 OK一样对待该状态码。

2. 401 Unauthorized

请求需要由通过HTTP认证的认证信息。如果之前已经进行过1此请求,则表示用户认证失败。必须包含一个适用于被请求资源的WWW-Authenticate首部用于质询用户信息。当浏览器初次接收到401时弹出认证的堆化窗口。

3. 403 Forbidden

请求资源的访问被服务器拒绝了。例如:没有获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源ip地址视图访问)

4. 404 Not Found

服务器上无法找到请求的资源。

五、服务端错误5XX

1. 500 Internal Servcer Error

服务器在执行请求时发生了错误。Web应用中存在bug或某些临时的障碍。

2. 503 Serivce Unavailable

表明服务器很忙,处于超负载或正在进行停机维护,现在无法处理请求。如果直到接触繁忙状态需要的时间,可以写入Retry-After首部字段再返回给客户端。

状态码和状态的不一致:web应用程序的内部发生错误,状态码仍为200 OK的情况,也时常发生。

【HTTP】HTTP报文&状态码的更多相关文章

  1. Http报文 状态码

    一.HTTP报文 1.HTTP报文介绍 HTTP报文:用于HTTP协议交互的信息. HTTP报文由报文头部和报文主体(非必须)构成,中间由空行来分隔. 1.1 请求报文:客户端发起的报文. 1).报文 ...

  2. HTTP响应报文应答状态码及含义

    本应答报文状态码是老猿结合多方资料收集综合后并加以老猿自己的理解进行说明的应答报文状态码,应该是最新最全解释最详尽的,供大家参考:

  3. php分享十七:http状态码

    一:http状态码 (200,301,302,304,305,400,401,403,404,500,501,502,503,504) HTTP状态码(HTTP Status Code)是用以表示网页 ...

  4. HTTP的报文与状态码

    本文是<HTTP权威指南>的读书笔记 HTTP报文是简单的格式化数据块.每条报文都包含一条来自客户端的请求或一条来自服务器的响应.它们由三部分组成: 对报文进行描述的起始行(start l ...

  5. HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...

  6. HTTP请求响应报文 - 相关状态码 - GET_POST请求方法

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET ...

  7. 《图解Http》 2-6章: 基础,报文,状态码,首部。

    HTTP协议和Cookie 是stateless协议,自身不对请求和响应之间的通信状态进行保存.但随着技术发展,为了实现保存状态的功能,引入了Cookie技术. Cookie在请求和响应报文中写入信息 ...

  8. http的报文结构和状态码的含义

    HTTP响应报文解剖 响应报文结构 HTTP的响应报文也由三部分组成(响应行+响应头+响应体): 以下是一个实际的HTTP响应报文: ①报文协议及版本: ②状态码及状态描述: ③响应报文头,也是由多个 ...

  9. (第三章,第四章)http报文内的http信息,返回结果的http状态码

    第三章 http报文内的http信息 用于http协议交互的信息被称为http报文,包括请求报文和响应报文. 1.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的 ...

随机推荐

  1. 学数据库你竟然不用用JAVA写代码,可惜你遇到了我! JAVA连接数据库(JDBC)的安装使用教程

    Step 1 你得有Eclipse 没有出门右拐,我教不了你. Step 2 你得有Mysql MySQL的详细安装过程,我在另一篇博客中给出.戳我 Step 3 安装JDBC 可以去官网下,如果用的 ...

  2. CF1288C-Two Arrays (DP)

    You are given two integers n and m. Calculate the number of pairs of arrays (a,b) such that: the len ...

  3. JavaSpring中级联查询

    一对一级联查询映射文件PersonMapper.xml代码: <?xml version="1.0" encoding="UTF-8"?> < ...

  4. 解决Vue中文本输入框v-model双向绑定后数据不显示的问题

    前言 项目中遇到一个问题就是在Vue中双向绑定对象属性时,手动赋值属性后输入框的数据不实时更新的问题. <FormItem label="地址" prop="eve ...

  5. awk调用外部程序

    程序的功能很简单: 调用外部解密程序decoder,将文件第二列字段解密,然后写入新文件中. BEGIN { OFS = "\t" } { outputFileName = &qu ...

  6. Envoy 基础教程:使用 Unix Domain Socket(UDS) 与上游集群通信

    Envoy Proxy 在大多数情况下都是作为 Sidecar 与应用部署在同一网络环境中,每个应用只需要与 Envoy(localhost)交互,不需要知道其他服务的地址.然而这并不是 Envoy ...

  7. C. Two Arrays(思维DP或组合数学)

    \(首先很容易想到一个O(n^4m)的DP\) \(设dp\ [i]\ [j]\ [q]\ 为长度i,a数组以j结尾,b数组以q结尾(q>=j)\) for(int i=1;i<=n;i+ ...

  8. STM32CubeMX 多通道 ADC DMA 配置 测试小程序

    要点: 1.STM32F103C8T6单片机 2.ADC+DMA 多通道 重点是ADC+DMA配置,ADC+DMA配置如下 其他配置略略略略. 然后各位自行直看.ioc文件,生成代码后在while之前 ...

  9. SQL语言概况(4.1)

    SQL语言概况(4.1) 目录 SQL语言概况(4.1) 4.1 SQL语言概况 4.1.1 历史及标准简介 4.1.2 SQL语言定义及特点 4.1.3 使用说明 参考资料: 数据库原理及设计(第3 ...

  10. iOS开发--性能调优记录

    CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).但是由于历史原因,我们可以说CPU所做的工作都在软件层面,而GPU在硬件层面 对于图像处理,通常用硬件 ...