HTTP响应码解析【合集】

HTTP响应码解析【合集】

1 信息响应(100-199)

服务器收到请求,需要请求者继续执行操作

2 成功响应(200-299)

操作被成功接收并处理

3 重定向(300-399)

需要进一步操作以完成请求

  • 304 Not Modified
- 客户端有缓存,且缓存资源为最新版本
"如果选中了no cache,则请求资源时,请求头中的Cache-Control为no-cache,"
"表明不使用缓存,则会直接获取服务器资源。另外,若没选中no cache,Cache-Control有二种情况":"
1、max-age>0 时直接从游览器缓存中提取 
2、max-age<=0 时向服务器发送http请求,该资源是否有修改有的话返回200 ,无的话返回304. 

禁用缓存方式:
在这里插入图片描述

在客户端向服务端发送http请求时,若返回状态码为304 Not Modified 则表明此次请求为条件请求。在请求头中有两个请求参数:If-Modified-Since 和 If-None-Match。
①当客户端缓存了目标资源但不确定该缓存资源是否是最新版本的时候, 就会发送一个条件请求。在进行条件请求时,客户端会提供给服务器一个If-Modified-Since请求头,其值为服务器上次返回响应头中Last-Modified值,还会提供一个If-None-Match请求头,值为服务器上次返回的ETag响应头的值。
服务器会读取到这两个请求头中的值,判断出客户端缓存的资源是否是最新的,如果是的话,服务器就会返回HTTP/304 Not Modified响应头, 但没有响应体.客户端收到304响应后,就会从本地缓存中读取对应的资源。 所以:当访问资源出现304访问的情况下其实就是先在本地缓存了访问的资源。
②另一种情况是,如果服务器认为客户端缓存的资源已经过期了,那么服务器就会返回HTTP/200 OK响应,响应体就是该资源当前最新的内容.客户端收到200响应后,就会用新的响应体覆盖掉旧的缓存资源.只有在客户端缓存了对应资源且该资源的响应头中包含了Last-Modified或ETag的情况下,才可能发送条件请求.如果这两个头都不存在,则必须无条件(unconditionally)请求该资源,服务器也就必须返回完整的资源数据.另外,有时候我们浏览器调试的时候不希望本地缓存,可以设置取消缓存即可。
参考文章:https://blog.csdn.net/franknotbad/article/details/79399809

4 客户端错误(400-499)

请求包含语法错误或无法完成请求

400:bad request

客户端请求的语法错误,服务器无法理解 (提交的字段类型、数据格式问题)
1)前端提交数据的字段名称或字段类型和后台的实体类不一致,导致无法封装
2)前端提交到后台的数据应该是json字符串类型,而前端没有将对象转换为字符串类型【JSON.stringify(param)】

401:Unauthorized

Unauthorized 请求要求用户的身份认证

1)未授权
2)用户名、密码错误

402:保留状态码(保留字)

403:Forbidden

服务器理解请求客户端的请求,但是拒绝执行此请求,可能该认证身份没有操作的权限等

被禁止,指示尽管有效,但服务器拒绝响应它。与401状态码不同,提供了身份验证也不会改变结果

404:Not Found

服务器无法根据客户端的请求找到资源

1)网站域名更换
2)网站中途改版(如:初期是静态链接,后期改变了静态链接生成规则;或者前期是动态后期是静态)
- 静态URL:页面内容是固定的
- 动态URL:不存在具体的文件,而是根据用户请求从数据库返回请求页面(拼接URL)
3)误删文件或移动文件

4)网站数据库出错(如:在SEO优化的过程中,修改网站数据库的时候,误删了某个数据)

405:Method Not Allowed

方法被禁止
请求方式错误,例如:服务器仅支持GET,但是请求方式为POST

5 服务端错误(500-599)

500:服务器内部错误

502:bad gateway,网关错误

- 必出现502:应用`挂了`(服务端返回RST,nginx或者其他发出502报错)
- 偶尔出现502:CPU使用率高 / QPS增加 / nginx read超时时间设置问题
  • 客户端和服务端之间加入nginx(反向代理、负载均衡),客户端之管向nginx发起请求数据,并不关系这个请求具体由哪个服务器来处理
    • 后端服务挂了,ngxin访问服务器会收到服务端返回的RST报文,然后给客户端返回502报错。(502不是服务端发出的,而是nginx发出的)因此发生502时,后端服务可能没有相关502的日志,需要在nginx这边才能看到这条502日志。
    • 排查:如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启
      1. 如果重启过 :查看是否留下崩溃堆栈日志;如果没有日志,查看是否是OOM或者其他原因导致进程主动退出
      2. 如果进程也没崩溃过,去排查nginx的日志,看下是否将请求打到了,某个不知名IP端口上

503:Service Unavailable 服务器停机维护或者已超载

服务器在处理请求的过程中发生了错误【服务器内部错误】

504:gateway time-out,网关超时

一般指nginx做反向代理服务器时,所连接的服务器tomcat无响应导致的。

  • 为了完成您的 HTTP 请求,该服务器访问一个上游服务器,但没得到及时的响
  • nginx超过了自己设置的超时时间

拓展

①请求头中的Referer

标识请求的最初来源
作用:

  1. 防盗链
  2. 防止恶意请求
比如我最初请求的是www.google.com,点击某个链接后,跳转到了www.baidu.com,
那么它的header信息里就有Referer=http://www.google.com

HTTP响应码解析【合集】_第1张图片
上面162开头的ip其实就是我本机,因此请求里面会显示127.0.0.1

参考:https://blog.csdn.net/shenqueying/article/details/79426884

你可能感兴趣的:(理论,http,服务器,前端,响应码,缓存)