当前位置: 首页 > news >正文

常见Http错误码学习

常见 http 错误码

服务器巡检时比较常见的 http 错误码

  • 400 Bad Request
  • 408 Request Timeout
  • 499 client has closed connection
  • 502 Bad Gateway
  • 504 Gateway Timeout
    这些错误码反映了服务器什么样的状态,仅看字面意思还不太容易理解,就动手做个试验吧

试验环境

在 linux 主机上运行 nginx,在本机(windows 10)上运行 jetty,linux 上的 nginx 反向代理到本机 jetty

试验工具

发送 http 请求主要采用 postman,也使用了 telnet 和 python 脚本

试验

400

错误的请求,比如必须的参数未传递,那么我们来试下

@Controller
@RequestMapping("/api/")
public class TestController {@ResponseBody@RequestMapping("test.debug")public String test(@RequestParam(required = true) String name) {return name;}}

可以看到 name 参数是必须的,那么不带参数调用一下

http://xxxxx.in.xxxx.com/api/test.debug

返回 200.

怎么返回了 200 而不是预期的 400呢?经过一番检查,原来是有个异常处理程序捕捉到了参数未传递的异常并进行了处理,如下

@Component
public class ExceptionHandler implements HandlerExceptionResolver {private static final Logger log = Logger.getLogger(ExceptionHandler.class);@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,Object handler, Exception ex) {response.setContentType("application/json; charset=UTF-8");String code = null;String message = null;if (ex instanceof BizException) {BizException exception = (BizException) ex;message = exception.getMessage();code = Integer.toString(exception.getErrorCode());} else if (ex instanceof MissingServletRequestParameterException) {code = "900002";message = ex.getMessage();log.error(message);} else {code = "403";message = ex.getMessage();log.error(ex, ex);}ModelAndView mav = new ModelAndView("error");mav.addObject("code", code);mav.addObject("message", message);mav.addObject("value", message);return mav;}}

禁用该异常处理以后,重新试验返回了 400,如下

此外,胡乱的发送数据给 nginx 服务器而不按 http 协议规范组织数据,也会得到 400 的返回码,可以用 telnet 试验一下,如下图

在用 telnet 给 nginx 发送数据时,输入 “HTTP/2.3.”,由于 2.3. 是不存在的版本,nginx 当即返回了 400 错误码

408

请求超时,nginx 在规定的时间内无法获取到客户端的请求
这个错误码很奇怪,根据该错误码的含义,使用 telnet 和 python 进行模拟,但无法使 nginx 返回 408 错误码…试验失败了
另外,查看 nginx 日志,发现返回 408 错误码的日志,实际上请求都已经转发给 jetty 并且 jetty 也返回了 200 响应码.

所以,这个错误码目前还无法解释

499

在 nginx 返回结果之前,客户端断开了连接,nginx 会记录 499 错误码到日志,要重现这个错误码,只需要让接口等待一段比较长的时间,并在请求端主动断开即可,如下

@Controller
@RequestMapping("/api/")
public class TestController {@ResponseBody@RequestMapping("test.debug")public String test(@RequestParam(required = true) String name) {try {Thread.sleep(300 * 1000);} catch (InterruptedException e) {}return name;}
}

在 postman 里发起请求,并在等待的过程中点击 cancel 按钮

这时 postman 没有任何返回,但是查看 nginx 的日志,会发现一条 499 的记录,如下

502

这个比较好理解,jetty 服务挂了或者没有启动,我们停掉 jetty 就可以得到这个错误码.

504

这是 jetty 响应超时了,我们让接口等待 300 秒后返回,来测试一下

@Controller
@RequestMapping("/api/")
public class TestController {@ResponseBody@RequestMapping("test.debug")public String test(@RequestParam(required = true) String name) {try {Thread.sleep(300 * 1000);} catch (InterruptedException e) {}return name;}
}

可以看到在60秒(准确的说,60133 ms)以后,nginx 返回了 504

这是因为 nginx 默认等待 jetty 60 秒,时间到了 jetty 没有响应 nginx 就会自行返回 504;如果想要 nginx 多等一段时间,可以如下配置

proxy_read_timeout 6m; 

现在再试一下

可以看到,经过 300 秒(300062 ms)的漫长等待,我们得到了 jetty 的响应

结论

  • 400 客户端请求数据格式不对,不符合接口规范.和客户端沟通,要求客户端修复.服务端进行容错处理

  • 408不知道.继续研究

  • 499 由于服务器处理太慢,客户端在规定的时间内未接收到响应,主动断开连接.客户端网络被断开了,在移动互联网环境下这还是比较常见的,例如用户移动到 WIFI 覆盖区域以外/服务端优化性能

  • 502 服务器宕机, 重启服务器

  • 504 服务端响应太慢了, 优化性能

相关文章:

常见Http错误码学习

​ 常见 http 错误码 服务器巡检时比较常见的 http 错误码 400 Bad Request408 Request Timeout499 client has closed connection502 Bad Gateway504 Gateway Timeout 这些错误码反映了服务器什么样的状态,仅看字面意思还不太容易理解,就动手做个试验…...

qemu-基础篇——ARM 链接过程分析(六)

文章目录 ARM 链接过程分析源文件global_bss_file.cglobal_data_fle.cglobal_function_file.cglobal_rodata_file.cmain.c 链接文件 link.lds编译命令及反汇编命令解析 .o 文件global_bss_file.oglobal_data_fle.oglobal_function_file.oglobal_rodata_file.omain.o 链接观察链…...

Java企业工程项目管理系统+spring cloud 系统管理+java 系统设置+二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...

Eureka与Zookeeper的区别

著名的CAP 理论指出,一个分布式系统不可能同时满足 C( 一致性 ) 、 A( 可用性 ) 和 P( 分区容错性 ) 。 由于分区容错性在是分布式系统中必须要保证的,因此我们只能在 A 和 C 之间进行权衡,在此 Zookeeper 保证的是 CP, 而 Eureka 则是 AP…...

顺序表和链表的各种代码实现

一、线性表 在日常生活中,线性表的例子比比皆是。例如,26个英文字母的字母表(A,B,C,……,Z)是一个线性表,表中的数据元素式单个字母。在稍复杂的线性表中,一个数据元素可以包含若干个数据项。例…...

C# 介绍三种不同组件创建PDF文档的方式

1 c# 数据保存为PDF(一) (spire pdf篇) 2 c# 数据保存为PDF(二) (Aspose pdf篇) 3 c# 数据保存为PDF(三) (PdfSharp篇) 组件名称 绘制…...

极简面试题 --- Redis

什么是 Redis? Redis 是一个基于内存的键值存储系统,也被称为数据结构服务器。它支持多种数据结构,例如字符串、哈希表、列表、集合和有序集合,并且可以在内存中快速读写。 Redis 的优势有哪些? 快速:由…...

可视化图表API格式要求有哪些?Sugar BI详细代码示例(4)

Sugar BI中的每个图表可以对应一个数据 API,用户浏览报表时,选定一定的过滤条件,点击「查询」按钮将会通过 API 拉取相应的数据;前面说过,为了确保用户数据的安全性,Sugar BI上的所有数据请求都在Sugar BI的…...

学习vue(可与知乎合并)

一:组件及交互 1、什么是组件? 组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是 。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用: 声明组件 // 定义一个名…...

【UEFI实战】Linux下如何解析ACPI表

本文介绍如何在Linux下查看ACPI表示。使用的系统是Ubuntu18.04: Linux home 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 可以在如下的目录看到ACPI的基本信息: 但是默认的表都是不可以直接查看的&…...

Java-Redis持久化之RDB操作

Java-Redis持久化之RDB操作 1.为什么redis需要持久化?2.什么是RDB操作?3.请你用自己的话讲下RDB的过程?4.如何恢复rdb文件? 1.为什么redis需要持久化? Redis是内存数据库,如果不将内存数据库保存到磁盘,那么服务器进程退出&am…...

信号signal编程测试

信号会打断系统调用,慎用,就是用的时候测一测。 下面是信号的基础测试 信号 信号(signal)机制是UNIX系统中最为古老的进程之间的通信机制。它用于在一个或多个进程之间传递异步信号。信号可以由各种异步事件产生,例如…...

Linux学习记录——이십삼 进程信号(2)

文章目录 1、可重入函数2、volatile关键字3、如何理解编译器的优化4、SIGCHLD信号 1、可重入函数 两个执行流都执行一个函数时,这个函数就被重入了。比如同一个函数insert,在main中执行时,这个进程时间片到了,嵌入了内核&#xf…...

Revit中如何创建曲面嵌板及一键成板

一、Revit中如何创建曲面嵌板 在我们的绘图过程中可能会遇见一些曲面形状,而我们的常规嵌板没办法满足我们绘制的要求,我们今天学习如何在revit中绘制曲面嵌板。 1.新建“自适应公制常规模型”族,创建4个点图元并为其使用自适应。 2.在相同的…...

STM32F4_DHT11数字温湿度传感器

目录 前言 1. DHT11简介 2. DHT11数据结构 3. DHT11的传输时序 3.1 DHT11开始发送数据流程 3.2 主机复位信号和DHT11响应信号 3.3 数字 “0” 信号表示方法 3.4 数字 “1” 信号表示方法 4. 硬件分析 5. 实验程序详解 5.1 main.c 5.2 DHT11.c 5.3 DHT11.h 前言 DH…...

WiFi(Wireless Fidelity)基础(十一)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…...

操作系统—— 精髓与设计原理--期末复习

一、计算机系统概述 1、基本构成 计算机有四个主要的结构化部件: ①处理器(Processor):控制计算机的操作,执行数据处理功能。当只有一个处理器时,它通常指中央处理器(CPU) ②内存…...

每天一道算法练习题--Day21 第一章 --算法专题 --- ----------位运算

我这里总结了几道位运算的题目分享给大家,分别是 136 和 137, 260 和 645, 总共加起来四道题。 四道题全部都是位运算的套路,如果你想练习位运算的话,不要错过哦~~ 前菜 开始之前我们先了解下…...

D1. LuoTianyi and the Floating Islands (Easy Version)(树形dp)

Problem - D1 - Codeforces 这是问题的简化版本。唯一的区别在于在该版本中k≤min(n,3)。只有在两个版本的问题都解决后,才能进行黑客攻击。 琴音和漂浮的岛屿。 洛天依现在生活在一个有n个漂浮岛屿的世界里。这些漂浮岛屿由n−1个无向航线连接,任意两个…...

rk3588移植ubuntu server

ubuntu server 18.04 arm版本. 1、使用qemu运行 安装qemu-system-aarch64 sudo apt install -y qemu-system-arm 2、下载ubuntu server Index of /releases/18.04.3 3、创建虚拟磁盘 qemu-img create ubuntuimg.img 40G 4、创建虚拟机 弹出界面,直接回车选…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

LangChain【6】之输出解析器:结构化LLM响应的关键工具

文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...

从零手写Java版本的LSM Tree (一):LSM Tree 概述

🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...

更新 Docker 容器中的某一个文件

&#x1f504; 如何更新 Docker 容器中的某一个文件 以下是几种在 Docker 中更新单个文件的常用方法&#xff0c;适用于不同场景。 ✅ 方法一&#xff1a;使用 docker cp 拷贝文件到容器中&#xff08;最简单&#xff09; &#x1f9f0; 命令格式&#xff1a; docker cp <…...

OpenHarmony标准系统-HDF框架之I2C驱动开发

文章目录 引言I2C基础知识概念和特性协议&#xff0c;四种信号组合 I2C调试手段硬件软件 HDF框架下的I2C设备驱动案例描述驱动Dispatch驱动读写 总结 引言 I2C基础知识 概念和特性 集成电路总线&#xff0c;由串网12C(1C、12C、Inter-Integrated Circuit BUS)行数据线SDA和串…...

Linux 进程管理学习指南:架构、计划与关键问题全解

Linux 进程管理学习指南&#xff1a;架构、计划与关键问题全解 本文面向初学者&#xff0c;旨在帮助你从架构视角理解 Linux 进程管理子系统&#xff0c;构建系统化学习路径&#xff0c;并通过结构化笔记方法与典型问题总结&#xff0c;夯实基础、明确方向&#xff0c;逐步掌握…...

奈飞工厂官网,国内Netflix影视在线看|中文网页电脑版入口

奈飞工厂是一个专注于提供免费Netflix影视资源的在线播放平台&#xff0c;致力于为国内用户提供的Netflix热门影视内容。该平台的资源与Netflix官网基本同步&#xff0c;涵盖电影、电视剧、动漫和综艺等多个领域。奈飞工厂的界面简洁流畅&#xff0c;资源分类清晰&#xff0c;方…...

解决SQL Server SQL语句性能问题(9)——SQL语句改写(2)

9.4.3. update语句改写 与Oracle类似,SQL Server中,update语句被用户相关技术人员广泛应用于现实日常工作中。但是,有些情况下,尤其是海量数据场景中,update语句也许会带来性能方面的严重问题或极大隐患。因此,为了解决和消除update语句导致的性能问题或隐患,我们将需对…...