http协议介绍

164 阅读7分钟

初识:

HTTP(Hypertext Transfer Protocol)是一种用于在Web浏览器和服务器之间传输数据的协议。它建立在TCP/IP协议之上,通过客户端-服务器模型进行通信。

HTTP的工作原理如下:

1. 客户端发起请求

  1. 服务器响应请求

  2. 数据传输

  3. 连接关闭

HTTP协议的特点如下:

1. 简单:HTTP协议可读性强,易于理解和使用。

  1. 无连接:每次请求和响应之间都是独立的,服务器不会保留客户端的状态信息。

  2. 无状态:服务器不会保存客户端的状态信息,每个请求都是独立的,需要用户进行身份验证时,需要在每个请求中提供相应的凭证。

  3. 可扩展:HTTP头部字段可以灵活地添加新的字段,以支持扩展功能。

 

发展:

  1. HTTP/0.9:最早版本的HTTP是在1991年引入的,它非常简单,只支持GET方法,没有HEADER头部信息,主要用于获取静态HTML页面。

 

  1. HTTP/1.0:在1996年发布的HTTP/1.0中,引入了很多重要的特性,如POST方法、头部字段、状态码和缓存机制。这使得HTTP能够支持更复杂的应用程序和动态内容生成。

 

  1. HTTP/1.1:在1997年发布的HTTP/1.1版本对HTTP进行了一些重要的改进和扩展。它引入了持久连接(keep-alive)以及分块编码(chunked encoding)等机制,减少了不必要的连接建立和带宽消耗。

 

  1. HTTPS:HTTPS(安全HTTP)在HTTP上添加了SSL/TLS协议层,通过加密通信和身份验证来提供更高的安全性,确保数据传输的机密性和完整性。

 

  1. SPDY和HTTP/2:SPDY是由Google开发的网络传输协议,旨在替代HTTP/1.x。它引入了多路复用、请求优先级和头部压缩等机制,提高了网页加载速度和传输效率。基于SPDY的协议演进为HTTP/2,于2015年发布,并广泛应用于现代浏览器和服务器。

 

  1. HTTP/3:HTTP/3是最新的HTTP协议版本,基于QUIC(快速UDP互联网连接)协议,由IETF(互联网工程任务组)开发。它旨在提供更快的连接建立和数据传输速度,改善在高延迟和带宽受限环境下的用户体验。

 

7. WebSockets:WebSockets是一种全双工通信协议,允许在客户端和服务器之间建立持久的、实时的双向通信连接。相对于传统的HTTP请求-响应模式,WebSockets提供了更低的延迟和更高的实时性能,适用于实时聊天、多人游戏等应用场景。

 

Http中请求可分为请求和相应两部分:

HTTP中的请求(Request)和响应(Response)是客户端和服务器之间进行通信的关键元素,承载着传输的数据和控制信息。

 

  1. 请求(Request):

   - 请求行:包括请求方法、URL和HTTP协议版本。常见的请求方法有GET、POST、PUT、DELETE等。

   - 请求头部(Headers):包含了关于请求的附加信息,如User-Agent、Content-Type、Cookie等。

   - 请求体(Body):可选部分,用于传输请求的数据,如表单数据、JSON数据等。

 

  1. 响应(Response):

   - 状态行:包括HTTP协议版本、状态码以及对应的状态消息。常见的状态码有200表示成功、404表示未找到资源、500表示服务器内部错误等。

   - 响应头部(Headers):包含了关于响应的附加信息,如Server、Content-Type、Content-Length等。

   - 响应体(Body):传输响应的实际数据,可以是HTML页面、图片、JSON数据等。

 

HTTP请求和响应通过TCP/IP连接进行传输,具体的流程如下:

  1. 客户端发起HTTP请求,构建请求行、请求头部和请求体,并将其发送给服务器。

  2. 服务器接收到请求后,解析请求行、请求头部和请求体,并根据请求的路径和方法进行相应的处理。

  3. 服务器生成HTTP响应,构建状态行、响应头部和响应体,并将其发送给客户端。

  4. 客户端接收到响应后,解析状态行、响应头部和响应体,并根据需要进行相应的处理。

 

请求和响应的内容可以包含很多信息,如文件类型、编码方式、缓存配置、身份验证等。这些信息能够在客户端和服务器之间准确地传递数据,并进行控制和协商。

 

状态码:

HTTP状态码是服务器对客户端请求的响应结果进行标识的三位数字代码。它们提供了有关请求处理状态的信息,帮助客户端了解请求是否成功以及出现的错误类型

 

1xx 状态码(信息性状态码):表示请求已被接收,需要进一步处理。

  • 100 Continue:服务器已接收到请求的一部分,等待客户端发送剩余请求。

  • 101 Switching Protocols:服务器已理解客户端的请求,正在切换协议。

 

2xx 状态码(成功状态码):表示请求已成功被服务器接收、理解和处理。

  • 200 OK:请求成功,服务器返回的数据在响应中。

  • 201 Created:请求成功并创建了新资源,通常用于 POST 请求。

  • 204 No Content:请求成功,但响应中没有返回实体内容。

 

3xx 状态码(重定向状态码):表示需要客户端进行进一步操作才能完成请求。

  • 301 Moved Permanently:被请求的资源已永久移动到新位置。

  • 302 Found:被请求的资源临时从不同的 URI 响应请求。

  • 304 Not Modified:客户端可以使用缓存的内容,表示资源未修改。

 

4xx 状态码(客户端错误状态码):表示客户端发送的请求有错误。

  • 400 Bad Request:请求无效,服务器无法理解。

  • 401 Unauthorized:请求要求身份验证。

  • 404 Not Found:请求的资源不存在。

 

5xx 状态码(服务器错误状态码):表示服务器在处理请求时发生错误。

  • 500 Internal Server Error:服务器内部错误。

  • 503 Service Unavailable:服务器当前无法处理请求,通常是临时状态。

 

通过解析状态码,客户端可以根据不同的情况采取相应的处理方式,确保有效的通信和错误处理。

 

常用的请求头(Request Headers)包括:

  1. User-Agent:标识客户端的用户代理信息,用于告知服务器发送请求的客户端类型、操作系统、浏览器等详细信息。

 

  1. Accept:指定客户端接受的响应内容的类型。可以使用MIME类型或通配符,例如"application/json"表示接受JSON格式的数据。

 

  1. Content-Type:指定请求体中发送的数据类型。常见的取值有"application/json"、"application/x-www-form-urlencoded"和"multipart/form-data"等。

 

  1. Authorization:用于在请求中传递身份验证凭据,通常用于访问需要身份验证的资源。常见的值有"Basic"、"Bearer"等。

 

  1. Cookie:用于在请求中传递存储在客户端的Cookie信息,例如在登录后的每个请求中发送会话令牌。

 

常用的响应头(Response Headers)包括:

 

  1. Content-Type:指定响应体中返回的数据类型。常见的取值有"text/html"、"application/json"和"image/jpeg"等。

 

  1. Content-Length:指定响应体中返回的数据长度,以字节为单位。

 

  1. Set-Cookie:用于在响应中设置新的Cookie或更新已存在的Cookie。服务器可以通过Set-Cookie头将Cookie信息发送给客户端。

 

  1. Cache-Control:指定响应在客户端进行缓存的行为。常见的取值有"no-cache"、"public"和"private"等。

 

  1. Access-Control-Allow-Origin:用于跨域资源共享(CORS),指定可以访问该资源的域名。

 

  1. Location:用于重定向。当服务器返回状态码为3xx的重定向响应时,通常会使用Location头来指定重定向的URL。