HTTP|青训营

127 阅读9分钟

什么是HTTP

HTTP指的是超文本传输协议(Hypertext Transfer Protocol),它是一种用于在网络上传输和发送文本(如网页、图片、视频等)的协议,HTTP是客户端和服务器之间的进行通信的基础,它定义了客户端发起请求以获取资源,服务器响应请求并发送资源的规则和格式。

特点:

  • 简单易读:HTTP的消息格式简单明了,易于理解和解析。它使用文本形式的请求和响应头部,使得开发人员能够轻松查看和调试HTTP通信。
  • 无连接性:HTTP是一种无连接协议,每个请求都是独立的,服务器不会保留关于客户端的任何状态信息。这意味着服务器不会记住之前的请求,每个请求都是相互独立的。
  • 无状态性:类似于无连接性,HTTP也是一种无状态协议,服务器不会跟踪客户端的状态信息。每个请求都是独立的,服务器不会记住之前的请求或会话信息。为了实现状态管理,通常使用Cookies或会话机制。
  • 可扩展性:HTTP协议支持可扩展的头部字段,可以通过添加自定义头部字段来满足特定应用的需求。这使得HTTP可以适应不同的场景和应用需求。
  • 请求-响应模型:HTTP采用请求-响应模型,客户端发送请求到服务器,服务器处理请求并返回响应。这种模型使得客户端和服务器之间的通信简单明了。
  • 支持多媒体:HTTP不仅仅适用于传输超文本(HTML),还可以用于传输各种类型的媒体数据,如图片、音频、视频等。通过指定合适的MIME类型,可以确保服务器和客户端正确地处理和解析不同类型的媒体数据。

报文

HTTP报文是在HTTP协议中用于在客户端和服务器之间传输数据的格式。它包括两种类型的报文:请求报文和响应报文。

  1. 请求报文:客户端发送的HTTP请求包括以下几个部分:

    • 请求行:包括请求方法、请求的URL和HTTP协议版本。
    • 请求头部:包含关于请求的元数据,如Host(指定服务器的域名或IP地址)、User-Agent(标识客户端类型)、Content-Type(指定请求体的媒体类型)等。
    • 空行:一个空行用于分隔请求头部和请求体。
    • 请求体(可选):包含请求的数据,例如在POST请求中发送的表单数据或上传的文件。
  2. 响应报文:服务器发送的HTTP响应包括以下几个部分:

    • 状态行:包括HTTP协议版本、状态码(表示请求的处理结果)和状态描述。
    • 响应头部:包含关于响应的元数据,如Content-Type(指定响应体的媒体类型)、Content-Length(指定响应体的长度)等。
    • 空行:一个空行用于分隔响应头部和响应体。
    • 响应体(可选):包含响应的数据,例如HTML文档、图片、JSON数据等。
Method
  1. GET:获取指定资源的信息。客户端向服务器请求获取资源的内容,并将其作为响应返回给客户端。
  2. POST:向服务器提交数据并请求处理。通常用于提交表单数据、上传文件等操作。服务器接收到POST请求后,会根据请求中的数据执行相应的处理。
  3. PUT:将请求的资源存储在服务器上。客户端向服务器发送资源的内容,并将其存储在指定位置。如果资源已存在,则进行替换;如果不存在,则进行创建。
  4. DELETE:删除指定的资源。客户端向服务器发送请求,要求删除指定的资源。
  5. HEAD:与GET方法类似,但只返回资源的头部信息,而不返回实际的内容。这对于获取资源的元数据或检查资源是否存在或已修改很有用。
  6. OPTIONS:获取服务器支持的请求方法列表。客户端可以使用OPTIONS方法查询服务器支持的HTTP方法,以便在进行后续请求时做出适当的选择。
  7. PATCH:对资源进行部分修改。客户端向服务器发送请求,指定要对资源进行的局部修改。
状态码
  1. 1xx(信息性状态码):表示请求已被接收,继续处理。

    • 100 Continue:服务器已收到请求的初始部分,客户端应继续发送剩余部分。
    • 101 Switching Protocols:服务器已理解并接受客户端的请求,将切换到新的协议。
  2. 2xx(成功状态码):表示请求已成功被服务器接收、理解和处理。

    • 200 OK:请求成功,服务器成功处理了请求。
    • 201 Created:请求成功,并在服务器上创建了新的资源。
    • 204 No Content:请求成功,但响应报文中不包含实体的主体部分。
  3. 3xx(重定向状态码):表示需要进一步操作以完成请求。

    • 301 Moved Permanently:请求的资源已被永久移动到新的URL。
    • 302 Found:请求的资源临时移动到不同的URL。
    • 304 Not Modified:客户端发出的请求资源在上次请求之后未被修改,可以直接使用缓存的版本。
  4. 4xx(客户端错误状态码):表示客户端发出的请求有错误。

    • 400 Bad Request:服务器无法理解客户端的请求,语法错误或请求无效。
    • 401 Unauthorized:请求要求身份验证,客户端需要提供有效的凭据。
    • 404 Not Found:请求的资源在服务器上未找到。
  5. 5xx(服务器错误状态码):表示服务器在处理请求时发生错误。

    • 500 Internal Server Error:服务器在执行请求时遇到了错误。
    • 503 Service Unavailable:服务器当前无法处理请求,通常由于过载或维护。
请求头

HTTP请求头(Request Headers)是客户端发送给服务器的元数据信息,用于描述请求的属性和要求。请求头位于HTTP请求报文的头部部分,由键值对组成,每个键值对占据一行,以冒号分隔键和值。

  1. Host:指定请求的目标服务器的主机名和端口号。
  2. User-Agent:标识发起请求的用户代理(通常是浏览器或其他客户端应用程序)的信息。
  3. Accept:指定客户端能够接受的响应内容的MIME类型。
  4. Accept-Language:指定客户端偏好的自然语言,用于响应内容的本地化。
  5. Content-Type:指定请求体的媒体类型,通常在POST请求中使用,用于描述请求中包含的数据类型。
  6. Content-Length:指定请求体的长度,以字节为单位。
  7. Authorization:用于进行身份验证的凭据信息,例如基本认证(Basic Authentication)的用户名和密码。
  8. Cookie:包含之前由服务器设置的Cookie信息,用于跟踪会话状态。
  9. Referer:指示请求的源URL,通常在从一个页面跳转到另一个页面时发送,用于参考页面的来源。
  10. If-Modified-Since:允许客户端向服务器传递某个时间,如果资源在该时间之后没有修改过,则返回304 Not Modified,节省带宽。
响应头

HTTP响应头(Response Headers)是服务器在响应客户端请求时发送的元数据信息,用于描述响应的属性和内容。响应头位于HTTP响应报文的头部部分,由键值对组成,每个键值对占据一行,以冒号分隔键和值。

  1. Content-Type:指定响应体的媒体类型,描述了返回的内容的类型和格式。
  2. Content-Length:指定响应体的长度,以字节为单位。
  3. Cache-Control:指定客户端和代理服务器对响应进行缓存的行为。
  4. Expires:指定响应的过期时间,告知客户端在该时间之后重新获取资源。
  5. Last-Modified:指定资源的最后修改时间,用于客户端缓存验证。
  6. Location:指定重定向的目标URL,用于告知客户端请求的资源已经被永久移动或临时移动。
  7. Set-Cookie:在响应中设置Cookie信息,用于在客户端上存储会话或跟踪状态。
  8. Server:指定服务器软件的名称和版本号。
  9. Access-Control-Allow-Origin:指定允许访问资源的域,用于支持跨域资源共享(CORS)。
  10. Content-Disposition:指定如何处理响应体,例如将其作为附件下载。
缓存
  1. Cache-Control:通过指定缓存策略来控制缓存行为。常见的指令有:

    • public:允许任何缓存存储响应,包括共享缓存和私有缓存。
    • private:只允许私有缓存存储响应,不允许共享缓存存储。
    • no-cache:要求缓存在使用资源之前先进行验证,以确定是否要重新获取。
    • max-age:指定缓存的有效时间,以秒为单位。
  2. Expires:指定响应的过期时间,告知客户端在该时间之后重新获取资源。

  3. ETag:提供资源的唯一标识符,用于验证资源是否发生变化。

  4. If-Modified-Since:客户端通过该字段将上次获取资源的时间发送给服务器,服务器可以根据该时间判断资源是否有更新。

  5. Last-Modified:指定资源的最后修改时间。

  HTTP是互联网世界中最重要的协议之一。它的简单性和灵活性使得我们能够以直观和便捷的方式在客户端和服务器之间传输数据。HTTP的请求-响应模型使得我们可以通过发送请求获取所需的资源,无论是网页、图像、视频还是其他类型的数据。虽然HTTP本身是不安全的,但通过使用HTTPS,我们可以使用SSL/TLS加密来确保通信的安全性和隐私保护,为用户提供更可靠的传输环境。 虽然HTTP本身是不安全的,但通过使用HTTPS,我们可以使用SSL/TLS加密来确保通信的安全性和隐私保护,为用户提供更可靠的传输环境。
  总的来说,HTTP作为互联网基础设施的一部分,为我们提供了无处不在的连接和数据传输能力,推动了现代Web应用的发展和创新。它的简单性、可扩展性和广泛应用性使得它成为了我们日常互联网使用的重要工具。