什么是状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。HTTP 状态码的英文为 HTTP Status Code。
状态码码十分的多,几乎可以表示所有的正常/非正常情况,我们不需要全部掌握,但常见的状态码如200,302,304,404,500等要能够知道其意思,下面我们将对这5个常见的状态码进行演示。
先来看一看状态码的分类,当我们看见状态码时根据分类可以先大概知道是什么意思
状态码的分类
- 1** :信息,服务器收到请求,需要请求者继续执行操作
- 2** :成功,操作被成功接收并处理
- 3** :重定向,需要进一步的操作以完成请求
- 4** :客户端错误,请求包含语法错误或无法完成请求
- 5** :服务器错误,服务器在处理请求的过程中发生了错误
状态码都是以这些开头的,我们遇见状态码是第一时间先判断分类,了解大概的意思,然后进行排错,由于状态码很多,我这里只介绍最常见的5个,详细请参考状态码大全,遇见不认识的进行查询即可。下面我开始对常见的5个进行说明。
200状态码
200状态码表示请求成功,比如,我们打开bilibili页面,进行抓包,我们可以看见状态码为200
302状态码
302状态码表示重定向,重定向就可以简单理解为有一个人是负责卖炸鸡的叫张三,而且很有名,附近买买炸鸡的都找他,但是有一天他的店搬迁了,但是买东西的人不知道,于是张三就在以前卖炸鸡的地方立了一块牌子,上面说炸鸡店搬迁了,要买炸鸡去xxx购买。这就是重定向的简单原理,下面为图示说明
我们可以看见,实际上进行重定向游览器发出了2次请求,下面我们用代码模拟一下重定向,我们写一个登录页面,当用户登录时重定向到百度界面。下面分别给出html和servlet代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" placeholder="请输入用户名"><br/>
<button>登录</button>
</form>
</body>
</html>
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("https://www.baidu.com");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
我们尝试进行登录,发现点击登录就跳转到了百度。
我们抓包进行查看,发现状态码确实为302,游览器先向tomcat发送请求,然后在向百度服务器发送请求。
304状态码
304状态码表示服务器资源没有进行更新,游览器直接使用缓存进行展示,例如,游览器第一次请求时,页面所有资源都会请求,所以速度往往较慢,但当我们第二次打开这个页面时就会发现速度明显变快了,尤其是有很多图片展示的网页,因为游览器在第一次请求时就将请求的资源进行了缓存,当再次请求时就会和服务器进行一个校验,看是否发生修改,没有发生修改就不需要请求了,下面我们进行模拟。使用的html代码和图片如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
<h1>这是亚丝娜</h1>
<img src="./ysn.png" alt="亚丝娜">
</body>
</html>
我们将一张图片进行展示,然后说明304。第一次请求网页,网页正常显示,我们对其进行抓包查看。
发现都是2个资源状态码都是200,表示请求成功,如果我们刷新网页会怎么样呢
发现hello.html已经变成了304,但是我们预想的应该是ysn,png也应该是304啊,因为没有修改过,我们点开ysn.png看一下
发现了200后面多了一句话,表示来自于缓存,但是感觉不是很直观,下面我们用Firefox进行相同操作看一下。
发现2次请求确实是304,表示资源没有变化,但是原理是说明呢,下面我们简单进行说明,其实游览器和服务器的校验是通过请求头的If-Modified-Since进行校验的
If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码
游览器收到304直接使用缓存进行展示。
404状态码
这个状态码大家都不陌生了,就表示该资源不存在,我们在游览器随便输入一个网址看一下,这里我使用的是Firefox
500状态码
这个状态码表示资源存在,但是服务器发生异常,下面我们用代码进行演示,代码如下
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/error")
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int[] nums = new int[2];
System.out.println(nums[2]);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
我们可以知道这个代码运行就会报错,下面我们访问一下这个资源
发现就是报了500错误。
通过上面例子,我们讲解了5个最常见的例子,这5个必须要掌握,这些都是开发中常见的状态码 ,其他的见多了就会了,遇见不清楚的状态码查询手册即可,状态码大全
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140330.html