http状态码

​ 在项目实际开发中,前端页面调用后台接口,渲染数据到页面是非常常见的场景,。调用后台接口,从服务器获取数据的时候,可能会出现很多情况,比如404 not found,了解这些http状态码可以帮助我们排查问题。

  1. 分类

    状态码响应类型原因短语
    1xx信息性状态码服务器正在处理请求
    2xx成功状态码请求已正常处理完毕
    3xx重定向状态码需要进行额外操作以完成请求
    4xx客户端错误状态码客户端原因导致服务器无法处理请求
    5xx服务器错误状态码服务器原因导致处理请求出错
  2. 常见状态码

    • 1xx
      • 100 继续,客户端应继续请求
      • 101 切换协议,服务端根据客户端请求切换协议,只能切换到更高级的协议
    • 2xx
      • 200 请求成功,一般用于GET和POST请求
      • 201 成功请求,并创建了新资源
      • 202 已接收请求,但未处理完成
      • 203 请求成功,但返回的meta信息不在原始服务器,而是一个副本
      • 204 服务器处理成功,但未返回内容
      • 205 服务器处理成功,用户终端应重置文档视图
      • 206 服务器成功处理了部分请求
    • 3xx
      • 301 永久移动
      • 302 临时移动
      • 303 查看其它地址,使用GET和POST请求查看
      • 304 未修改(浏览器缓存
      • 305 使用代理,所请求的资源必须通过代理访问
      • 307 临时重定向,使用GET请求重定向
    • 4xx
      • 400 客户端请求的语法错误,服务器无法理解
      • 401 请求要求用户的身份认证
      • 403 服务器理解客户端的请求,但是拒绝执行此请求
      • 404 服务端无法根据客户端的请求找到资源
    • 5xx
      • 500 服务器内部错误,无法完成请求
      • 501 服务器不支持请求的功能,无法完成请求
      • 502 作为网关或代理工作的服务器尝试执行请求时,从远程服务器接收到一个无效的响应
      • 503 由于超载和系统维护,服务器暂时的无法处理客户端的请求
      • 504 充当网关或代理的服务器,未及时从远端服务器获取请求
      • 505 服务器不支持请求的HTTP协议的版本,无法完成请求
    1. 常问问题

      • 301和302的区别

        301为永久重定向,如果用户把该资源对象的URI保存为书签的话,书签中的网址会被更新

      • 浏览器缓存机制(HTTP缓存机制)

        浏览器每次发送请求之后,都会在浏览器缓存中查看该请求的结果和缓存标识;浏览器每次拿到返回的请求结果之后,都会将该结果和缓存标识存入浏览器缓存中。

        • 强制缓存

          • 当不存在请求结果和缓存标志的时候,向服务器发送请求,请求资源

          • 当存在请求结果和缓存标识,但是结果失效,则协商缓存

          • 当存在请求结果和缓存标识,且结果未失效,直接返回该结果

            浏览器控制强缓存的字段分别是Expires(http/1.0)和Cache-Control(http/1.1),Cache-Control优先级高于Expires,http/1.1中默认使用Cache-Control,因为Expires通过到期时间判断的判断机制,可能因为市区等原因导致偏差,所以http/1.1采用Cache-Control来控制强制缓存。

          Cache-Control取值情况如下:

          public 所有内容都被缓存(客户端和代理服务器)

          private 所有内容只有客户端缓存(默认取值)

          no-cache 协商缓存

          no-store 不缓存

          max-age=xxx 缓存内容在xxx秒后失效

        • 协商缓存

          缓存结果失效后,浏览器携带缓存标志向服务器发起请求,由服务器根据缓存标识判断是否使用缓存

          • 协商缓存失效

            返回304,该资源无法更新

          • 协商缓存成功

            返回200和请求结果

          浏览器控制协商缓存的字段分别为Last-Modified/If-Modified-Since(http/1.0)、Etag/If-None-Match(http/1.1),其中Etag/ If-None-MatchLast-Modified/ If-Modified-Since优先级高

          Last-Modified 资源文件在服务器最后被修改的时间

          If-Modified-Since 上次请求返回的Last-Modified值,如果Last-Modified大于该值,则返回200和结果,否则返回304,无法更新资源,使用缓存文件

          Etag 资源文件唯一标识(由服务器生成)

          If-None-Match 上一次请求返回的Etag 值,如果Etag不等于该值,则返回200和结果,否则返回304,无法更新资源,使用缓存文件

      • http1.0和http1.1的区别

        • 浏览器缓存处理,http1.0通过Last-Modified/If-Modified-SinceExpires等字段控制浏览器缓存,http1.1通过Etag/ If-None-MatchCache-Control等字段控制浏览器缓存。
        • 带宽优化及网络连接的使用,http1.0存在一些带宽浪费的情况,例如客户端只需要某个对象的额一部分,而服务器却把整个资源送过来,并且不支持断点续存功能;http1.1则在请求头中引入了range头域,允许请求资源的某个部分,则返回码是206,这样方便了开发者自由选择以便于利用带宽和连接。
        • 错误通知管理,在http1.1中新增了24个错误状态码,如409,表示请求的资源与资源的当前状态发生冲突,410,表示服务器上的某个资源被永久删除。
        • host头处理,http1.0认为每台服务器都绑定一个唯一的IP地址,因此请求消息中的URL并没有传递主机名,随着虚拟技术的发展,一台物理服务器可以存在多个虚拟主机,并且共享一个IP地址。http1.1的请求消息和响应消息都应支持host头域,请求消息中如果没有host头域,会报400错误。
        • 长连接,http1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在http1.1中默认开启Connection:keep-alive,一定程度上弥补了http1.0每次请求都要创建连接的缺点。
      • http1.x和http2.0的区别

        • 新的二进制格式

          http1.x的解析是基于文本的,基于文本的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多;二进制则不同,只认0和1的组合,http2.0采用二进制格式比较方便和健壮。

        • 多路复用

          即连接共享,每一个request都是用作连接共享机制的,一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的id将request归属到各自不同的服务端请求里。

        • header压缩

          http1.x的header带有大量信息,而且每次都要重复发送,http2.0使用encoder来减少要传输的header的大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减少了需要传输的大小。

        • 服务端推送

          采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。

          SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议(将HTTP1.x的内容封装成一种新的frame格式),同时可以使用已有的SSL功能。

      • http和https的区别和联系

        • http协议运行在TCP之上,所有的传输都是明文,https运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都是经过加密的。
        • http和https使用的是完全不同的连接方式,用的端口也不一样,前者80,后者443。
        • https可以有效的防止运营商劫持,解决了防劫持的一个大问题。
        • https协议需要CA申请证书,一般免费证书很少,需要付费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值