http常见状态码

2333

http状态码的核心作用是 Web Server 服务器用来告诉客户端,当前的网页请求发生了什么事,或者当前 Web 服务器的响应状态。所以 HTTP 状态码常用来判断和分析当前 Web 服务器的运行状况。

状态码概括

类型 原因短语
1xx 请求已被接受,需要继续处理
2xx 请求成功
3xx 需要客户端采取进一步的操作才能完成请求,通常这些状态码用来重定向,除 304
4xx 请求错误,发生在客户端
5xx 服务器错误,服务器在处理请求的过程中有错误或者异常状态发生

101状态码

服务器跟具客户端请求的Upgrade设置的协议正在进行切换,常用于webSockets。

204、206状态码

  • 204:浏览器请求成功,没返回如何内容。并且当前页面不产生如何文档视图上的变化,比如form表单提交的地址是ccc.html,正常情况下页面会跳转到ccc.html,假如ccc相应的status状态码是204,此时页面就不会发生跳转,还是停留在当前页面。对于a标签的链接地址相应码为204也不会发生跳转。
  • 206:客户端通过发送范围请求头Range获取到了资源的部分数据,一般用于 "解决大文件下载、wget/telnet断电续传,与请求头"Accept-Ranges"有关联,假如服务器无法返回指定数据范围,那么对应状态码416。
// 请求 Range: bytes = 3000-10000 // 响应 Content-Range: bytes 3000-10000/10000

301、302、303、307状态码

  • 301:永久性重定向,被请求的资源永久性移动到新位置,是可以被缓存的,对于搜索引擎在抓取新的内容同时也会将旧的地址替换成新的地址。
  • 302:临时重定向,不会被浏览器缓存,当下次请求依然是访问原链接,只有设置了Cache-Contor或者Expires才会被缓存,然而对于搜索引擎只会抓取新的内容旧地址保持不变,大部分浏览器会将post请求转为GET请求。
  • 303 : 强制将post请求转换成get请求。
  • 307 : 用于让post请求跳转去新的post请求,但也用于hsts跳转,在HSTS中可被缓存,缓存时间更具max-age而定,一般都是建议缓存1年甚至更长。
HSTS

HSTS是http严格传输安全的缩写,强制客户端使用HTTPS访问页面,而不在需要先是http在转https,不仅可以有效防范中间人攻击(攻击者在用户使用http访问的过程中进行攻击,对服务器冒充增加是用户,在攻击者和服务器中使用https访问,在用户和服务器中使用http访问)。同时也为浏览器节省一次301/302的跳转请求,并且能让你的网站在ssllab上到A+。

启动HSTS
  • 在服务器响应头中添加Strict-Transport-Security,可以设置max-age
  • 用户访问时,服务器种下这个头
  • 下次如果使用http访问,只要max-age未过期,客户端会进行内部跳转,可以看到307Redirect Internel的响应码。
  • 变成https访问资源服务器
HSTS不足之处
  • 纯ip请求无效
  • HSTS只能在80和443端口之间切换,如果服务时8080端口,即便响应头中设置了HSTS也无效。
  • 如果浏览器证书错误,一般情况下会提醒存在风险,然后给一个链接进入目标页,而HSTS则没有目标页入口,所有一旦证书配置错误,就是很大的故障。
  • 如果服务器的HTTPS没配置好就开启了HSTS的响应头,并且还设置了很长过期时间,那么在你服务器HTTPS没配置好之前,用户都是没办法连接到你的服务器,除非max-age过期。
使用场景

301适用于域名跳转,如http跳转到https。302适用于未登录的用户访问个人中心,跳转到登录页面,比如404页面会被重定向到首页。

400、401、403、404状态码

400:请求无效(服务器不理解请求的语句,比如报文坏了、前端提交的数据类型或字段类型和后台实体类不一样,导致无法封装)
401:未授权(请求要求身份验证,对于登陆后的请求页面,服务器可能返回此信息)
403:禁止请求(比如爬虫爬取其他网站)
404:未找到(服务器不才在该资源)
413:请求实体过大(服务器无法处理请求,因为实体太大,超出服务器的处理能力)
414:请求URL过长,服务器无法处理
416:页面无法提供请求的范围,服务器会返回此状态码

500、502、503、504、505状态码

  • 500:服务器内部错误
  • 502:网关错误
  • 503:服务器不可用
  • 504:网关超时
  • 505:服务器不支持请求中所用的HTTP协议版本
完善参考链接地址