目录
💡推荐
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】
认识“状态码”
描述了这次HTTP请求是否成功,以及失败的原因,HTTP比较早,当年还没有成熟的“异常”这样的机制去参考,也仍然是通过状态码来表示错误的形态
每个状态码都会用一个/一组单词来描述
200 OK
表示访问成功
抓包抓到的⼤部分结果都是200,例如访问搜狗主⻚
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 10 Jun 2021 06:07:27 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: black_passportid=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; do
Pragma: No-cache
Cache-Control: max-age=0
Expires: Thu, 10 Jun 2021 06:07:27 GMT
UUID: 80022370-065c-49b0-a970-31bc467ff244
Content-Length: 14805
<!DOCTYPE html><html lang="cn"><head><meta name="viewport" content="width=device
......
404 Not Found
客户端请求的资源在服务器这边不存在
这里的资源就是URL(ip+端口+路径+查询字符串...)中的路径,服务器上管理的某个资源
HTTP/1.1 404 Not Found
Server: nginx
Date: Thu, 10 Jun 2021 05:19:04 GMT
Content-Type: text/html
Connection: keep-alive
Vary: Accept-Encoding
Content-Length: 564
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
403 Forbidden
客户端的权限不足,被禁止访问了,有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问),如果用户没有登陆直接访问,就容易见到403
eg:查看码云的私有仓库,如果不登陆,就会出现403
HTTP/1.1 403 Forbidden
Date: Thu, 10 Jun 2021 06:05:36 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=60
Server: nginx
Vary: Accept-Encoding
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Expires: Sun, 1 Jan 2000 01:00:00 GMT
Pragma: must-revalidate, no-cache, private
Cache-Control: no-cache
Set-Cookie: oschina_new_user=false; path=/; expires=Mon, 10 Jun 2041 06:05:40 -0
Set-Cookie: gitee-session-n=ejEvQnYza2RlaXh0KzRaN3QrNWI2TzdLOE03bU5UNjRKdGlqWUFk
X-Request-Id: 82a740fb98838c305c4cc597ab6f48c0
X-Runtime: 0.020299
Content-Length: 7092
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>您的访问受限 (403)</title>
.....
405 Method Not Allowed
请求中(GET,POST,PUT,DELETE...)的方法,服务器不支持,这个简单了解即可
服务器的代码逻辑就需要处理上述请求,假如服务器没有实现对应的逻辑,比如只实现了处理GET,没实现处理POST,此时你发送POST就可能得到405
500 Internal Server Error
服务器内部错误,一般是服务器的代码执行过程中遇到一些特殊情况(服务器异常崩溃)(比如:空指针异常,下标越界异常...)会产生这个状态码,咱们平时常⽤的⽹站很少会出现500(但是偶尔也能看到)
现在的互联网产品,讲究一个“高可用”,可用性要达到99.99% 这样的程度,一年下来,只有几分钟的时间不可用,高可用的核心思想:冗余,你访问的服务器不是一台,而是很多台,甚至这些服务器会分布在多个机房,多个地区,甚至多个国家,哪怕其中有一台或者多台机器挂了,不影响,其他的机器还能提供服务,仍然可以正常进行使用
500 后面自己写代码,就会经常涉及到,如果你自己的代码 500 了咋办->查看服务器的日志,都会明确告诉你是哪个代码出现异常了,异常原因
504 Gateway Timeout
服务器访问超时了,这种问题常见于”服务器比较繁忙的情况“
Gateway就是网关,要访问的服务器,不止一台,可能是很多,会有一个入口服务器,就是称为网关服务器
302 Move temporarily
临时重定向(临时的从旧地址转向新地址)
理解"重定向"
就相当于⼿机号码中的"呼叫转移"功能.
⽐如我本来的⼿机号是186-1234-5678,后来换了个新号码135-1234-5678,那么不需要让我的朋友知道新号码,只要我去办理⼀个呼叫转移业务,其他⼈拨打186-1234-5678,就会⾃动转到135-1234-5678上
访问某个地址的时候,访问的是旧地址,自动跳转到新地址上
大部分网站是这么实现的,也有的网站不是通过302来实现的,最需要体现的一个就是header,描述了接下来要跳转到哪个地址上
301 Moved Permanently
永久重定向(访问的旧地址和新地址之间的映射关系,就固定了),此时浏览器就会缓存这样的结果,后续再次访问旧地址的时候,浏览器就可以直接构造新地址的请求,就减少一次HTTP访问了(无需跳转)
如果使用 302 作为重定向,临时重定向,旧地址是否要重定向,以及重定向到哪里, 就是可变的,因此每次访问旧地址,都需要使用旧地址访问服务器,获取到 响应的 Location 属性再进行跳转
啥时候使用 301?
服务器迁移了,域名更新了.….比如本来服务器 ip 是 1.2.3.4;后来换了个服务器,5.6.7.8就可以给 1.2.3.4 这个旧服务器的相应设置成 301 重定向
但是像搜狗搜索这里跳转页面涉及到的 重定向,这种情况就使用 302 作为重定向,每个广告,最终跳转到哪里,结果都是不一定的,不应该进行缓存
状态码总结
200 成功
404 资源不存在
403 权限不够
405 方法不支持
500 服务器出现问题
504 服务器返回结果超时
302 临时重定向
301 永久重定向