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应用时,正确处理和返回恰当的状态码是确保应用程序正常运行的关键。

总结:

请求格式:

响应格式:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/370147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言之常用内存函数以及模拟实现

目录 前言 一、memcpy的使用和模拟实现 二、memmove的使用和模拟实现 三、memset的使用和模拟实现 四、memcmp的使用和模拟实现 总结 前言 本文主要讲述C语言中常用的内存函数:memcpy、memmove、memset、memcmp。内容不多,除了了解如何使用&#x…

remix测试文件测试智能合约

remix内其实也是可以通过编写测试文件来测试智能合约的,需要使用插件自动生成框架以及测试结果。本文介绍一个简单的HelloWorld合约来讲解 安装插件多重检测: (solidity unit testing) 编译部署HelloWorld合约 // SPDX-License-…

Unity中TimeLine的一些用法

Unity中TimeLine的一些用法 概念其他 概念 无Track模式(PlayableAsset、PlayableBehaviour) 1. 两者关系 运行在PlayableTrack中作用 PlayableBehaviour 实际执行的脚本字段并不会显示在timeline面板上 PlayableAsset PlayableBehaviour的包装器&#x…

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二:子类化并自绘窗口背景 四、初步分析桌面管理层…

Akamai+Noname强强联合 | API安全再加强

最近,Akamai正式完成了对Noname Security的收购。本文我们将向大家介绍,经过本次收购后,Akamai在保护API安全性方面的后续计划和未来愿景。 Noname Security是市场上领先的API安全供应商之一,此次收购将让Akamai能更好地满足日益增…

PDF压缩工具选哪个?6款免费PDF压缩工具分享

PDF文件已经成为一种常见的文档格式。然而,PDF文件的体积有时可能非常庞大,尤其是在包含大量图像或复杂格式的情况下。选择一个高效的PDF压缩工具就显得尤为重要。小编今天给大家整理了2024年6款市面上反响不错的PDF压缩文件工具。轻松帮助你找到最适合自…

Nginx实战:nginx性能压测(ab)

在nginx的生产实践中,不管是服务上线,还是性能优化,都会遇到需要对nginx的性能压测,本文介绍一个简单的压测工具:ab命令 ab(Apache Bench)是一个常用的HTTP压力测试工具,可以用来测试Nginx的性能和压力。ab命令可以指定并发请求数、请求数、请求类型等参数,并输出测试…

JavaScript-websocket的基本使用

JavaScript-websocket的基本使用 文章说明JavaScript端后台--服务端连接演示 文章说明 本文主要介绍JavaScript中websocket的基本使用,后台采用Java编写WebSocket服务端 JavaScript端 websocket工具类 class Socket {constructor(url, onopen, onmessage, onerror, …

前端实现坐标系转换

一、地理坐标系和投影坐标系 地理坐标系和投影坐标系是地理信息系统(GIS)中常见的两种坐标系统,它们用于描述和定位地球表面上的点和区域,但在实现方式和应用场景上有所不同。 1. 地理坐标系(Geographic Coordinate …

【CUDA】 扫描 Scan

Scan Scan操作是许多应用程序中常见的操作。扫描操作采用一个二元运算符⊕和一个输入数组并计算输出数组如下: [x0,(x0⊕x1),…,( x0⊕x1⊕…..⊕xn-1)] 分层扫描和多种Scan算法介绍 Kogge-Stones Algorithm Kogge-Stones Algorithm最初是为设计快速加法电路而发…

JavaEE——计算机工作原理

冯诺依曼体系(VonNeumannArchitecture) 现代计算机,大多遵守冯诺依曼体系结构 CPU中央处理器:进行算术运算与逻辑判断 存储器:分为外存和内存,用于存储数据(使用二进制存储) 输入…

第一天(点亮led灯+led灯闪烁)——Arduino uno R3 学习之旅

​ 常识: 一般智能手机的额定工作电流大约为200mA Arduino Uno板上I/0(输入/输出)引脚最大输出电流为40 mA Uno板控制器总的输出电流为200 mA 点亮LED灯 发光二极管介绍 发光二极管(Light Emitting Diode,简称LED)是一种能够将电能转化为光能的固态的半导体器件…

实现模型贴图的移动缩放旋转

技术:threejscanvasfabric 效果图: 原理:threejs中没有局部贴图的效果,只能通过map 的方式贴到模型上,所以说换一种方式来实现,通过canvasfabric来实现图片的移动缩放旋转,然后将整个画布以map…

【STM32】在标准库中使用DMA

1.MDA简介 DMA全称Direct Memory Access,直接存储区访问。 DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和…

【踩坑】探究PyTorch中创建稀疏矩阵的内存占用过大的问题

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 问题复现 原因分析 解决方案 碎碎念 问题复现 创建一个COO格式的稀疏矩阵,根据计算公式,他应该只占用约5120MB的内存&…

go zero入门

一、goctl安装 goctl 是 go-zero 的内置脚手架,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。 # Go 1.16 及以后版本 go install github.com/zeromicro/go-zero/tools/goctllatest检查是否安装成功 $ goctl -v goctl version 1.6.6 darwin/amd64vscod…

通过SDK使用百度智能云的图像生成模型SDXL

登录进入百度智能云控制台,在模型广场按照图像生成类别进行筛选,可以找到Stable-Diffusion-XL模型。点击Stable-Diffusion-XL模型的API文档后在弹出的新页面下拉可以找到SDK调用的说明。 import qianfandef sdxl(file: str, prompt: str, steps: int 2…

C语言_练习题

求最小公倍数 思路:假设两个数,5和7,那么最小至少也要7吧,所以先假定最小公倍数是两个数之间较大的,然后看7能不能同时整除5和7,不能就加1继续除 int GetLCM(int _num1, int _num2) {int max _num1>_n…

堆叠的作用

一、为什么要堆叠 传统的园区网络采用设备和链路冗余来保证高可靠性,但其链路利用率低、网络维护成本高,堆叠技术将多台交换机虚拟成一台交换机,达到简化网络部署和降低网络维护工作量的目的。 二、堆叠优势 1、提高可靠性 堆叠系统多台成…

25款404网页源码(下)

25款404网页源码(下) 13部分源码 14部分源码 15部分源码 16部分源码 17部分源码 18部分源码 19部分源码 20部分源码 21部分源码 22部分源码 23部分源码 24部分源码 25部分源码 领取完整源码下期更新 13 部分源码 .rail {position: absolute;width: 100%…