http协议及其特点,状态码
什么是http协议?有什么特点?有哪些状态码?
什么是HTTP协议
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,用于在客户端和服务器之间进行通信。HTTP 协议定义了 Web 客户端和服务器之间互相通信的格式和规则,是互联网信息交换的基础
- HTTP是基于请求-响应模型的协议,客户端发送HTTP请求到服务器,服务器处理请求并返回相应的HTTP响应。
 - HTTP使用URL(Uniform Resource Locator)来标识要获取的资源的位置。客户端通过URL指定要请求的资源,例如网页、图像、视频等。
 - HTTP协议通常使用TCP/IP作为传输协议,通过端口号80进行通信。
 - HTTP协议是无状态的,服务器不会保存之前请求的任何状态信息。为了维护会话状态,可以使用Cookie和Session等机制。
 - HTTP 使用统一资源标识符(Uniform Resource Identifier)来定位要访问的资源。 最常见的 URI 即 URL,比如 https://www.example.com/index.html。
 
HTTP协议的特点
- 简单:HTTP的请求和响应都是由文本构成,易于阅读和理解。它使用简单的命令集来完成通信。
 - 可扩展:HTTP的头部允许添加自定义的字段,可以根据需求扩展协议。
 - 无连接:每个HTTP请求都是独立的,服务器在处理完请求后会断开与客户端的连接。这种无连接的特性可以减轻服务器的负载,但也会增加连接的建立和关闭的开销。
 - 无状态:服务器不会保存之前请求的状态信息,每个请求都是相互独立的。这意味着每个请求都需要包含所有必要的信息,例如身份验证凭据等。
 - 支持缓存:HTTP支持客户端和服务器之间的缓存机制,可以减少数据传输量和提高性能。
 
HTTP协议常用方法
- GET
 
- 用于获取资源
 - 只请求资源,不修改资源
 - 可以缓存
 - 幂等操作
 - 有长度限制
 - 参数通过查询字符串传递
 
- POST
 
- 用于创建资源
 - 可以创建新的资源,也可以修改资源
 - 不安全,不可缓存
 - 不幂等
 - 没有长度限制
 - 参数通过请求体传递
 
- PUT
 
- 用于替换资源
 - 整个替换资源,或创建指定URI的资源
 - 不安全,可缓存
 - 幂等操作
 - 没有长度限制
 - 参数通过请求体传递
 
- PATCH
 
- 用于部分更新资源
 - 只更新资源的一部分
 - 不安全,不可缓存
 - 不幂等
 - 没有长度限制
 - 参数通过请求体传递
 
- DELETE
 
- 用于删除资源
 - 删除指定的资源
 - 不安全,不可缓存
 - 幂等操作
 - 没有请求体
 
- HEAD
 
- 与GET方法相同,但只返回报文头
 - 获取报文首部以确定资源状态及元数据
 - 对性能和资源消耗最小
 
- OPTIONS
 
- 用于查询支持的方法
 - 可以查询服务器对特定资源支持的HTTP方法
 - 幂等操作
 
HTTP常见错误码:
当客户端与服务器进行HTTP通信时,可能会遇到各种错误码。以下是HTTP错误码的更多详细列举,按照不同的错误类别划分:
1XX 信息性状态码(Informational)
- 100 Continue:请求已成功收到,客户端应继续发送请求的其余部分。
 - 101 Switching Protocols:服务器已理解客户端的协议升级请求,并将其切换到新协议。
 
2XX 成功状态码(Success)
- 200 OK:请求成功,服务器成功处理了请求。
 - 201 Created:请求成功,服务器成功创建了新的资源。
 - 202 Accepted:请求已接受,但尚未处理完成。
 - 204 No Content:请求成功,但响应报文中没有实体的主体部分。
 
3XX 重定向状态码(Redirection)
- 300 Multiple Choices:请求的资源有多个位置可供选择。
 - 301 Moved Permanently:请求的资源已永久移动到新位置。
 - 302 Found:请求的资源暂时移动到其他位置。
 - 304 Not Modified:客户端缓存的资源未修改,可以使用缓存的版本。
 
4XX 客户端错误状态码(Client Errors)
- 400 Bad Request:服务器无法理解客户端发送的请求。
 - 401 Unauthorized:请求需要身份验证,但客户端未提供有效的身份验证信息。
 - 403 Forbidden:服务器拒绝了请求,客户端没有访问所请求资源的权限。
 - 404 Not Found:请求的资源不存在于服务器上。
 - 405 Method Not Allowed:请求方法不被允许。
 
5XX 服务器错误状态码(Server Errors)
- 500 Internal Server Error:服务器在处理请求时遇到了错误。
 - 501 Not Implemented:服务器不支持客户端请求的功能或方法。
 - 502 Bad Gateway:作为代理或网关的服务器从上游服务器接收到无效的响应。
 - 503 Service Unavailable:服务器暂时无法处理请求,通常由于过载或维护。
 - 504 Gateway Timeout:作为代理或网关的服务器在等待上游服务器的响应时超时。
 
301和302的区别
301和302是HTTP协议中的重定向状态码,用于指示请求的资源已经被移动到新的位置。它们之间的区别如下:
301 Moved Permanently(永久重定向):
- 当服务器返回301状态码时,它表示请求的资源已经永久移动到了一个新的位置。
 - 客户端在收到301响应后,应该更新其链接指向新的URL,并将以后的请求发送到新的URL。
 - 搜索引擎会更新它们的索引,将旧的URL替换为新的URL。
 - 使用301重定向时,浏览器会自动将用户重定向到新的URL,用户可能会察觉到网页地址的变化。
 
302 Found(临时重定向):
- 当服务器返回302状态码时,它表示请求的资源暂时移动到了一个新的位置。
 - 客户端在收到302响应后,应该继续使用原始的URL发送请求。
 - 搜索引擎会继续将索引指向原始的URL,而不是新的URL。
 - 使用302重定向时,浏览器会自动将用户重定向到新的URL,用户可能不会察觉到网页地址的变化。
 
总结:
- 301表示永久重定向,要求客户端更新书签和链接,搜索引擎将索引指向新的URL。
 - 302表示临时重定向,客户端应该继续使用原始URL发送请求,搜索引擎继续索引原始URL。
 - 在实际使用中,301常用于网站结构调整或更改域名等情况,而302常用于临时重定向,例如网站维护或临时转移资源。
 - 若不确定应该使用301还是302时,可以考虑使用302,因为它不会对搜索引擎的索引产生永久性影响。
 
401与403的区别
401 Unauthorized(未授权)和403 Forbidden(禁止访问)是HTTP协议中的客户端错误状态码,用于指示客户端请求的资源的访问权限问题。它们之间的区别如下:
401 Unauthorized(未授权):
- 当服务器返回401状态码时,表示客户端请求需要进行身份验证才能访问资源。
 - 这个状态码要求客户端提供有效的身份验证凭据(例如用户名和密码)以便服务器验证其身份。
 - 通常,在收到401响应后,客户端会弹出身份验证对话框,要求用户提供凭据以重新发送请求。
 
403 Forbidden(禁止访问):
- 客户端提供的身份验证凭据无效或缺失。
 - 客户端的身份验证凭据有效,但没有足够的权限来访问特定资源。
 - 服务器设置了访问控制列表(ACL)或其他访问限制规则,拒绝客户端访问资源。
 - 当服务器返回403状态码时,表示客户端被服务器禁止访问请求的资源。
 - 这个状态码表明客户端没有足够的权限或认证来访问资源。
 - 403状态码可以在以下情况下出现:
 
总结:
- 401表示未授权,要求客户端进行身份验证,用于需要身份验证的资源。
 - 403表示禁止访问,客户端被服务器拒绝访问请求的资源,通常是由于缺乏权限、身份验证问题或服务器的访问限制。
 
在实际应用中,服务器可以根据具体的需求和场景来返回适当的状态码,以便客户端能够理解并采取相应的操作。401状态码通常用于需要身份验证的资源,而403状态码用于明确拒绝访问的情况。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CJJJX's BLOG!
