首页 > 其他分享 >【HTTP】190-http 状态码竟然可以这样记

【HTTP】190-http 状态码竟然可以这样记

时间:2022-10-13 15:38:51浏览次数:47  
标签:HTTP 请求 GET 302 190 访问 http 服务端 客户端

标题皮了一下,但是内容应该算是比较用心的,不是直接抄了一下官方文档和一堆抽象的术语,尽量配合实例解释的通俗一些。

基本介绍

状态码(Status Code)和原因短语(Reason Phrase)用于简单描述请求的结果。常见的比如:

  • 200 OK,表示请求成功。
  • 404 Not Found表示请求的资源未找到。

原因短语(上面的ok 和Not Found)是对状态码的解释说明。

形如 ​​200​​​这样的状态码,这里的 ​​3位数字​​中第1位数字,通常表示响应的类别(会有一两个例外),大致可以分成以下几类(完整的状态码表,参见http1.1-RFC6):

状态码

含义

1xx

请求正被处理

2xx

请求成功处理

3xx

请求需要附加操作,常见的例子如重定向

4xx

客户端出错导致请求无法被处理

5xx

服务端处理出错

4、5常被用在排查bug时前后端互相甩锅-_-!下面详细介绍常用的状态码和原因短语。

分类

2xx

200 OK

表示请求已经被正常处理,这个比较常见,就不多说了。

204 NO Content

表示请求成功,但是响应的报文中不含实体主体。通常用于只需要客户端向服务端发送信息,而不需要接受新信息的情况使用。

这么官方且抽象的描述显然不是我的风格,举例:现在很常见的一种请求类型 ​​option​​,通常被用来做正式请求的预请求,这个请求只需要确认后续的请求能不能通过,即只需要一个结果,而不需要返回其他内容,这类请求成功时就会返回204。

相信大家小时候都经常考试,如果拿试题来打个比方,那么:

  • 其他状态码可以比喻为填空题:客户端提问(发请求),服务端给出详细答案(返回实体内容)。
  • 204可以理解为判断题:客户端提问(发请求),服务端给出判断,对或者错(只要响应头有状态码,不需要实体内容)。

206 Partial Content

字面意思:只返回了请求资源的部分。这种情况必须提到提到一个请求头 ​​Range​​​——在 ​​http​​的请求中,这个头部用来表示范围请求,例如:

    1. ​​'Range':byte=5001-10000 // 表示本次要请求资源的5001-10000字节的部分​​

    这种情况下,如果服务器接受范围请求并且成功处理,就会返回 ​​206​​,并且在响应的头部返回:


    1. ​​'Content-Range':bytes 5001-10000/10000 // 表示整个资源有10000字节,本次返回的范围为 5001-10000字节​​
    3xx

    301 Moved Permanently

    字面意思:资源被永久重定向了。这种情况下响应的头部字段 ​​Location​​中一般还会返回一个地址,用来表示要新地址。例如客户端发起一个请求,要访问a站点,此时收到的响应如下:


    1. ​​301 Moved Permanently ​​
    2. ​​...​​
    3. ​​Location:`b.com`​​
    4. ​​...​​
    5.
    6. ​​//上述内容表示:亲,您请求的资源已经永久转移啦,这边建议您去新的地址b.com访问呢,以后也请直接访问新地址哦​​

    302 Found

    字面意思:资源临时重定向了。和301的唯一区别就在于一个是临时,一个是永久:还是举上面的例子,响应如下:


    1. ​​302 Found​​
    2. ​​...​​
    3. ​​Location:`b.com`​​
    4. ​​...​​
    5. ​​//上述内容表示:亲,您请求的资源被临时转移啦,后面也有可能再次转移,所以这边建议您本次去新的地址b.com访问,以后的话还是先访问原来地址哦,有任何变化mm依然会热心为你解答​​

    303 See Other

    这个和302很像,但是有个细微区别是,除了会提示客户端去请求 ​​Location​​​以外,还会要求请求要使用 ​​Location​​​时使用 ​​GET​​方法。 在这补充一下一个历史背景:请求返回301 302 303 时,几乎所有浏览器都会把原先的POST请求改为GET请求。虽然FRC1945和RFC2068规范中有规定:不允许客户端在重定向时修改方法。

    简单的说,实际的浏览器在处理301和302时,默认就会把原先的POST请求改为GET请求,所以实际上使用303的意义,单纯只是让语义化更清晰点(303表示服务器明确告诉客户端,你要使用 ​​GET​​​方法访问 ​​location​​​;如果是302,就是仅仅告诉客户端要访问 ​​location​​​,不限制方法,但是实际上客户端自己也会用 ​​GET​​方法访问)。

    304 Not Modified

    字面意思是:资源未改变,可直接使用缓存。

    这种响应一般是 ​​GET​​请求中带有附加条件,例如请求头中含有 ​​if-Match,if-Modified-Since​​​等( ​​if-Match​​​表示只请求带有特殊标记的资源, ​​if-Modified-Since​​表示请求指定时间后未变更的资源,因为本文主要讲解状态码,所以不在此引入太多http头部的相关内容,这里是为了简单解释下附加条件请求的含义)。

    这种情况下,服务端不会返回响应主体,含义就是:”从你上次访问以来这个资源都没变过哟,直接使用你本地的缓存就行啦“。

    304就是3xx里面的一个特例,因为它不算是一个重定向(一般我们认为重定向要给出一个新的地址让客户端去访问,304如果一定要解释为重定向,只能解释为让客户端转去访问缓存-_-)。

    307 Temporary Redirect

    这个重定向是为了解决前面刚刚介绍的一个历史背景问题: ​​302​​​时浏览器默认会转用 ​​GET​​​方法去请求 ​​Location​​​,而如果是 ​​307​​​, 含义就是严格限制不允许从 ​​POST​​​转为 ​​GET​​,这个目前我在实际工作中很少遇到。

    4xx

    4xx表示一般是客户端发生了错误(这位前端同学,乖乖接了这个bug吧!)。

    400 Bad Request

    (这个状态码相信大家一定很不陌生,特别是入门的新同学~)400的含义简单粗暴:“对不起,你的请求中有语法错误”,那具体是什么语法错误呢?答案是 —— 不一定,一般来说响应报文里会有一些提示,例如:

    • “哎呀,你多加了什么请求头,我不能接受呀”
    • “哎呀,你地址不是不是写错了,这个uri不存在啊”
    • “哎呀,你是不是请求方法错了,这个uri之只能用put而不是post”
    • 下面请各位随意补充
    • ...

    401 Unauthorized

    字面意思:未经过认证。一般在后台系统之类的应用里,用户登录之后会获得一个身份认证信息,然后生成 ​​mac​​​之类的信息,放在请求头的 ​​Authorization​​字段里,发送给服务端,如果这个认证信息有问题或者根本没发送,就会出现这个状态码。

    403 Forbidden

    这个就简单了:禁止访问也就是无权限访问。至于具体为什么禁止,服务器可以在响应内容的实体部分给出,当然也可以不给(没错,我服务端就是这么了不起,为所欲为!)。

    404 Not Found

    很常见了,字面含义,服务端没有找到所请求的资源,经验表明,一般这个错误是客户端的请求url写错了(别问我怎么知道的)。

    5xx

    5xx表明服务端发生了错误(真是个令人开心的消息,老板,你看不是我的问题!)。

    500 Internal Server Error

    简单粗暴,服务器故障了。啥?你问我什么故障?我哪知道,我只会熟练地把bug转给隔壁的服务端同学。

    503 Service Unavailable

    服务器暂时无法使用,可能是维护或者升级,反正无法使用。

    小结

    本文对常见的一些http状态码和原因做了总结,一方面希望能够给更多入门的同学提供帮助,一方面也做一个归纳总结,方便平时排查bug时速查,文中有一部分可能涉及到了 ​​http头部​​的知识,虽然也想尽可能剥离开来,但是为了解释说明没法也确实完全分割开-_-。

    惯例:如果内容有错误的地方欢迎指出(觉得看着不理解不舒服想吐槽也完全没问题)。如果有帮助,欢迎点赞和收藏,转载请征得同意后著明出处【HTTP】190-http 状态码竟然可以这样记_客户端

    每一个,都是对我最大的肯定!【HTTP】190-http 状态码竟然可以这样记_客户端_02

    标签:HTTP,请求,GET,302,190,访问,http,服务端,客户端
    From: https://blog.51cto.com/u_11887782/5753500

    相关文章

    • 下载https图片工具类
      普通http工具类httpClient访问https图片会报以下错误javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:Nosubjectalternativenames......
    • nginx访问控制,用户认证,配置https,zabbix监控nginx状态页面
      nginx访问控制,用户认证,配置https,zabbix监控nginx状态页面nginx访问控制用于location段allow:设定允许哪台或哪些主机访问,多个参数间用空格隔开deny:设定禁止哪台或哪些......
    • python3 http.server模块 搭建简易 http 服务器
      在命令行直接运行:python-mhttp.server80或python3-mhttp.server80会看到如下输出:ServingHTTPon0.0.0.0port80(http://0.0.0.0:80/)...在浏览器访问会......
    • PHP使用华科HTTP代码示例
      //要访问的目标页面//服务器define("PROXY_SERVER","do.cn:39010");//隧道身份信息define("PROXY_USER","username");define("PROXY_PASS","p......
    • HTTPS协议
      一、HTTPS协议概念超文本传输安全协议(HypertextTransferProtocolSecure,简称:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用SSL/TLS来......
    • WEB简介与HTTP入门
      一、Web简介1、什么是Web学习Web安全当然要简单的了解什么是Web,Web与生活息息相关,上个网站浏览新闻,看个视频等其中涉及到几个基本的点。从通信,会接触到URL,到协议,......
    • Guzzle PHP HTTP客户端使用
      什么是guzzle安装GuzzleGuzzle基本使用安装PHPUnitAPI单元测试一.什么是guzzleGuzzle是一个PHPHTTP客户端,可以轻松发送HTTP请求,并且可以轻松集成Web服务。二.安装Guzzle1.......
    • HTTPS涉及的加密算法讲解
      前言从2015年左右开始,Google、Baidu、Facebook等互联网巨头,不谋而合地开始大力推行HTTPS,国内外的大型互联网公司很多也都已经启用了全站HTTPS为鼓励全球网站的HTTPS......
    • 【Vegas原创】A系统(aspx)向B系统(asp)交互(XmLHttp)
      A系统:ImportsSystem.XmlPartialClass_DefaultClass_DefaultInheritsSystem.Web.UI.PageProtectedSubPage_Load()SubPage_Load(ByValsenderAsObject,By......
    • Swoft2.x速学之http api篇课程
      视频地址https://www.bilibili.com/video/BV1k34y1q7Eb/?spm_id_from=333.337.search-card.all.click&vd_source=4a69745b599dffec877b0fcfe130b092......