一文了解HTTP协议

news2024/11/16 10:22:01

文章目录

  • 前言
  • 概念
    • 协议
    • 传输
    • 超文本
  • HTTP 协议的格式
    • HTTP 请求
    • HTTP 响应
  • 总结


前言

在这之前,可以看看我之前的文章,也是关于协议的。

  • TCP/IP 协议详解

  • UDP协议详解

我们在打开一个网页的时候通常都会注意到网址的前面有一个统一的标识http://(或https://),这代表的就是本次访问使用 HTTP 协议进行通信。

那么问题来了:为什么我们在通信的时候要用到这个协议呢?

简单来讲,所谓协议其实就是一个规范、一个标准,大家共同遵守。通信双方通过使用统一的规范,能够有效地将信息结构化,让相应的信息各归其位,正是“上帝的归上帝,凯撒的归凯撒”。这样一来就可以大大地降低信息传输的成本。

假设一下,如果我们在因特网上传输信息的时候不遵守某个协议,会出现什么情况呢?最直接的影响就是鸡同鸭讲。

概念

HTTP,全称“超文本传输协议(HyperText Transfer Protocol)”,是构建我们今天所熟知的万维网的基础,也是我们在访问互联网时最常见的一种协议类型。

image-20210827173938365

协议

在生活中,我们也能随处可见「协议」,例如:找房子时会签一个「租房协议」

生活中的协议,本质上与计算机中的协议是相同的,协议的特点:

  • 」字,代表的意思是必须有两个以上的参与者。租房协议里的参与者有两个:你和房东。
  • 」字,代表的意思是对参与者的一种行为约定和规范。租房协议里规定租期期限、每月租金金额、违约如何处理等。

针对 HTTP 协议,我们可以这么理解。

HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。

传输

所谓的「传输」,很好理解,就是把一堆东西从 A 点搬到 B 点,或者从 B 点 搬到 A 点。

别轻视了这个简单的动作,它至少包含两项重要的信息。

HTTP 协议是一个双向协议

我们在上网冲浪时,浏览器是请求方 A ,百度网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。

image-20210827175005300

数据虽然是在 A 和 B 之间传输,但允许中间有中转或接力

就好像第一排的同学想穿递纸条给最后一排的同学,那么传递的过程中就需要经过好多个同学(中间人),这样的传输方式就从「A < — > B」,变成了「A <-> N <-> M <-> B」。

而在 HTTP 里,需要中间人遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意额外的东西。

针对传输,我们可以进一步理解了 HTTP。

HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。

超文本

  • 文本:在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算做「文本」。

  • 超文本:它就是超越了普通文本的文本,它是文字、图片、视频等的混合体最关键有超链接,能从一个超文本跳转到另外一个超文本。

HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,在经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。

HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。

HTTP 协议的格式

我们将整个协议划分为两个大类:请求,响应。

HTTP 请求

一般地,HTTP 协议格式主要分成四个部分:起始行消息头空行消息体;如图所示。

image-20210827184000299

其中,起始行又包含三个信息:方法URIHTTP 协议版本

方法:指的是本次请求要执行的操作,有时也称“HTTP 谓词”或“HTTP 动词”。常见的方法是GETPOST这两个:GET表示客户端要从服务器获取资源;而POST则表示客户端要想服务器传输一些表单数据。

URI:一般来说会是一个绝对路径,末尾可以跟上一个问号“?”和查询字符串;当使用代理时,就会是一个完整的 URL。

HTTP 协议版本:就是字面意思,告知对方自己使用的 HTTP 协议是哪个版本,以免混乱。

起始行最常见的形式类似于下面这样:

GET /user/3940246036953293 HTTP/1.1

当使用代理时则会变成(该 URL 为虚构):

GET https://juejin.cn/user/3940246036953293 HTTP/1.1

消息头:包含一些对消息的描述信息,格式是<field>:<value>。具体地,各种消息头又被分为四大类:通用头、请求头、响应头(用于响应消息)和实体头。

空行:起到的作用是提示消息头结束、消息体开始,不需要再花费笔墨。

消息体:也就是一条 HTTP 消息要传输的主体。然而稍稍有些尴尬的是,对于有的方法而言并不需要传输其他信息,只需要有起始行和消息头就足够了(比如GET方法),因此这个部分不仅不一定是最长的,甚至可能是空的。

HTTP 响应

与请求消息比较类似,HTTP 响应消息也分为四个部分:状态行消息头空行消息体,如图所示:

image-20210827184052605

其中后三个部分与 HTTP 请求消息基本一致,因此着重看状态行

状态行也由三个部分组成:HTTP 协议版本状态码状态文本。其中 HTTP 协议版本无需赘言。

状态码:其实我们很熟悉。最典型的一个就是每当我们访问的某个 URL 不存在时,就会得到一个404的状态码。因此状态码实际上是用来标识请求成功与否的数字。除了404,典型的状态码还有200(请求成功)、301(资源被永久移动)、302(资源被临时移动)等。

根据第一位数字,状态码大概可以分为 5 种:

状态文本:则是一条简短、纯粹的信息,描述的是状态码代表的实际状态,是为了便于人机交互。

因此一个典型的状态行可能长成这样:

HTTP/1.1 404 Not Found

当客户端使用GET方法向服务器请求了一个网页,此时如果请求成功,服务器的 HTTP 响应消息的消息体就会包含该网页的 HTML 文本。

总结

本文只是简单的介绍了一下 HTTP 协议,粗浅地了解了与之相关的一些知识。后面的文章我们会更加深入的了解HTTP的知识。

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

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

相关文章

智慧校园电子班牌系统源码

电子班牌系统的主要功能包括&#xff1a;班级管理、学生信息管理、教师管理、课程管理、作业管理、考试管理、公告管理、评价管理、学校消息发布等。在班级管理方面&#xff0c;该系统可以实现教师对班级的整体管理以及学生个人信息的管理&#xff0c;包括个人信息、考试成绩、…

Long型参数传到前端精度丢失,后两位变为00,导致传值错误,解决方案

问题&#xff1a; 后端id字段为Long型&#xff0c;起初采用自增主键&#xff0c;没有问题&#xff1b;由于业务需要改为雪花id&#xff0c;后端可正常运行&#xff0c;传递到前端精度丢失&#xff0c;后两位变为00。 解决方案&#xff1a; 后端将属性转为字符串传递&#xff0…

Spring学习笔记---上篇

文章目录 1、Spring1.1、简介1.2、优点1.3、Spring的组成1.4、拓展 2、IOC理论推导3、IOC的本质3.1、IOC概念3.2、IoC是Spring框架的核心内容 3、HelloSpring3.1、实现3.2、思考 4、IOC创建对象的方式5、Spring配置5.1、别名&#xff08;alias&#xff09;5.2、Bean的配置5.3、…

单图换脸roop源码与环境配置

前言 1.roop是新开源了一个单图就可以进行视频换脸的项目&#xff0c;只需要一张所需面部的图像。不需要数据集&#xff0c;不需要训练。 2.大概的测试了一下&#xff0c;正脸换脸效果还不错&#xff0c;融合也比较自然。但如果人脸比较大&#xff0c;最终换出的效果可能会有…

source-map定位生产问题

source-map 定位源码错误位置 需要安装source-map库webpack配置需要配上devtool: “hidden-source-map”&#xff0c;devtool详细配置看这里devtool配置配置完webpack打包后&#xff0c;可以看到打包出来的.js.map文件 将生产包产生错误的栈赋值给stack即可&#xff0c;即设置…

前端——原生HTML猫猫max桌宠(附源码)

一、前言 看见了max大佬和狗头人大佬做的一个桌宠&#xff0c;于是就像用web简单实现一下 二、代码包 https://wwwf.lanzout.com/iWfER0ze0cqd密码:fg88 三、简单效果 简单用了随机动作&#xff08;可以进行权重设置&#xff09; 四、踩坑情况 如果不是主循环loop里&#xff0…

记录--巧用 overflow-scroll 实现丝滑轮播图

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言: 近期我在项目中就接到了一个完成轮播图组件的需求。最开始我也像大家一样&#xff0c;直接选择使用了知名的开源项目 "Swiper"&#xff0c;但是后来发现它在移动端项目中某些测试环境…

Go的性能优化建议

前言&#xff1a; \textcolor{Green}{前言&#xff1a;} 前言&#xff1a; &#x1f49e;这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 &#x1f49e;从这个专栏里面可以迅速获得Go的知识 Go的性能优化建议 3 性能优化建议3.1 性能优化建议 - Benchmark3.2 性能优化…

一文解答危废行业信息化平台的必要性——哲讯智能科技

危险废物物联网监管系统可以通过物联网技术实现对危险废物的精准管理&#xff0c;不仅有利于提高危险废物管理水平&#xff0c;而且能够有效防范和减少重特大事故的发生&#xff0c;保障人民群众生命财产安全。利用物联网技术&#xff0c;通过传感器、无线网络、移动终端等设备…

linux CentOS 7下载步骤

1、官网地址&#xff1a;https://www.centos.org/download/ 2、 3、下载阿里云 4、下载 或minimal - 2009

08-购物车效果

先做数据&#xff0c;再做功能&#xff0c;最后界面 var goods [{pic: ./assets/g1.png,title: 椰云拿铁,desc: 1人份【年度重磅&#xff0c;一口吞云】√原创椰云topping&#xff0c;绵密轻盈到飞起&#xff01;原创瑞幸椰云™工艺&#xff0c;使用椰浆代替常规奶盖打造丰盈…

【SAS】【01】【scsi协议族】SCSI standards family

下图显示了SAM协议与SCSI协议族中其他协议标准和相关项目的关系。 SCSI Architecture Model: 定义SCSI系统模型、SCSI标准集的功能划分以及适用于所有SCSI实现和要求。Device-Type Specific Command Sets: 定义特定设备类型的实现标准&#xff0c;包括每种设备类型的设备模型。…

leetcode1884. 鸡蛋掉落-两枚鸡蛋.动态规划-java

鸡蛋掉落-两枚鸡蛋 leetcode1884. 鸡蛋掉落-两枚鸡蛋题目描述解题思路代码演示 动态规划代码演示 动态规划专题 leetcode1884. 鸡蛋掉落-两枚鸡蛋 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/egg-drop-with-2-eggs-a…

基于Python和Spacy的命名实体识别

命名实体识别&#xff08;Named Entity Recognition&#xff0c;简称NER&#xff09;是一种自然语言处理&#xff08;NLP&#xff09;方法&#xff0c;用于检测和分类文本中的命名实体&#xff0c;包括人物、组织、地点、日期、数量和其他可识别的现实世界实体。 Spacy是一个基…

STM32之HAL库微妙延迟(借助Systick)

代码 void bsp_us_delay(uint32_t us) {uint32_t start, now, delta, reload, us_tick;start SysTick->VAL;reload SysTick->LOAD;us_tick SystemCoreClock / 1000000UL;do {now SysTick->VAL;delta start > now ? start - now : reload start - now;} whi…

Element el-dropdown 事件

我这里是结合el-table一起使用 设置trigger"click" 就可以加点击事件 这里我需要点击下拉选择值后&#xff0c;既要得到下拉里面的值 也要得到这一行数据的值 重要的代码 <el-dropdowntrigger"click"command"handleCommand($event,scope.row,sc…

7 拓展中断_事件控制器(EXTI)

目录 EXTI-扩展中断和事件控制器 事件的概念 EXTI-扩展中断和事件控制器 EXTI外设框图 F1/F4/F7&#xff08;看懂与或门&#xff09; H7 STM32CubeMX中的EXTI配置 EXTI-扩展中断和事件控制器 事件的概念 STM32上许许多多的外设&#xff0c;是通过内部信号来协同工作的。…

VMware麒麟Kylin系统安装Linux

麒麟系统常用链接 https://www.jianshu.com/p/f58e2435b650 ios下载链接 https://eco.kylinos.cn/partners/mirror.html 其实基本上只有两个区别&#xff0c;一个是桌面操作系统和服务器操作系统的区别&#xff0c;一个是x86_64和arm内核的区别&#xff0c;我下的是这个海光版…

Splashtop 荣获2023年教育科技突破奖

2023年6月8日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公远程解决方案领域处于领先地位&#xff0c;该公司自豪地宣布其在教育科技突破奖评选活动中荣获“年度远程学习解决方案供应商奖”。这项在教育行业久负盛名的奖项特别关注创新性解决方案和创意公司&#xff0c;这些…

BlendOS 3 正在开发:承诺支持九个 Linux 发行版,无存储库更新

导读blendOS 发行版承诺混合 Arch Linux、Fedora Linux 和 Ubuntu&#xff0c;今年 4 月发布的 blendOS 2 使用 WayDroid&#xff0c;承诺运行 Android 应用程序。 开发商 Rudra Saraswat 表示&#xff0c;不可变发行版 blendOS 3 系统正在开发中&#xff0c;并承诺为不可变发行…