HTTP协议:发展、请求响应、状态码 等

news2024/9/24 3:19:18

文章目录

    • HTTP
      • 发展历程
      • HTTP请求
      • URL和URI
      • HTTP协议版本
      • HTTP请求方法
      • GET 和 POST 区别
      • HTTP状态码
      • HTTP 请求与响应报文
      • HTTP 请求流程


HTTP

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。

发展历程

在这里插入图片描述

各版本区别:
在这里插入图片描述

HTTP请求

在这里插入图片描述

在这里插入图片描述

URL和URI

URI(Uniform Resource Identifier,统一资源标识符):是一种用于标识互联网资源的通用格式,可以是具体的资源地址(URL)或名称(URN)。URI是一个较广泛的概念,它可以表示任何可识别的资源。

URL(Uniform Resource Locator,统一资源定位符):是URI的一个子集,用于指定资源的具体位置(如网页、文件等)。URL不仅标识资源,还提供访问它的方法(通常是通过HTTP、HTTPS、FTP等协议)。

HTTP协议版本

  1. HTTP/0.9

    最早期的 HTTP 版本,只支持 GET 请求,且不支持 HTTP 头信息,也无法在请求中携带其他元数据。

  2. HTTP/1.0

    第一个正式标准化的 HTTP 版本,引入了更多的请求方法,并允许客户端与服务器之间传递更多信息(如请求头、响应头等)。HTTP/1.0 仍然被广泛使用,尤其是在代理服务器中。

  3. HTTP/1.1

    增强了连接管理,引入了持久连接(Persistent Connection),使得同一 TCP 连接可以被多个请求复用。它还支持管道方式(Pipelining),允许多个请求同时发送,减少了服务器响应的延迟。

  4. HTTP/2.0

    引入了完全的多路复用技术,允许客户端和服务器在同一连接中同时发送多个请求和响应。它还通过压缩 HTTP 头信息来减少数据传输量,并引入了服务端推送功能,允许服务器主动向客户端发送资源。

特点

  • HTTP/1.0:仅支持短连接,一个TCP连接中只能完成一次HTTP请求与响应。
  • HTTP/1.1:支持长连接和管道机制,多个请求与响应可以在一个TCP连接中完成。
  • HTTP/2.0:支持长连接、多路复用、网页头部压缩、服务器推送,使用二进制格式。
  • HTTP/3.0:基于UDP协议,传输效率更高。

HTTP请求方法

HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。每条 HTTP 请求报文都包含一个方法, 告诉服务器要执行什么动作,包括:获取一个页面,运行一个网关程序,删除一个文件等。最常用的获取资源的方法是 GET、POST、PUT。

常用的 HTTP 方法:

方法描述
GET从服务器请求资源(例如获取网页内容或文件)。
POST向服务器提交数据,通常用于表单提交或文件上传。
PUT向服务器发送数据,通常用于修改现有资源。
DELETE请求服务器删除某个资源。
HEAD类似于 GET,但不返回资源的主体部分,只获取响应头信息。
CONNECT建立一个隧道连接,通常用于 HTTPS 代理。
OPTIONS请求查看服务器支持的请求方法。
TRACE用于调试,返回服务器收到的请求内容,用来追踪请求路径。

说明

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2、PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会将数据携带在body当中,通常表示的是“create”的含义,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作

GET 和 POST 区别

  • GET 请求

    GET 请求用于从服务器获取数据。请求的参数会附加在 URL 中,因此数据在请求中是公开的。GET 请求可以被缓存,也会保存到浏览器历史中,且长度有限。

  • POST 请求

    POST 请求用于向服务器提交数据。与 GET 不同,POST 请求的数据包含在请求体中,而不是 URL,因此数据更加安全。POST 请求不会被缓存,也不会记录在浏览器历史中,且没有数据长度的限制。

HTTP状态码

HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的 3 位数字代码,当浏览器请求某一 URL 时, 服务器根据处理情况返回相应的处理状态。

通常正常的状态码为2xx,3xx(如200),如果出现异常会返回4xx,5xx(如404)。

  • 1xx (信息):表示请求已收到,需要进一步操作。
  • 2xx (成功):表示请求已成功处理。
  • 3xx (重定向):需要客户端采取进一步行动来完成请求。
  • 4xx (客户端错误):请求包含语法错误或无法完成。
  • 5xx (服务器错误):服务器在处理请求时发生了错误。

常见的 HTTP 状态码

状态码描述
200请求成功,服务器返回了请求的资源。
301请求的资源已永久移动到新的 URL,客户端应更新请求地址。
302请求的资源临时移动到新的 URL,客户端应使用新的 URL 进行后续请求。
401认证失败,客户端需要提供有效的认证信息。
403禁止访问,客户端没有权限访问请求的资源。
404资源未找到,服务器无法找到请求的页面或文件。
414请求URI头部过长。
500服务器内部错误,服务器在处理请求时发生了问题。
502网关错误,服务器作为网关或代理时从上游服务器接收到无效响应。
503服务不可用,服务器当前无法处理请求,通常是由于过载或维护。
504网关超时,服务器作为网关或代理时未能及时从上游服务器接收到响应。

HTTP 请求与响应报文

HTTP 请求报文和响应报文都有固定的结构,包含请求或响应的状态行、头部信息和主体内容。

1. 请求报文

在这里插入图片描述

  • 请求行:由请求方法、请求的 URL 和协议版本组成。

    例如:GET /index.html HTTP/1.1

  • 请求头:包含客户端附加的请求信息,以名/值对的形式表示。常见的请求头包括:

    • Host:指定请求目标的服务器域名或 IP 地址,可以附带端口号(如 Host: example.com:8080)。
    • User-Agent:客户端发送请求的软件或浏览器的信息,通常包含浏览器、操作系统等标识。
    • Accept:客户端支持的内容类型,告知服务器可以返回的 MIME 类型(如 text/htmlapplication/json)。
    • Connection:定义连接的管理方式,常用值为 Keep-Alive,表示保持连接不断开,支持多个请求复用。
    • Accept-Charset:告知服务端客户端支持的字符编码格式(如 UTF-8ISO-8859-1)。
    • Accept-Encoding:指定客户端支持的内容压缩方式(如 gzipdeflate)。
    • Accept-Language:通知服务端客户端的首选语言(如 en 表示英语,zh-CN 表示简体中文)。
  • 空行:请求头和请求体之间必须有一个空行,用来分隔头部信息和主体内容。

  • 请求体:携带客户端提交的数据,通常用于 POST、PUT 等请求。GET 方法已经在 URL 中指明了参数,所以提交时没有数据。POST 方法提交的参数在请求体中。

2. 响应报文

在这里插入图片描述

  • 状态行:由协议版本、状态码和状态描述组成。

    例如:HTTP/1.1 200 OK

  • 响应头:与请求头类似,服务器返回的附加信息,常见的响应头包括:

    • Server:显示服务器使用的软件及其版本信息。
    • Content-Type:指定响应内容的类型,如 HTML、JSON、图片等。
    • Content-Length:指定响应体的字节长度,表示内容的大小。
    • Content-Charset:指定响应体的字符编码格式,如 UTF-8、ISO-8859-1。
    • Content-Encoding:标明响应体采用的压缩方式,如 gzip、deflate。
    • Content-Language:指明响应体使用的语言,如 en(英语)、zh-CN(简体中文)。
  • 空行:响应头和响应体之间也有一个空行,表示头部信息结束。

  • 响应体:服务器返回给客户端的数据,通常是 HTML 页面或其他文件。

HTTP 请求流程

当用户在浏览器中输入 URL 并按下回车时,浏览器会向服务器发送一个 HTTP 请求,服务器处理请求后返回响应,浏览器解析响应体并显示页面。该过程包括以下步骤:

  1. 用户输入 URL,浏览器发送 HTTP 请求。
  2. 请求报文中包含请求行、请求头和可能的请求体。
  3. 服务器接收到请求,处理后返回响应报文。
  4. 响应报文包含状态行、响应头和响应体。
  5. 浏览器根据响应体中的内容显示网页。

注:图片来源于网络,侵删。

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

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

相关文章

SAP-ABAP消息号 AD857

激活表时报错 返回表,找到报错的字段 维护参考表和字段

免费!大厂太卷了,又一款AI对口型神器,让照片开口说话唱歌,吊打阿里EMO?(附保姆级教程)

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~(AI资料点文末卡片自取) 之前分享了一款…

【小白向】怎么去除视频水印?HitPaw帮你轻松解决

序言 HitPaw是一款优秀的去除视频水印的工具。 特点:不仅仅能够去除图片、视频里的固定水印,还能去除移动水印。 尤其是它的AI去水印功能,效果非常好。 极简使用教程 下载安装 HitPaw需要在电脑上安装软件才能使用。 支持Windows系统和…

【AIGC】ChatGPT RAG提取文档内容,高效制作PPT、论文

目录 一、理解 RAG 技术 二、利用 ChatGPT 的 RAG 技术提取文档内容 三、高效制作 PPT 四、高效撰写论文 五、最佳实践与建议 六、工具推荐 随着人工智能生成内容(AIGC)的快速发展,利用先进的技术工具如 ChatGPT 的 RAG(Ret…

kismet和war driving具体准备(仅供无线安全学习)

war driving准备 一台笔记本 一个最好是双频的网卡,单频搜集信号少 我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?tkKZ5g3RVeH6f 如果经济条件允许可以去买大功率天线(我买的车载的 大概40db这样子 范围广) http://e.tb.cn/h.grCM0CQ6L…

YOLOv5-水印检测

简介: YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较与分析,但是YOLOv5在COCO数据集上面的测试效果还是挺不错的。 YOLOv5是一种单阶段目标检测算法,该算…

教材改版难道是假的?!24下半年软考怎么还是用旧版?何时启用新教材?

之前一直有消息说软考有几个科目的教材要改版,导致不少打算报名2024年下半年软考的同学都在担心是否会影响考试…… 但一直到现在都没看到有新教材出版的消息,所以很多人怀疑之前教材改版的消息是不是假的,要不然怎么还在用旧版教材…… 那…

C++11新特性和扩展(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 C11新特性和扩展 收录于专栏 [C进阶学习] 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.C11简介 2. 列表初始…

Oracle 数据库安装和配置指南

目录 1. 什么是Oracle数据库? 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量(Linux) 4.…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台 Halo博客平台是一款基于Java的开源博客系统,以其简单易用、功能强大、美观大方等特点而受到广泛欢迎,采用了多种先进的技术框架,包括Freemarker模板引擎、Vue.j…

项目总结,路径匹配的业务逻辑

redisHelper.addzset(HitchConstants.STOKE_GEO_ZSET_PREFIX,hitchGeoBo.getTargetID()(乘客ID),stroke.getId()->(司机的ID),getscore(hitchGeoBo); 如果他不这样乘客这里存储司机的ID,我们会发现假如再来一个司机,他是无法获…

通过 LabVIEW 正则表达式读取数值(整数或小数)

在LabVIEW开发中,字符串处理是一个非常常见的需求,尤其是在处理包含复杂格式的数字时。本文通过一个具体的例子来说明如何利用 Match Regular Expression Function 和 Match Pattern Function 读取并解析字符串中的数字,并重点探讨这两个函数…

书生·浦语作业集合

目录: 1. Linux基础知识 2.python基础知识 3.Git基础知识 4.书生大模型全链路开源体系 1.1-Linux基础知识 配置环境后,运行 hello_word.py 在本地终端中进行端口映射 映射成功后,访问 127.0.0.1:7860 1.2-python基础知识 任务…

【Python】生成dataframe的测试样例,用于测试一个或者多个dataframe

我们在处理dataframe测试时,发现,总需要重新构造一个新的dataframe,每次想找个现成的就想抓狂。 所以,为了方便随用随拿,我在这里直接保存一个直接生成dataframe 的方法。 1. 生成一个随机dataframe的方法&#xff1…

2024/9/19 Notes

1. MODULE_IMPORT_NS 当LINUX_KERNEL_CODE > KERNEL_VERSION(5,4,0), linux引入了namespace来控制内核中symbol引用范围。 比如跟USB Storage相关的一些函数,我们可以直接使用EXPORT_SYMBOL,使所有模块可以可用,也可以EXPORT_SYMBOL_NS&…

Leetcode 除自身以外数组的乘积

class Solution {public int[] productExceptSelf(int[] nums) {int length nums.length;//一维数组 answer[]存储最终的结果//首先从左往右记录乘积,暂时存储到一维数组 answer[] 中int[] answer new int[length];//先从左往右, 由于由于第一个元素左边没有元素&…

如何在算家云搭建RVC-WebUI(语音转换)

一、Retrieval-based-Voice-Conversion-WebUI简介 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转…

工业物联网关为工业生产数字化转型赋能-天拓四方

一、引言 在工业4.0的大背景下,工业物联网关成为了制造业转型升级的关键技术之一。它通过连接设备和系统,实现数据的实时采集、处理和传输,从而提升生产效率、降低成本、优化资源配置,并最终推动整个制造业的数字化进程。本文将详…

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…

面向对象程序设计——mapの简析

1.map的定义 Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持⼩于⽐较,如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数,map底层存储数据的 内存是从空间配置器申请的。⼀般情况下&#xff0c…