HTTP常见报错status

Http常见返回状态总结

简介:当我们在开发项目中,经常会出现一些bug,而就http前端界面而言,测试或运行时可能会出现404等报错信息,与此对应的状态还有很多,小编在这为大家简单总结了一下,希望对大家有用。


一, Http协议状态分类
http协议status大致分为五大类,如下:
	-------------------------------
	1**		保留
	2**		表示请求成功的接受(Successful)
	3**		完成请求并需进一步细化请求(Redirection)
	4**		客户错误(Client Error)
	5**		服务器错误(Server Error)
二, 具体讲解
100 Continue
("100" : Continue)
指示客户端应该继续请求。回送用于通知客户端此次请求已经收到,并且没有被服务器拒绝。
客户端应该继续发送剩下的请求数据或者请求已经完成,或者忽略回送数据。服务器必须发送
最后的回送在请求之后。
101 Switching Protocols
("101" : witching Protocols)
服务器依照客服端请求,通过Upgrade头信息,改变当前连接的应用协议。服务器将根据Upgrade头立刻改变协议
在101回送以空行结束的时候。

Successful

200 OK
("200" : OK)
指示客服端的请求已经成功收到,解析,接受。
201 Created
("201" : Created)
请求已经完成并一个新的返回资源被创建。被创建的资源可能是一个URI资源,通常URI资源在Location头指定。回送应该包含一个实体数据
并且包含资源特性以及location通过用户或者用户代理来选择合适的方法。实体数据格式通过煤体类型来指定即content-type头。最开始服务 器
必须创建指定的资源在返回201状态码之前。如果行为没有被立刻执行,服务器应该返回202
202 Accepted
("202" : Accepted)
请求已经被接受用来处理。但是处理并没有完成。请求可能或者根本没有遵照执行,因为处理实际执行过程中可能被拒绝
203 Non-Authoritative Information
("203" : Non-Authoritative Information)
不是权威性信息
204 No Content
("204" : No Content)
服务器已经接受请求并且没必要返回实体数据,可能需要返回更新信息。回送可能包含新的或更新信息由entity-headers呈现。
205 Reset Content
("205" : Reset Content)
服务器已经接受请求并且用户代理应该重新设置文档视图。
206 Partial Content
("206" : Partial Content)
服务器已经接受请求GET请求资源的部分。请求必须包含一个Range头信息以指示获取范围可能必须包含If-Range头信息以成立请求条件。

Redirection

300 Multiple Choices
("300" : Multiple Choices)
请求资源符合任何一个呈现方式。
301 Moved Permanently
("301" : Moved Permanently)
请求的资源已经被赋予一个新的URI。
302 Found
("302" : Found)
通过不同的URI请求资源的临时文件。
303 See Other
("302" : Found)
其他错误
304 Not Modified
("304" : Not Modified)
如果客服端已经完成一个有条件的请求并且请求是允许的,但是这个文档并没有改变,服务器应该返回304状态码。304
状态码一定不能包含信息主体,从而通常通过一个头字段后的第一个空行结束。
305 Use Proxy
("305" : Use Proxy)
请求的资源必须通过代理(由Location字段指定)来访问。Location资源给出了代理的URI。
306 Unused
307 Temporary Redirect
("307" : Temporary Redirect)
临时重定向。

Client Error

400 Bad Request
("400" : Bad Request)
因为错误的语法导致服务器无法理解请求信息。
401 Unauthorized
("401" : Unauthorized)
如果请求需要用户验证。回送应该包含一个WWW-Authenticate头字段用来指明请求资源的权限
402 Payment Required
("402" : Payment Required)
保留状态码。
403 Forbidden
("403" : Forbidden)
服务器接受请求,但是被拒绝处理。
404 Not Found
(Not Found)
服务器已经找到任何匹配Request-URI的资源。
405 Menthod Not Allowed
("405" : Method Not Allowed)
Request-Line 请求的方法不被允许通过指定的URI。
406 Not Acceptable
("406" : Not Acceptable)
客户端浏览器不接受所请求页面的 MIME 类型。
407 Proxy Authentication Required
("407" : Proxy Authentication Required)
要求进行代理身份验证。
408 Reqeust Timeout
("408" : Request Time-out)
客服端没有提交任何请求在服务器等待处理时间内。
409 Conflict
("409" : Conflict)
410 Gone
("410" : Gone)
411 Length Required
("411" : Length Required)
服务器拒绝接受请求在没有定义Content-Length字段的情况下。
412 Precondition Failed
("412" : Precondition Failed)
前提条件失败。
413 Request Entity Too Large
("413" : Request Entity Too Large)
服务器拒绝处理请求因为请求数据超过服务器能够处理的范围。服务器可能关闭当前连接来阻止客服端继续请求。
414 Request-URI Too Long
("414" : Request-URI Too Large)
服务器拒绝服务当前请求因为URI的长度超过了服务器的解析范围。
415 Unsupported Media Type
("415" : Unsupported Media Type)
服务器拒绝服务当前请求因为请求数据格式并不被请求的资源支持。
416 Request Range Not Satisfialbe
("416" : Requested range not satisfiable)
所请求的范围无法满足。
417 Expectation Failed
("417" : Expectation Failed)
执行失败。

Server Error

500 Internal Server Error
("500" : Internal Server Error)
服务器遭遇异常阻止了当前请求的执行
501 Not Implemented
("501" : Not Implemented)
服务器没有相应的执行动作来完成当前请求。
502 Bad Gateway
("502" : Bad Gateway)
Web 服务器用作网关或代理服务器时收到了无效响应。
503 Service Unavailable
("503" : Service Unavailable)
因为临时文件超载导致服务器不能处理当前请求。
504 Gateway Timeout
("504" : Gateway Time-out)
网关访问超时。
505 Http Version Not Supported
("505" : HTTP Version not supported)
HTTP 版本不受支持。
### FastAPI 常见错误及解决方案 #### 1. **安装依赖问题** 在使用 FastAPI 及其相关扩展(如 `FastAPI Users` 或 `FastAPI Admin`)时,可能会遇到依赖冲突或缺失的情况。这通常发生在未按照官方文档中的说明正确安装所需包的情况下。 解决方法包括确保使用虚拟环境隔离项目依赖,并严格按照项目的 `requirements.txt` 文件或官方指南进行安装[^3]。如果仍然存在问题,尝试升级 pip 并清理缓存后再重新安装依赖项。 ```bash pip install --upgrade pip pip cache purge pip install -r requirements.txt ``` --- #### 2. **类型验证失败** FastAPI 使用 Pydantic 进行数据模型定义和请求参数验证。如果传入的数据不符合预期的结构或类型,则会抛出 `ValidationError` 错误。 为了处理这种情况,可以在路由函数中捕获异常并返回友好的错误消息: ```python from fastapi import FastAPI, Request from pydantic import BaseModel, ValidationError app = FastAPI() class Item(BaseModel): name: str price: float @app.post("/items/") async def create_item(item: Item): return item.dict() @app.exception_handler(ValidationError) async def validation_exception_handler(request: Request, exc: ValidationError): return JSONResponse( status_code=422, content={"detail": exc.errors()}, ) ``` 上述代码展示了如何捕捉 Pydantic 的验证错误并将其转换为标准的 HTTP 422 Unprocessable Entity 响应。 --- #### 3. **跨域资源共享 (CORS) 问题** 当客户端试图从前端访问部署在不同域名上的 FastAPI 后端服务时,浏览器可能因 CORS 策略阻止请求。这种情况下需要显式启用 CORS 支持。 可以通过安装 `fastapi-cors` 插件或者手动设置中间件来解决问题: ```python from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware app = FastAPI() origins = [ "http://localhost", "http://localhost:3000", # 替换为前端应用的实际地址 ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/") def read_root(): return {"message": "Hello World"} ``` 这段代码片段允许指定的源发起跨域请求。 --- #### 4. **JWT 认证失效** 对于涉及身份验证的应用程序,JWT 是一种常用的技术方案。然而,在实际操作过程中可能出现令牌过期、签名无效等问题。 建议实现自定义的身份验证逻辑以增强健壮性。例如,通过拦截器检查 Token 是否有效,并及时刷新即将到期的 Token: ```python import jwt from datetime import timedelta, datetime from fastapi.security import OAuth2PasswordBearer SECRET_KEY = "your-secret-key" ALGORITHM = "HS256" oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") def decode_token(token: str): try: payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) username: str = payload.get("sub") exp_time: int = payload.get("exp") if not username or datetime.utcnow().timestamp() >= exp_time: raise ValueError return username except Exception as e: raise HTTPException(status_code=401, detail="Invalid token") from e ``` 此处提供了简单的 JWT 解码示例以及相应的错误处理机制[^2]。 --- #### 5. **数据库连接池耗尽** 当应用程序频繁读写数据库而未能妥善释放资源时,可能导致连接池被占满从而引发超时错误。针对这一现象,推荐优化查询语句效率的同时合理调整最大并发数限制。 以下是利用 Tortoise ORM 设置异步数据库连接的一个例子: ```python from tortoise.contrib.fastapi import register_tortoise from fastapi import FastAPI app = FastAPI() register_tortoise( app, db_url='sqlite://db.sqlite3', modules={'models': ['path.to.models']}, generate_schemas=True, add_exception_handlers=True, ) ``` 该配置有助于简化数据库集成过程并降低潜在风险[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值