【HTTP】HTTP报文&状态码
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报文&状态码的更多相关文章
- Http报文 状态码
一.HTTP报文 1.HTTP报文介绍 HTTP报文:用于HTTP协议交互的信息. HTTP报文由报文头部和报文主体(非必须)构成,中间由空行来分隔. 1.1 请求报文:客户端发起的报文. 1).报文 ...
- HTTP响应报文应答状态码及含义
本应答报文状态码是老猿结合多方资料收集综合后并加以老猿自己的理解进行说明的应答报文状态码,应该是最新最全解释最详尽的,供大家参考:
- php分享十七:http状态码
一:http状态码 (200,301,302,304,305,400,401,403,404,500,501,502,503,504) HTTP状态码(HTTP Status Code)是用以表示网页 ...
- HTTP的报文与状态码
本文是<HTTP权威指南>的读书笔记 HTTP报文是简单的格式化数据块.每条报文都包含一条来自客户端的请求或一条来自服务器的响应.它们由三部分组成: 对报文进行描述的起始行(start l ...
- HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结
HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...
- HTTP请求响应报文 - 相关状态码 - GET_POST请求方法
HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET ...
- 《图解Http》 2-6章: 基础,报文,状态码,首部。
HTTP协议和Cookie 是stateless协议,自身不对请求和响应之间的通信状态进行保存.但随着技术发展,为了实现保存状态的功能,引入了Cookie技术. Cookie在请求和响应报文中写入信息 ...
- http的报文结构和状态码的含义
HTTP响应报文解剖 响应报文结构 HTTP的响应报文也由三部分组成(响应行+响应头+响应体): 以下是一个实际的HTTP响应报文: ①报文协议及版本: ②状态码及状态描述: ③响应报文头,也是由多个 ...
- (第三章,第四章)http报文内的http信息,返回结果的http状态码
第三章 http报文内的http信息 用于http协议交互的信息被称为http报文,包括请求报文和响应报文. 1.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的 ...
随机推荐
- 可运行的Java RMI示例和踩坑总结
简述 资料参考: https://docs.oracle.com/javase/tutorial/rmi/overview.html https://blog.csdn.net/bigtree_372 ...
- CF思维联系–CodeForces - 222 C Reducing Fractions(数学+有技巧的枚举)
ACM思维题训练集合 To confuse the opponents, the Galactic Empire represents fractions in an unusual format. ...
- SVN 应用
1.从服务器上down 资料 在电脑上安装SVN客户端 在电脑本地创建个文件夹作为版本库 进入 xfssvn 文件夹右击鼠标选择 SVN Checkout 或 SVN Update 输入服务器中配置好 ...
- linux 进程管理和内存分配
1.进程相关概念 进程:正在运行中的程序 内核功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等 Process:运行中的程序的一个副本,是被载入内存的一个指令集合 进程 ID(Pro ...
- python 中关于无法导入自己写的类。解决方法
1.错误描述 之前在学习python的过程中,导入自己写入的包文件时.from 自己写的类,会发现没有弹出选择.并且全输入类名称后会发现类名与相关导入的方法会爆红.如图: 2.原因分析 pycharm ...
- 【matlab系列汇总】小白博主的matlab学习实战快速进阶之路(持续更新)
我把之前在学习和工作中使用matlab的技巧和使用教程等相关整理到这里,方便查阅学习,如果能帮助到您,请帮忙点个赞: MATLAB可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其他编程 ...
- SwiftUI - 一起来仿写微信APP之一首页列表视图
简介 最近在学习 SwiftUI ,我一般都是先去学习界面布局,所以就想着仿写一下经常使用的软件的界面,所以先拿微信开刀.因为不想一次性发太多的内容,所以只好将主题分解,一部分一部分地去讲,接下来我们 ...
- [hdu5319]二进制表示,简单模拟
题意:给一个矩形,矩形里面画了4种符号,'.'表示没画线,'R'表示画了红线,'B'表示画了蓝线,'G'表示红线和蓝线同时画了,并且矩形主对角线上只能画红线,副对角线上只能画蓝线,问最少画多少条线才能 ...
- 网络通信-在浏览器输入url,基于TCP/IP协议,浏览器渲染的解释
知识点1: 网络模型 TCP/IP四层 和ISO七层模型 (统一省略后面层字.比如传输代表传输层) 知识点2: 在应用层中TCP建立连接,经历的三次握手协议 首先:,TCP协议是什么? 为什么要三次握 ...
- 04JAVA基础数组
概念 存储同一种数据类型的多种元素的容器 数组初始化 动态初始化 设定数组长度,系统自动分配默认值 int[] arr = new int[3]; 静态初始化 给定数组默认值,系统自动分配长度 int ...