HTTP项目常见状态码笔记(200,302,400,403,404,405,500...),

2023-11-09

目录

认识 "状态码" (status code)

出现200

403 Forbidden

出现404 404 Not Found

出现 405 Method Not Allowed

出现 500 Internal Server Error

504 Gateway Timeout

302 Move temporarily

301 Moved Permanently

出现 "空白页面"  

出现 "无法访问此网站"


认识 "状态码" (status code)

状态码表示访问一个页面的结果 . ( 是访问成功 , 还是失败 , 还是其他的一些情况 ...).

出现200

这是一个最常见的状态码 , 表示访问成功 .
抓包抓到的大部分结果都是 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; domain=.sogou.com
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-width,minimum-scale=1,maximum-scale=1,userscalable=no"><script>window._speedMark = new Date(); window.lead_ip = 
'1.80.175.234';
......
注意 : 在抓包观察响应数据的时候 , 可能会看到压缩之后的数据 , 形如

 网络传输中 "带宽" 是一个稀缺资源, 为了传输效率更高往往会对数据进行压缩.

点击 Fiddler 中的即可进行解压缩, 看到原始的内容 .

 

403 Forbidden

表示访问被拒绝 . 有的页面通常需要用户具有一定的权限才能访问 ( 登陆后才能访问 ). 如果用户没有登陆直接访问, 就容易见到 403.
例如 : 查看码云的私有仓库 , 如果不登陆 , 就会出现 403. 参考链接 : https://gitee.com/HGtz2222/blog_python
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 -0000
Set-Cookie: gitee-session
n=ejEvQnYza2RlaXh0KzRaN3QrNWI2TzdLOE03bU5UNjRKdGlqWUFkMlJ2YktWYTRtcEtIVExOZ
EdJSFJFSkdiWmcxNmhjSTdneUZFaHFtalNKQUJWcDlUNDZYd2lBaElXNy9FaWRHQkl4d2RsS1RI
WnRCNFphQm5JUjZOdjdsSDh5TlNvZ3hZdTBXNXUrU2c2azN2UVNFOWwyQnJvQzZ6MEluaEFFYnR
oV0luOFlNWEEzWlR0K1g4WDlQRjNkSlNjZ1pUMGc0YkhreVNJMUV4YkVUUk0weXFqbGhQYzN5dj
A2bFJyc3o4MHRVWkkxcHdQVG5abmJ2NmlqV1dEYjlWaUpNNno3UGFpZ3lsb1RqeXAranFHRlE9P
S0tdU5JMGZ3UUpwODRYdjF1MXdyYmFKUT09-
-52babe9c2dcb63fa02bc32d25bc0e854f4065f5f; domain=.gitee.com; path=/;
HttpOnly
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>
......

出现404 404 Not Found

404表示用户访问的资源不存在,大概率是URL的路径写的不正确

错误实例 1 : 少写了 Context Path
通过 /hello 访问服务器

 

错误实例 2 : 少写了 Servlet Path
通过 /ServletHelloWorld 访问服务器

 

错误实例 3: Servlet Path 写的和 URL 不匹配
修改 @WebServlet 注解的路径

 

重启 Tomcat 服务器 .
URL 中的路径写作 "/hello" , 而代码中写作的 Servlet Path "/helloServlet", 两者不匹配 .

 

错误实例 4: web.xml 写错了
清除 web.xml 中的内容

 

重启 Tomcat 服务器 .
通过浏览器访问 URL, 可以看到 :

 

Tomcat 启动的时候也有相关的错误提示

 

出现 405 Method Not Allowed

405 表示对应的 HTTP 请求方法没有实现.
HTTP 中所支持的方法 , GET, POST, PUT, DELETE .
但是对方的服务器不一定都支持所有的方法 ( 或者不允许用户使用一些其他的方法 ).
错误实例 : 没有实现 doGet 方法 .
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
}

重启 Tomcat 服务器.

在浏览器中访问 , 可以看到 :

 

在浏览器地址栏直接输入 URL , 会发送一个 HTTP GET 请求 .
此时就会根据 /ServletHelloWorld/hello 这个路径找到 HelloServlet 这个类 . 并且尝试调用
HelloServlet doGet 方法 .
但是如果没有实现 doGet 方法 , 就会出现上述现象.

出现 500 Internal Server Error

往往是 Servlet 代码中抛出异常导致的.
服务器出现内部错误 . 一般是服务器的代码执行过程中遇到了一些特殊情况 ( 服务器异常崩溃 ) 会产生这个状态码.
咱们平时常用的网站很少会出现 500 ( 但是偶尔也能看到 ).
错误实例 :
修改代码
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
        String s = null;
        resp.getWriter().write(s.length());
   }
}
重启 Tomcat 服务器 .
重新访问页面 , 可以看到 :

 在页面上已经有具体的异常调用栈.

异常信息里已经提示了出现异常的代码是 HelloServlet.java 的第 13 .

resp . getWriter (). write ( s . length ());
仔细检查这里的代码就可以看到空指针异常。

504 Gateway Timeout

当服务器负载比较大的时候 , 服务器处理单条请求的时候消耗的时间就会很长 , 就可能会导致出现超时的情况.
这种情况在双十一等 " 秒杀 " 场景中容易出现 , 平时不太容易见到 .

302 Move temporarily

临时重定向 .
理解 " 重定向 "
就相当于手机号码中的 " 呼叫转移 " 功能 .
比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,
只要我去办理一个呼叫转移业务 , 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678上.
在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页 .
响应报文的 header 部分会包含一个 Location 字段 , 表示要跳转到哪个页面 .
例如: 码云的登陆页面 https://gitee.com/login
抓包看到的响应结果:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>您的访问受限 (403)</title>
......

可以看到 header 中的 Location: https://gitee.com/HGtz2222 , 接下来浏览器就会自动发送
GET 请求, 获取 https://gitee.com/HGtz2222
301 Moved Permanently
永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址. 
301 也是通过 Location 字段来表示要重定向到的新地址. 
状态码小结
HTTP/1.1 302 Found
Date: Thu, 10 Jun 2021 06:49:26 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=60
Server: nginx
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
Location: https://gitee.com/HGtz2222
Cache-Control: no-cache
Set-Cookie: oschina_new_user=false; path=/; expires=Mon, 10 Jun 2041 
06:49:24 -0000
Set-Cookie: gitee_user=true; path=/
Set-Cookie: gitee-sessionn=UG5CdVZQUkVUamxsWis3b0JoL2dyTDRLVTk1WXVCK2VwaGd0OGFKdjBjdjB4K0RiWTh2ZmhrZ
GM1cU0vOFN2VGdNcVY5dU5rSzZHeVFBcVZ3OTBaSmZmZzRYQUdsa2tHMnFIeU9SQlN4Z2pleDNM
Y3ExZUF6QWpHTHlVeTZOWFVHSVBxbTVuZGJpandHekdaRVBTUVd0ejZUNHNvTllSODBiNHd6NWN
CRUZ0UzZCZW1mRTBZUUdmOE5JTWVKdnJMMzdQcHFBMk5nUmNjMWpmc3daTElYU2hhbkEwQm41NH
NlZ2RwM3QxSjZMTndSNjcyNDd6YUVoS0ZmUWpLTDQ2KzlzZVowZTFLaUNPTmVDajVOb2k0MWFRc
GkzWVQ2QUxuWXJLeTRqL2JHaUE9LS0xYlVDOWVkc0JiM2xucVk0am1LRHFnPT0%3D-
-58854ce81d6c67bb7b9a0fdd6fe18a8ebdb3d753; domain=.gitee.com; path=/; 
HttpOnly
X-Request-Id: d45ade01dbeffc99a3688d3411b3381f
X-Runtime: 0.133587
Content-Length: 92
<html><body>You are being <a 
href="https://gitee.com/HGtz2222">redirected</a>.</body></html>
可以看到 header 中的 Location: https://gitee.com/HGtz2222 , 接下来浏览器就会自动发送
GET 请求, 获取 https://gitee.com/HGtz2222

301 Moved Permanently

永久重定向 . 当浏览器收到这种响应时 , 后续的请求都会被自动改成新的地址 .
301 也是通过 Location 字段来表示要重定向到的新地址 .

出现 "空白页面"  

错误实例 :
修改代码 , 去掉 resp.getWritter().write() 操作 .
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
       System.out.println("hello");
  }
}

重启服务器, 访问服务器, 可以看到一个空白页面:

 

抓包可以看到 , 响应 body 中的内容就是 " 空数据 "

 

出现 "无法访问此网站"


一般是 Tomcat 启动就失败了.

错误实例: Servlet Path 写错了.

 

应该写作 "/hello", Tomcat 在启动的时候已经提示了相关的错误 .
Tomcat 启动的日志里面报错信息可能比较多 , 需要耐心观察 , 找到关键的提示 .

 看到的现象:

 

熟悉 HTTP 协议能够让我们调试问题事半功倍 .
  • 4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否一致.
  • 5xx 的状态码表示服务器出现错误, 往往需要观察页面提示的内容和 Tomcat 自身的日志, 观察是否存在报错.
  • 出现连接失败往往意味着 Tomcat 没有正确启动, 也需要观察 Tomcat 的自身日志是否有错误提示.
  • 空白页面这种情况则需要我们使用抓包工具来分析 HTTP 请求响应的具体交互过程.

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP项目常见状态码笔记(200,302,400,403,404,405,500...), 的相关文章

随机推荐

  • CubeMX 5.5 修改HAL库库函数版本

    最初我是按照软件推荐 自动按安装的1 15的 为了和正点原子的例程统一库函数版本 就下载了1 11 但是在工程配置界面始终没有办法修改hal库版本的选择 关闭CubeMX 使用记事本打开工程文件 修改版本号 重新打开工程 库版本修改成功 工
  • Linux学习基础操作和文件管理命令

    Linux学习基础操作和文件管理命令 1 如何解决系统图形出现问题 1 ctrl alt f2 f6 gt gt gt 进入虚拟控制台 ctrl alt f1 gt gt gt 返回图形 2 登陆系统获得root权限 执行init 3 lo
  • 关于富文本编辑图片移动端太大溢出,太小正常处理

    在使用富文本编辑完文章 生成html字符串后 直接给移动端使用 如果图片太大 会出现溢出 图片太小没有问题 如果简单粗暴给全局样式img添加width 100 是可以解决溢出问题 但又造成了一个新的问题 就是小图片之前没有溢出也都变成了10
  • No Feign Client for loadBalancing defined. Didyou forget to include spring-cloud-starter-loadbalance

    Unexpected exception during bean creation nested exception is java lang IllegalStateException No Feign Client for loadBa
  • 解决idea不能搜索任何插件

    解决idea不能搜索任何插件 解决idea不能搜索任何插件
  • 持续集成/技术交付全流程流水线工具的设计与落地

    文章目录 持续集成 技术交付全流程流水线工具的设计与落地 概述 工具架构设计 主要功能模块 代码库 Jenkins 流水线 代码构建 自动化测试 产品部署 监控报警 使用方法 步骤一 安装 Jenkins 步骤二 创建 Jenkins 流水
  • 汇编语言(王爽第三版)实验十七

    实验十七 这道题我也不知道写的对不对 逻辑上应该没啥问题 但是运行起来好像没效果 题目和个人思路 安装一个新的int 7ch中断例程 实现通过逻辑扇区号对软盘进行读写 参数说明 1 用ah寄存器传递功能号 0表示读 1表示写 2 用dx寄存
  • vue中下载文件导出保存到本地

    vue中下载文件导出保存到本地 先分析如何下载 先有一个链接地址 然后使用 location href或window open 下载到本地 看看返回数据 res config url 中是下载链接地址 res data 中是返回的二进制数据
  • 结构体指针变量使用方法举例

    include
  • 报表设计

    最近在做任务报表方面的工作 之前一直以为查询和报表是一样东西 虽说 报表是查询的一种展示模式 但是做分析时 还是应该将以区别 报表 多样的格式 动态的数据 报表是我们想要数据展示的一种形态 就像是各种图表 例如 你想查询小明的名字 查询可以
  • 使用Nginx实现多个网站代理[多端口监听][django][资源服务器]

    使用Nginx实现多个网站代理 导航 原文链接 使用Nginx实现多个网站代理 导言 nginx是网站开发后期一个不可缺少的应用 nginx的作用是 请求代理 监听请求并转发给对应端口的进程处理 资源代理 使用nginx直接将服务器资源共享
  • IntelliJ IDEA部署tomcat时出现No artifacts marked for deployment

    这种错误主要是因为没有设置导出包 解决方法 File gt Project Structure gt Artifacts 然后点击ok 然后记得apply ok 此时再回到问题所在 点击Fix即可 或者如下 启动 打开浏览器复制下面网址 h
  • 数学建模--决策树的预测模型的Python实现

    目录 1 算法流程简介 2 算法核心代码 3 算法效果展示 1 算法流程简介 决策树的应用 对泰坦尼克号数据集成员进行预测生死 算法流程还是比较简单的 简单学习一下决策树跟着注释写即可 文章参考 https zhuanlan zhihu c
  • GROUP BY分组单个和多个字段不同条件所查询出来的结果不同

    第一次查询 代码如下 select from test 结果中 按照b列来分 则是 5个a 3个b 按照c列来分 则是 4个甲 4个乙 第二次 查询按照 b列来分组 代码如下 select count a b from test group
  • cordova-plugin-file-transfer cordova plugin下载不到问题解决记录

    环境 cordova 11 1 0 node 16 前提 安卓项目需要支持一些功能 升级到androidX所以一些插件需要更新 使用github方式可能会报ssh需要publicKey相关问题 不想用私人账号进行git github com
  • c++ uint32转为int_轻松实现C/C++各种常见进制相互转换

    这篇文章主要介绍了轻松实现C C 各种常见进制相互转换 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 adsbygoogle window adsbygoogle pu
  • 融云「百幄」之视频会议和直播,让办公桌无限延伸

    2020 年 为避免人员流动造成聚集性感染 全世界各地不少企业开始允许员工居家办公 跨地域 跨终端协同办公行业迎来井喷式增长 视频会议 疫 外爆发 关注 融云 RongCloud 了解协同办公平台更多干货 2022 年 全球疫情仍在蔓延 对
  • Qt,QEvent

    QEvent Class The QEvent class is the base class of all event classes Event objects contain event parameters More include
  • Gabor滤波器与特征提取

    一 Gabor滤波器 Gabor滤波器 最主要使用优势体现在对物体纹理特征的提取上 二维Gabor基函数能够很好地描述哺乳动物初级视觉系统中一对简单视觉神经元的感受野特性 随着小波变换和神经生理学的发展 Gabor变换逐渐演变成二维Gabo
  • HTTP项目常见状态码笔记(200,302,400,403,404,405,500...),

    目录 认识 状态码 status code 出现200 403 Forbidden 出现404 404 Not Found 出现 405 Method Not Allowed 出现 500 Internal Server Error 504