HTTP协议格式

目录

正文:

1.概述

2.主要特点

3.请求协议格式

4.响应协议格式

5.响应状态码

总结:


正文:

1.概述

HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在浏览器中输入一个 "网址" (URL) 时,浏览器就会给相应的服务器发送一个 HTTP请求,该服务器也返回一个 HTTP 响应。这个响应结果被浏览器解析之后,就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器会对应返回多个响应,这些响应里就包含了页面 HTML,CSS,JavaScript,图片,字体等信息)。

2.主要特点

  1. 无连接性:HTTP 是一种无连接的协议,即每个请求-响应对之间是相互独立的,服务器不会保留任何关于前一次请求的信息。这意味着每个请求都需要建立一个新的连接,处理完毕后就会关闭连接,这样有助于节省服务器资源。

  2. 无状态性:HTTP 是一种无状态的协议,服务器不会维护客户端的状态信息。即使多次请求来自同一个客户端,服务器也视为多个独立的请求。为了实现状态保持,通常使用 Cookie ,Session或者jwt令牌 技术来维护客户端的状态信息。

  3. 支持多种请求方法:HTTP 协议定义了多种请求方法,如 GET、POST、PUT、DELETE 等,每种请求方法有不同的语义和用途。GET 用于从服务器获取资源,POST 用于向服务器提交数据,PUT 用于更新资源等。

  4. 基于文本:HTTP 协议的请求和响应报文是基于文本的,使用可读性强的ASCII字符编码。这种简单的文本格式使得开发人员和系统能够轻松理解和调试,同时也降低了实现成本。

3.请求协议格式

HTTP请求协议格式是客户端向服务器发送请求时遵循的规则。一个标准的HTTP请求由以下几个部分组成:

  1. 请求行(Request Line):

    • 方法:指定要执行的操作,如GET、POST、PUT、DELETE等。
    • 资源路径:请求的资源的URI(统一资源标识符),通常是URL。
    • HTTP版本:使用的HTTP协议版本,如HTTP/1.1或HTTP/2。

    格式示例:GET /index.html HTTP/1.1

  2. 请求头(Request Headers):

    • 包含一系列键值对,提供关于请求的附加信息,如:
      • Host:请求的服务器的域名。
      • User-Agent:发起请求的客户端软件信息。
      • Accept:客户端能够处理的媒体类型。
      • Content-Type:请求体的媒体类型。
      • Content-Length:请求体的长度。
      • 其他自定义头或特定用途的头。
  3. 空行(Empty Line):

    请求头部结束后,需要一个空行来分隔头部信息和消息主体(如果有)。
  4. 请求体(Request Body,可选):

    消息主体包含客户端向服务器发送的数据内容,例如 POST 请求中包含的表单数据或请求体内容。对于 GET 请求通常为空。

我们可以打开网页的开发者工具或者使用抓包工具看到一个http完整的请求:

下面是一个https的但是基本和http差不多:

 需要注意的是,HTTP 请求协议格式中的请求行和请求头部是必须的,而消息主体在某些情况下是可选的。请求头的顺序并不影响其含义,但是出于可读性,它们通常会按照一定的逻辑顺序排列。请求体的大小必须在请求头中通过Content-Length头指定,除非使用分块传输编码(chunked transfer encoding)。 请求体的内容类型应该通过Content-Type头指定,以便服务器知道如何处理接收到的数据。

4.响应协议格式

HTTP响应协议格式是服务器在接收到客户端的请求后,向客户端发送的响应。一个标准的HTTP响应同样由几个关键部分组成:

  1. 状态行(Status Line):

    • HTTP版本:响应使用的HTTP协议版本,如HTTP/1.1或HTTP/2。
    • 状态码:一个三位数字,表示请求的结果,如200表示成功,404表示未找到等。
    • 状态信息:状态码的简短描述。

    格式示例:HTTP/1.1 200 OK

  2. 响应头(Response Headers):

    • 包含一系列键值对,提供关于响应的附加信息,如:
      • Content-Type:响应体的媒体类型。
      • Content-Length:响应体的长度。
      • Server:服务器软件的名称和版本。
      • Set-Cookie:用于设置客户端的cookie。
      • Cache-Control:控制响应的缓存行为。
      • Connection:管理连接的选项,如是否关闭连接。
  3. 空行(Empty Line):

    响应头和响应体之间的分隔符,通常是一个空行,即连续的两个换行符(CRLF)。
  4. 响应体(Response Body,可选):

    服务器返回的数据,可能是HTML文档、图片、视频、JSON数据等,取决于请求的资源类型和Content-Type头的指定。

一个完整的HTTP响应示例:

同样抓的包是https的但差别不大:

如果服务器返回了一个html页面, 那么html页面内容就是在body中。 

5.响应状态码

在响应信息中的状态码有很多:

1.1xx:信息响应:

这类状态码表示请求已经被服务器接收,但还需要进一步处理。通常,这类响应是临时性的,用于与客户端进行双向通信。常见的状态码包括:

  • 100 Continue:服务器要求客户端继续发送请求,或忽略这个响应继续完成请求。
  • 101 Switching Protocols:服务器将遵照请求切换到另外一种协议。
  • 103 Early Hints:(HTML5新增)服务器推送资源的早期提示,用于预加载资源。

2.2xx:成功响应:

这类状态码表示请求已经被成功处理。最常见的状态码是:

  • 200 OK:请求成功,响应中包含了所请求的信息。
  • 201 Created:请求成功并且一个新的资源被创建,如POST请求。
  • 202 Accepted:请求已经被接受,但尚未被处理。
  • 204 No Content:服务器已经成功处理了请求,但没有返回任何内容。

3.3xx:重定向响应

这类状态码表示请求的资源已经被永久或暂时地移至别处。常见的状态码有:

  • 300 Multiple Choices:请求的资源有多个位置,服务器无法确定哪一个是最合适的,一般情况下很少使用。
  • 301 Moved Permanently:请求的资源已经被永久移动到新的URI,浏览器会自动跳转到新的URL。
  • 302 Found:(早期版本为“Moved Temporarily”,现在通常表示“Found”)请求的资源被临时移动到新的URI,浏览器会自动跳转到新的URL。
  • 304 Not Modified:如果使用缓存,则表示请求的资源自从缓存以来没有被修改过,因此可以继续使用缓存的版本。

4.4xx:客户端错误响应

这类状态码表示客户端的请求包含错误,或者请求无法被服务器理解。常见的状态码包括:

  • 400 Bad Request:服务器无法理解请求的格式。
  • 401 Unauthorized:请求要求用户的身份认证。
  • 403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
  • 404 Not Found:请求的资源在服务器上没有找到。
  • 405 Method Not Allowed:请求的方法不被允许。

5.5xx:服务器错误响应

这类状态码表示服务器在处理请求的过程中遇到了错误。常见的状态码有:

  • 500 Internal Server Error:服务器遇到未知错误。
  • 501 Not Implemented:服务器不支持请求的功能。
  • 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到了一个无效的响应。
  • 503 Service Unavailable:服务器目前无法使用(可能是服务器过载或进行维护)。
  • 504 Gateway Timeout:作为代理或网关的服务器没有及时从上游服务器收到请求。

这些状态码帮助客户端和开发者理解请求的结果,对于调试和维护Web应用非常重要。在开发Web应用时,正确处理和返回恰当的状态码是确保应用程序正常运行的关键。

总结:

请求格式:

响应格式:

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值