Ajax中的状态码

前端是一门直接与用户交互的学问,前端工程师都应该了解用户体验方面的知识,ajax这种不用刷新页面就可以让页面上的内容发生改变的技术对于提升用户体验非常有帮助,因此一个合格的前端也必须要掌握这门技术。

Ajax从出现算起已经有很多年头,关于开启与处理的方法网上教程已经非常多,我就默认大家都是了解的。如果还不太了解的话,我会再写一篇关于XMLHttpRequest方面的教程,请继续关注。

书写原生Ajax的时候,初学者对于XHR对象中的statusreadystate产生过疑惑,这些到底什么鬼啊?

在解答上面问题之前呢,我们先来做点铺垫的东西。

什么是HTTP协议

HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

换种不那么官方的说法,HTTP协议就是本地的client端和远处的服务器server端在通讯时一种接头的规则(左手戴手套的梗懂不懂?)。

这个协议的特点是:

  1. 支持客户/服务器模式。

  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。用过点AJAX的都知道常用的请求就是POSTGET,其实还有PUTDELETE等。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

请求与响应

如果本地的浏览器为client,远端的服务器为server,两者接头的过程则是浏览器发出一个请求包,http请求由三部分组成,分别是:请求行、消息报头、请求正文

服务器在接收了请求后会执行运算,完成业务逻辑,然后再打一个响应包,HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

如果使用浏览器的开发者功能观察一个完整的响应的话,我们一般会在状态行中发现Status Code:200 OK这样一段内容。

这组编码即是我们在处理Ajax响应过程中需要关注的重点内容。

状态码描述

浏览器发送的请求被服务器接收到后,无论如何也会给个会话(比如「兄弟放心,这事妥了」,或者「哥哥也尽力了,真的办不成」之类的),这段内容就会写在状态码(state code)中。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

常用的状态码

200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报 //头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

顺便来点不常用的

201 Created //请求已经被实现,而且有一个新的资源已经依据请求的需要而创建,且其URI已经随Location头信息返回
204 No Content //服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息
400 Bad Request //由于包含语法错误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
501 Not Implemented //服务器不支持当前请求所需要的某个功能