官⽅⽂档(英⽂版):
http://doc.canglaoshi.org/rfc/rfc1945.txt
官⽅⽂档(中⽂版):
http://doc.canglaoshi.org/rfc-cn/RFC1945.txt
常⻅
HTTP
响应码通俗描述(以下涉及的问题解决⽅案,在未学到到对应的框架技术之前可暂时跳过):
200
:成功响应,需要注意,这仅仅表示服务器端成功的进⾏了响应这项操作,并不表示业务的成功,例如尝
试登录时,如果⽤户名或密码错误导致登录失败,只要服务器端成功的响应了,响应码也是
200
302
:重定向,服务器端处理请求后,会响应此响应码和另⼀个⽬标路径,通常,浏览器收到此响应码后会⾃
动请求新的⽬标路径
400
:请求参数错误,例如服务器端对某个请求参数设置了
“
不允许为
null”
的约定,⽽客户端却未提交此参
数,或某请求参数必须是数值类型的,客户端提交的却是⼀个⽆法转换为数值类型的参数值
出现此问题时,你应该通过断点或打桩等⽅式观察提交的请求参数,并查看服务器端对请求参数的约束
在
Spring MVC
框架中,
@RequestParam
默认具有
“
不允许为
null”
的约定
在
Spring MVC
框架中,会尝试⾃动将请求参数转换为服务器端声明的参数类型
在
Spring MVC
框架中,使⽤了
Hibernate Validation
验证机制后,也会对请求参数产⽣约束,具体
约束需参考所使⽤的注解
基于以上框架的进阶框架具有同样效果,例如添加了
spring-boot-starter-web
依赖项的
Spring
Boot
⼯程是使⽤
Spring MVC
接收请求参数的,添加了
spring-boot-starter-validation
依赖
项的
Spring Boot
⼯程则是使⽤
Hibernate Validation
实现的请求参数验证
401
:未授权,通常出现在未登录,却尝试请求必须登录才允许访问的资源时
403
:禁⽌访问,通常出现在已经登录,却不具备访问权限时,例如普通⽤户尝试请求管理员权限的资源时
出现此问题时,如果你使⽤了
Spring Security
框架,你应该检查
Spring Security
的配置类中的相关配
置,例如⽩名单路径,并检查你是否开启了授权访问,如果已开启,你还应该通过断⾔或打桩等⽅式观
察当前登录的⽤户的权限清单,并检查在请求资源上设置的权限规则
404
:请求的资源不存在,通常是客户端提交请求的
URL
错误
出现此问题时,你应该检查客户端提交请求的
URL
与服务器端设置的接收请求参数的
URL
是否⼀致
在确保客户端提交请求的
URL
是你预期的时,关于服务器端,你应该:
如果你请求的是服务器端的某个静态资源,你应该检查此资源是否存在,在
Spring Boot
⼯程中,
默认的静态资源⽂件夹是
src/main/resources/static
,并且,需要注意,如果你显式的配置了
静态资源⽂件夹,将会覆盖此默认项
如果你的服务器端是通过
Spring MVC
框架开发的,你应该检查:
控制器是否已经正常启⽤,你可以在控制器类中显式的添加⽆参数构造⽅法,并在其中输出任
何内容,当启动项⽬时,你应该可以在控制台看到输出语句中的内容,如果看不到,则表示控
制器没有被创建,则需要检查组件扫描配置的包、控制器类是否添加了
@Controller
或
@RestController
注解,如果你使⽤的是
Spring Boot
⼯程,默认组件扫描的包是创建⼯
程时指定的
Group Id
和
Artifact Id
组件的包名
请求路径是由控制器类上的
@RequestMapping
注解(如果存在的话)和处理请求的⽅法上的
source d:\db.sql
@RequestMapping
或以此为元注解的其它注解(例如
@GetMapping
等)组合得到的,你应
该检查这
2
处的注解
405
:请求⽅式错误,例如服务器端要求使⽤
POST
⽅式提交请求,⽽客户端却使⽤
GET
⽅式提交请求
出现此问题时,你应该检查客户端的请求⽅式,如果是直接在浏览器的地址栏中输⼊
URL
提交的请求,
是
GET
⽅式的,如果是通过
HTML
表单或其它异步提交⽅式,除⾮显式的使⽤
POST
⽅式,否则都是
GET
⽅式的,另外,在服务器端,你需要检查如何配置的请求
URL
,例如使⽤
@PostMapping
时,则限制了
客户端的请求⽅式必须是
POST
406
:不可接收的,通常出现在基于
Spring MVC
的⼯程中,将服务器端的响应⽅式设定为响应
JSON
格式的正
⽂时,如果属于此情景,你应该检查:
是否正确的添加了
jackson-databind
依赖项
是否在
Spring MVC
配置类上添加了
@EnableWebMvc
注解
500
:服务器内部错误,通常是因为服务器端出现了异常且始终未显式的捕获
出现此问题时,你应该检查服务器端控制台的异常信息,如果⽆信息,你应该检查项⽬中是否使⽤了
Spring MVC
统⼀处理异常的机制,并且在处理异常时未添加
e.printStackTrace()
等⽅式将异常信息
输出