HTTP响应状态。

状态码

状态码是一个3位的数字
1XX:
2XX: 主要表示成功(200OK)
3XX: 跳转 OR 缓存 (304 Not Modified)
4XX: 针对本次HTTP请求来说,是客户端传递的请求中有错误(404 Not Found)
5XX: 服务端处理本次请求时发生了错误(500 Internal Server Error)

404的原因:
服务端上:
1、Tomcat根据URL,找不到对应的资源
2、Tomcat根据URL,找到了一个动态资源,但资源中,通过setStatus,设置404

站在用户的角度,看到404,就说明URL没有对应到一个资源上。

405的原因:
1、Tomcat找到了对应的资源后,没有覆写相应的方法
2、可以通过setStatus(405)

500错误:
1、setStatus(很少见)
2、来自代码中:throws Exception
总结:看到500错误,就是当成出现异常处理

404问题

背景知识:
1、404是由于URL找不到对应的资源了(非主动情况下的404)

2、Tomcat从拿到URL后最终对应资源的步骤:
1)Tomcat根据URL中的Context Path确定,分配给哪个Web应用
2)Tomcat根据URL的ServletPath确定,分配给哪个Servlet对象处理

3XX跳转问题

跳转-重定向(Redirect)
HTTP响应状态。

重定向:
1、资源被永久移动了:301
2、资源临时移动了:302/303/307

基于特定的历史原因造成的。
最早设计HTTP/1.0协议是,只有301和302(永久重定向 和 临时重定向)
但各个浏览器在实现对302的反应时,遇到一个问题。
HTTP响应状态。
发起对baidu的新请求,但是有一个问题,请问新的请求应该用GET还是POST方法?
事实上,用GET或者POST都合理?大部分浏览器为了方便,用了GET。
但总是有些情况,需要用POST。所以302这个状态在设计时的协议就暴露了。

HTTP/1.1 补充了这个漏洞,把两种需要明确分开:303/307
HTTP响应状态。
303跳转后,浏览器使用GET方法提交
307跳转后,浏览器使用上一次的方法提交

3XX重定向:
1、永久重定向 —— 301
2、临时重定向
1)HTTP/1.0 302(大部分浏览器,重定向后使用GET)
2)HTTP/1.1
①303 重定向后使用GET
②307 重定向后使用之前的方法