[JavaEE初阶]网络协议-状态码
上节回顾
HTTP请求格式:
- 首行(方法,UR,L版本号)
- 请求头(header) 由若干个键值对组成
- 空行(分隔头部和正文)
- 正文(body)
HTTP响应格式:
- 首行(版本号 状态码 状态码描述)
- 响应头(由键值对组成)
- 空行
- 正文(body)
四个方法:
- GET
- POST
- PUT
- DELETE
GET和POST的区别(常见面试题)
- 语义区别:GET是从服务器拿数据;POST是往服务器提交数据
- 存放位置不同:GET把数据放在URL的query string中;POST把数据放在body中
URL格式: 协议名://ip:端口号/路径?查询字符串
查询字符串:
- 键值对 之间用&分隔
- 键和值之间用 = 分隔
关于HTTP版本
- 当前大部分用的都是HTTP/1.1版本
请求头的关键属性
Host 访问服务器的主机ip和端口 Content-Length body的长度(单位是字节) Content-Type body的数据格式(html,css,js,json,图片等) Referer 当前页面是从哪里跳转来的 User-Agent 描述当前正在上网的设备的 操作系统版本和浏览器信息 Cookie 浏览器在本地 存储数据的一种方式(由键值对构成)
- 从哪来:服务器通过 Set-Cookie返回的
- 到哪去:后续给浏览器发送的请求 都会带上Cookie
- 怎么存储:按照域名来区分,以键值对的形式存储
- 有什么用:Cookie中的内容都是由程序员自定义的,最典型的应用场景就是:登录时身份认证
状态码:
描述了响应结果,是正确了还是出错了,出错的原因是什么
- 举个栗子:洗衣服过程中,突然系统开始"滴滴滴",液晶屏上显示出了"E02"的编号
- 这里这个"E02"就是状态码,这时候你在网上搜了一下洗衣机"E02"代表什么
- 原来是洗衣机上盖被打开->那我就知道要怎么解决这个故障了->把上盖关上
这里,状态码就是返回出错原因的关键手段
HTTP中的状态码都是制定HTTP标准的大佬定义好的,我们直接用就行
HTTP状态码表
200 OK
最常见到的状态码,表示访问成功
404 Not Found
访问的资源没找到(路径有问题,但是网站还在).请求的路径 和 路由描述的路径不一致,就会404
Not Found的过程:
- URL中的IP定位到主机(成功)
- port定位到程序(成功)
- path定位到程序管理的资源(失败)->path访问的资源 在服务器上没有
即使状态码显示 当前访问出错 但是也可以在响应的body中返回一些html之类的语句,把这个404的页面打扮一番(就是说即使网页找不到,也可以做一个好看的404提示页面)
403 Forbidden
访问被拒绝了(你没有权限访问)
405 Methond Not Allowed
你发的请求的方法和服务器这边声明的注解不匹配,就会出现405
网上找别人的网站出现405比较难找,但是自己开发过程中,很容易出现405
500 Internal Server Error
服务器出错
出现原因:服务器处理逻辑代码中抛出了异常,但是开发者没有catch到,没有及时解决,导致服务器挂了
504 Gateway Timeout
网关或代理服务器在规定时间内 没有收到上游服务器的响应(请求超时)
网关(Gateway):
- 网络的关口(一夫当关的关)
- 网关可以认为是"入口服务器"(网关可能是一个软件也可能是一个专门的机器)
网关 的作用
在服务器资源紧张的时候容易触发"请求超时" 例如:选课系统
302 Move temporarily
重定向:你本来是去访问服务器A的,服务器A告诉你去找B
比如某网站A迁移域名:
- 如果直接迁移,就会使保存旧域名的用户无法访问了
- 但是如果把服务器架设在新域名上,给旧域名设置重定向,那么点击进入旧域名的时候,就会自动跳转至新域名
- 这时候,用户可以直接用新域名访问服务器,也可以访问旧域名,然后自动跳转至新域名
502 Bad Gateway
错误的网关
描述的比较含糊,具体是哪里错了呢?->要根据你的代码来判断哪个部分错了
一个典型的例子
- 网关后面要调用的某个服务器出问题了(比如某个服务器/某组服务器挂了)
- 网关感知到了这一情况后认为,当前剩余的服务器不足以支持整个业务,就报一个502
- 具体错在哪,还要程序员自己看代码找bug
小结:
状态码整体有很多:
- 2xxx 都可以认为是成功
- 3xx 都是重定向
- 4xx 是客户端出错,用户构造的请求有问题
- 5xx 是服务器出错(程序员一般关注的是这个,服务器出问题大概率是你的代码有bug!)
上述HTTP报文格式的内容要重点掌握!
工作经常用到&面试高频考题~~
END✿✿ヽ(°▽°)ノ✿