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.mzph.cn/pingmian/41806.shtml

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

相关文章

视频参考帧和重构帧复用

1、 视频编码中的参考帧和重构帧 从下图的编码框架可以看出,每编码一帧需要先使用当前帧CU(n)减去当前帧的参考帧CU(n)得到残差。同时,需要将当前帧的重构帧CU*(n)输出,然后再读取重构帧进行预测…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法:最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法:最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能,从网上下载该功能的上位机界面,学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。 1. 上位机界面的效果展示 使用PyQt5实现以下界面,界面效果如下,界面图片是从网…

基于SpringBoot的招聘信息管理系统的详细设计和实现(源码+lw+部署文档+讲解等,欢迎咨询我!!)

文章目录 目录 文章目录 详细视频展示: 系统具体实现效果(看看我的实力) 技术栈(详细的描述提供给同学思路参考) 2.1 Java语言介绍 2.2 B/S架构 2.3 MySQL 数据库介绍 2.4 MySQL环境配置 2.5 SpringBoot框…

C++之static关键字

文章目录 前提正文多重定义extern关键字使用staticstatic 全局变量(在.cpp文件中定义)static变量存放在哪里static变量可不可以放在.h文件中 static 函数static局部变量static 成员变量static 成员函数 总结参考链接 前提 好吧,八股,我又回来了。这次想…

[图解]企业应用架构模式2024新译本讲解23-标识映射2

1 00:00:00,950 --> 00:00:02,890 好,我们往下走 2 00:00:04,140 --> 00:00:04,650 一样的 3 00:00:04,660 --> 00:00:07,170 这前面也见过了,定义一个对象数组 4 00:00:07,870 --> 00:00:12,820 数组的长度就是字段的数量,4个…

一.1.(3)半导体二极管基本电路的分析方法及常见应用电路

1.二极管基本电路的分析方法 先标正负极,再看是否理想二极管 将二极管视为断路,求两端电压 两端电压均大于导通电压,压差大的先导通(由于电源不是完全的阶跃,而是有一个电压爬升的过程) 2.常见应用电路 1.求…

日期选取限制日期范围antdesign vue

限制选取的日期范围 效果图 <a-date-pickerv-model"dateTime"format"YYYY-MM-DD":disabled-date"disabledDate"valueFormat"YYYY-MM-DD"placeholder"请选择日期"allowClear />methods:{//回放日期选取范围限制&…

网安小贴士(4)哈希函数

一、前言 哈希函数是密码学中的基础工具&#xff0c;哈希函数在密码学中扮演着至关重要的角色&#xff0c;广泛应用于确保数据的安全性和完整性。随着技术的发展&#xff0c;新的哈希算法和应用场景也在不断出现。 二、定义 哈希函数是一种数学函数&#xff0c;它接受一个输…

Intellj idea无法启动

个人电脑上安装的是2024.01版本的intellj idea作为开发工具&#xff0c;引入了javaagent作为工具包 但是在一次invaliad cache操作后&#xff0c;intellj idea就无法启动了&#xff0c;双击无响应。 重装了idea后也无效&#xff08;这个是有原因的&#xff0c;下面会讲&#…

springboot服务启动读取不到application.yml中的nacos.config信息

我的版本&#xff1a; 可以添加bootstrap.yml文件&#xff0c;在里面添加nacos.config的配置信息 也可以添加VM参数 -Dspring.cloud.nacos.discovery.server-addr -Dspring.cloud.nacos.config.server-addr -Dspring.cloud.nacos.config.namespace -Dspring.cloud.nacos.discov…

代码随想录——划分字母区间(Leetcode763)

题目链接 贪心 class Solution {public List<Integer> partitionLabels(String s) {int[] count new int[27];Arrays.fill(count,0);// 统计元素最后一次出现的位置for(int i 0; i < s.length(); i){count[s.charAt(i) - a] i;}List<Integer> res new Ar…

【基于R语言群体遗传学】-4-统计建模与算法(statistical tests and algorithm)

之前的三篇博客&#xff0c;我们对于哈代温伯格遗传比例有了一个全面的认识&#xff0c;没有看的朋友可以先看一下前面的博客&#xff1a; 群体遗传学_tRNA做科研的博客-CSDN博客 1.一些新名词 &#xff08;1&#xff09;Algorithm: A series of operations executed in a s…

【MySQL】锁(黑马课程)

【MySQL】锁 0. 锁的考察点1. 概述1. 锁的分类1.1 属性分类1.2 粒度分类 2. 全局锁2.1 全局锁操作2.2.1 备份问题 3. 表级锁3.1 附录 0. 锁的考察点 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源(CPU、RAM、I/O)的争…

MatLab三维图形绘制基础

三维图形绘制 三维曲线 plot3 螺旋图绘制 % %三维图像:螺旋图绘制 clear; clc; t [0:0.1:10*pi];% 向量 x sin(t) t.*cos(t);%t是向量&#xff0c;用点乘 y cos(t) - t.*sin(t); z t; plot3(x,y,z); grid on;plot3 绘制同型矩阵 %% % plot3绘制同型矩阵 t [0:0.1:10*…

Python统计实战:时间序列分析之二阶曲线预测和三阶曲线预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能&#xff0c;从而更快地掌握解决问题所需的能力。 &#xff08;以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。&#xff09; 练习题 下表是某只股票…

每周算法:无向图的双连通分量

题目链接 冗余路径, Redundant Paths G 题目描述 为了从 F F F 个草场中的一个走到另一个&#xff0c;奶牛们有时不得不路过一些她们讨厌的可怕的树。 奶牛们已经厌倦了被迫走某一条路&#xff0c;所以她们想建一些新路&#xff0c;使每一对草场之间都会至少有两条相互分离…

vue3 + 百度地图 实现多坐标生成轨迹的两种种方式

本次依然是关于百度地图中常见的一个问题&#xff0c;此次共使用了两种方式并做了一些分析及处理&#xff0c;希望有所帮助。如有问题可以评论或私信。 一、便捷方式 优点&#xff1a;便捷&#xff0c;所用的api方法是根据坐标进行计算后绘制路线&#xff0c;所以路线相对准确…

CentOS修复OpenSSH漏洞升级到openssh 9.7 RPM更新包

在做政府和学校单位网站时&#xff0c;经常需要服务器扫描检测&#xff0c;经常被OpenSSH Server远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;安全风险通告&#xff0c;出了报告需要升级OpenSSH。 使用yum update openssh是无法更新到最新的&#xff0c;因为系统里的…

VS code修改底部的行号的状态栏颜色

VSCode截图 相信很多小伙伴被底部的蓝色状态栏困扰很久了 处理的方式有两种&#xff1a; 1、隐藏状态栏 2、修改其背景颜色 第一种方法大伙都会&#xff0c;今天就使用第二种方法。 1、点击齿轮进入setting 2、我现在用的新版本&#xff0c;设置不是以前那种json格式展示&…