[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✿✿ヽ(°▽°)ノ✿

相关推荐
一 乐1 天前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
华仔啊1 天前
SpringBoot 2.x 和 3.x 的核心区别,这些变化你必须知道
java·spring boot·后端
laocooon5238578861 天前
大数的阶乘 C语言
java·数据结构·算法
不见长安在1 天前
分布式ID
java·分布式·分布式id
熊小猿1 天前
Redis 缓存怎么更新?—— 四种模型与一次“迟到的删除”
java·后端·spring
Fr2ed0m1 天前
Nginx防御HTTP Host头注入漏洞:实战配置漏洞修复教程
运维·nginx·http
TDengine (老段)1 天前
从细胞工厂到智能制造:Extracellular 用 TDengine 打通数据生命线
java·大数据·数据库·科技·制造·时序数据库·tdengine
Boop_wu1 天前
[Java EE] 多线程 -- 初阶(1)
java·jvm·算法
西岭千秋雪_1 天前
Zookeeper实现分布式锁
java·分布式·后端·zookeeper·wpf
MarcoPage1 天前
Python 字典推导式入门:一行构建键值对映射
java·linux·python