http状态码

    xiaoxiao2022-07-06  196

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

    分类

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

    常见状态码

    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协议的版本,无法完成请求

    常问问题

    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-Match比Last-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-Since和Expires等字段控制浏览器缓存,http1.1通过Etag/ If-None-Match和Cache-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申请证书,一般免费证书很少,需要付费。
    最新回复(0)