Http Response Code[整理]

本文详细介绍了HTTP协议中的状态码,包括其五大类别及其具体含义。从100系列到500系列,每个状态码都有详细的解释,帮助读者更好地理解和处理HTTP请求与响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP协议状态码表示的意思主要分为五类 ,大体是 :  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
1××   保留   
2××   表示请求成功地接收   
3××   为完成请求客户需进一步细化请求   
4××   客户错误   
5××   服务器错误  

 

---------------------------------------------------------------

 

100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)

101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)

 

Successful 
=================================

200 OK 一切正常,对GET和POST请求的应答文档跟在后面。

201 Created 服务器已经创建了文档,Location头给出了它的URL。

202 Accepted 已经接受请求,但处理尚未完成。

203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。

204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。

206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。

 

Redirection 
==================================

300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。
出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。

注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。

严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。

303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。

307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时 才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。(HTTP 1.1新)

 

Client Error 
=====================

400 Bad Request 请求出现语法错误。

401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。

403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。

405 Method Not Allowed 请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)

406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容。(HTTP 1.1新)

407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)

408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)

409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)

410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)

411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)

412 Precondition Failed 请求头中指定的一些前提条件失败。(HTTP 1.1新)

413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头。(HTTP 1.1新)

414 Request URI Too Long URI太长。(HTTP 1.1新)

416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)

 

Server Error 
===================================

500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。

501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。

502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。

504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)

505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)

 

---------------------------------------------------------------

参考文章:

HTTP返回码总结

常用的Http Response Code代码

---------------------------------------------------------------

<think>好的,我现在需要解决用户提到的WebSocket握手过程中出现的302重定向问题,并且这个问题与Shiro框架有关。首先,我要理解用户的具体情况。用户可能在客户端尝试建立WebSocket连接时,服务器返回了302状态码,导致握手失败。这可能是因为Shiro的安全配置拦截了WebSocket请求,将其重定向到登录页面或其他URL。 首先,我应该回忆一下WebSocket握手的过程。WebSocket协议在建立连接时,客户端会发送一个HTTP Upgrade请求,将连接从HTTP升级到WebSocket。服务器需要正确处理这个请求,返回101 Switching Protocols响应。如果服务器返回了302,说明请求被重定向了,而WebSocket客户端无法处理这种重定向,导致连接失败。 接下来,考虑Shiro框架的影响。Shiro是一个安全框架,用于身份验证和授权。如果WebSocket的端点路径被Shiro拦截,而用户未通过认证,Shiro可能会将请求重定向到登录页面,从而返回302状态码。因此,需要检查Shiro的配置,确保WebSocket的URL不被拦截,或者在这些路径上允许匿名访问。 然后,回顾用户提供的引用内容,特别是引用3和引用4。引用3提到在服务器上出现302错误时,可能需要将协议从ws改为wss,或者检查服务端是否启用了SSL。这可能与Shiro无关,但需要考虑。引用4指出Tomcat版本导致的包依赖问题,但用户的问题可能与Shiro配置更相关。 接下来,思考可能的解决方案。首先,检查Shiro的URL过滤配置,确保WebSocket的路径被排除在安全过滤之外。例如,在Shiro的配置文件中,将WebSocket的URL设置为匿名访问。其次,检查WebSocket的URL是否正确,避免路径错误导致Shiro拦截。另外,可能需要调整WebSocket的协议(ws/wss)或服务器配置,确保握手请求不被重定向。 还需要考虑服务器端的WebSocket实现是否正确。例如,是否使用了正确的注解(如@ServerEndpoint)以及是否配置了正确的CORS策略。此外,服务器是否支持WebSocket,比如Tomcat的版本是否合适,是否有冲突的依赖包,如引用4中提到的javax与jakarta包的问题,但用户的问题集中在Shiro,可能需要先解决权限配置。 另外,用户提到的是302重定向,这可能是因为会话过期或未认证,Shiro将请求重定向到登录页面。因此,确保在建立WebSocket连接时,用户已经通过认证,并且会话有效。或者在WebSocket握手阶段,Shiro不进行拦截,允许该请求通过。 可能的步骤包括: 1. 调整Shiro的过滤器链,将WebSocket路径(如/ws/**)设置为匿名访问或放行。 2. 检查WebSocket的URL是否正确,是否与服务端配置的路径匹配。 3. 确保使用wss协议如果服务端启用了SSL。 4. 验证用户认证状态,确保在建立连接时会话有效。 5. 检查服务器日志,查看具体的拦截原因,确认是否是Shiro导致的重定向。 最后,综合这些信息,整理出一个结构清晰的回答,帮助用户逐步排查和解决问题,同时引用相关的参考资料。</think>### 解决Shiro框架中WebSocket握手返回302重定向的问题 当Shiro框架拦截WebSocket握手请求时,可能导致返回302状态码(通常是未认证时重定向到登录页)。以下是具体解决方案: --- #### 1. **配置Shiro过滤器放行WebSocket路径** 在Shiro的安全配置中,确保WebSocket连接路径(如`/ws/**`)被排除在认证拦截外。例如,在`shiroFilterChainDefinition`中添加规则: ```java filterChainDefinitionMap.put("/ws/**", "anon"); // 允许匿名访问WebSocket端点 ``` 这能防止Shiro对WebSocket握手请求进行拦截和重定向[^3]。 --- #### 2. **检查WebSocket URL协议类型** 如果服务端启用了SSL(HTTPS),客户端需使用`wss://`协议而非`ws://`: ```javascript // 服务端启用SSL时,使用wss协议 const socket = new WebSocket("wss://your-domain.com/ws-endpoint"); ``` 错误的协议可能导致Shiro或其他中间件强制重定向。 --- #### 3. **验证会话有效性** WebSocket握手请求通常携带Cookie或Token进行身份验证。若会话过期,Shiro会重定向到登录页。需确保: - 连接建立时用户已通过认证。 - 客户端在握手请求中附加有效凭证(如JSESSIONID)。 --- #### 4. **调整Shiro的会话管理配置** 在`shiro.ini`或配置类中,禁用对WebSocket路径的会话创建: ```ini [urls] /ws/** = noSessionCreation, anon ``` 避免Shiro因无会话而拒绝请求。 --- #### 5. **排查服务器依赖冲突** 若使用Tomcat 10+,确保WebSocket依赖为`jakarta.websocket-api`而非`javax.websocket`。错误依赖会导致握手失败,间接触发Shiro拦截: ```xml <!-- Maven依赖示例 --> <dependency> <groupId>jakarta.websocket</groupId> <artifactId>jakarta.websocket-api</artifactId> <version>2.1.0</version> </dependency> ``` [^4] --- #### 6. **检查服务端WebSocket实现** 确保服务端正确使用`@ServerEndpoint`注解并配置路径: ```java @ServerEndpoint("/ws-endpoint") public class WebSocketEndpoint { // 实现逻辑 } ``` 路径需与客户端连接URL完全匹配,避免因路径错误被Shiro拦截。 --- #### 7. **查看服务器日志定位问题** 通过日志确认Shiro拦截的具体原因: - 检查是否有`org.apache.shiro.web.filter.authz`相关的权限拒绝记录。 - 确认重定向目标是否为登录页或其他定义路径。 --- ### 总结 核心问题在于Shiro拦截了WebSocket的握手请求,通过调整过滤器配置、验证协议和会话有效性、排除依赖冲突,可解决302重定向错误。若问题持续,建议逐步关闭Shiro规则进行隔离测试。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值