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

相关推荐
shepherd1114 小时前
JDK源码深潜(一):从源码看透DelayQueue实现
java·后端·代码规范
天天摸鱼的java工程师4 小时前
SpringBoot + OAuth2 + Redis + MongoDB:八年 Java 开发教你做 “安全不泄露、权限不越界” 的 SaaS 多租户平台
java·后端
鹿里噜哩4 小时前
Nacos跨Group及Namespace发现服务
java·spring cloud
沐浴露z4 小时前
【JVM】详解 对象的创建
java·jvm
weixin_445476684 小时前
Java并发编程——提前聊一聊CompletableFuture和相关业务场景
java·并发·异步
ChinaRainbowSea4 小时前
11. Spring AI + ELT
java·人工智能·后端·spring·ai编程
不会写DN4 小时前
用户头像文件存储功能是如何实现的?
java·linux·后端·golang·node.js·github
聪明的笨猪猪4 小时前
Java JVM “类加载与虚拟机执行” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
盖世英雄酱581364 小时前
FullGC排查,居然是它!
java·后端