什么是 HTTP 状态响应码/都有哪些状态响应码?
来自于 Mozilla 基金会网站的关于 HTTP 状态码的文章, 指出 HTTP 状态码分为 5 大类, 分别代表:
- 1xx 信息化响应 (ps: http1.1 之前是保留区段, HTTP1.1 规定了 2 项)
- 2xx 成功响应
- 3xx 重定向消息
- 4xx 客户端错误
- 5xx 服务器端错误
为什么要自定义状态响应码?
既然 HTTP 规范已经定义了这么多状态响应码, 我们自定义状态响应码有什么用处呢?
目前 HTTP 规范定义的响应码, 各大应用服务器和浏览器厂家都已经实现了这些内容, 可以根据请求响应的不同结果返回不同的状态码, 浏览器接收到这些状态码后也会做出响应的动作和操作.
我们可以通过自定义的状态响应码, 对系统做一下通用的提示, 例如当发生某一类问题时, 可以通过状态响应码, 由系统底层统一给出提示. 另外, ajax 请求也可以自定义响应码, 前端进行判断后进行不同的处理.
sendError(int sc)
使用指定的状态码并清空缓冲, 发送一个错误响应至客户端. 如果响应已经被提交, 这个方法会抛出 IllegalStateException. 使用这个方法后, 响应则应该被认为已被提交, 且不应该再被进行写操作了.
sendError(int sc, String msg)
使用指定的状态码发送一个错误响应至客户端. 服务器默认会创建一个 HTML 格式的服务错误页面作为响应结果, 其中包含参数 msg 指定的文本信息, 这个 HTML 页面的内容类型为 "text/html", 保留 cookies 和其他未修改的响应头信息. 如果一个对应于传入的错误码的错误页面已经在 web.xml 中声明, 那么这个声明的错误页面将会优先于建议的 msg 参数服务于客户端.(ps: 相比较上面的方法, 我更倾向于前者. 使用上面的方法, 可以通过定制不同状态的响应结果显示于客户端, 我们应该不想让客户端看到服务器创建出的简单粗暴的页面吧?)
setStatus(int sc)
设置响应的状态码. 这个方法被用于当响应结果正常时 (例如, 状态码为 SC_OK 或 SC_MOVED_TEMPORARTLY) 设置响应状态码. 如果发生错误, 而且来访者希望调用在 web 应用中定义的错误页面作为显示, 那么应该使用 sendError 方法代替之. 使用 setStatus 方法之后, 容器会清空缓冲并设置 Location 响应头, 保留 cookies 和其他响应头信息.
自定义返回码
SpringMVC 自定义响应的 HTTP 状态码有两种方法, 一种是在返回方法上面加上 @ResponseStatus
注解, 另一个种是在方法内部使用 response.setStatus()
方法.
@ResponseStatus 一般是作用在异常类或者方法上, 带有 @ResponseStatus 注解的异常类会被 ResponseStatusExceptionResolver 解析, 可以实现自定义的一些异常, 同时在页面上进行显示. 作用在方法上时, 将会修改 response 的状态码
文章评论