一文秒懂HTTP协议到底是什么?原理?

news2024/11/25 22:35:54

 

目录

         1.什么是http协议?

2.http协议的版本?

3.http文本框架

4.http请求报文

5.http报文格式

6.http响应报文

7.HTTP的状态码

8.HTTP首部介绍

9.什么是URL和URI?

10.CGI是什么?


1.什么是http协议?

http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议, 主要用于 Web 服务。通过计算机处理文本信息,格式为 HTML(Hyper Text Mark Language) 超文本标记语言来实现。

2.http协议的版本?

http 0.9:仅于用户传输 html 文档

http 1.0 :

1.引入了 MIME(Multipurpose Internet Mail Extesions)机制:多用途互联网邮件扩展,引 入这个技术之后,http 可以发送多媒体(比如视频、音频等)信息。此机制让 http 不在单单只支持 html 格式,还可以支持其他格式来进行发送了。

2.引入了 keep-alive 机制,支持持久连接的功能(但这个 keep-alive 原理是在首部添加了 某个字段而形成的,并非原生就支持此功能)

3.引入支持缓存功能 http 1.1 支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能(presistent)。

http 2.0 :

提供了 HTTP 语义优化的传输,spdy : google 引入了的一个技术,能够加速 http 数据交互, 尤其是使用 ssl 加速机制,但是 spdy 现在用的还不多。

目前常用的版本就是 http 1.0 版本和 http 1.1 版本。

3.http文本框架

<html>
    <head>
        <title></title>
    </head>
    <body>
        <h1>hello</h1>
    </body>
</html>

4.http请求报文

1.request Message(请求报文) 客户端 -→ 服务器端

由客户端向服务器端发出请求,不同的网站用于请求不同的资源(html 文档)

2.response Message(响应报文) 服务器端 -→ 客户端

是服务器予以响应客户端的请求

5.http报文格式

请求行+请求头+空白行+请求实体

 

1.请求行

请求行主要有三部分组成:请求方式+URL字段+HTTP协议版本

 

组成:

<method>:这次请求的方式

<request-URL>:请求资源的路径

<version>:请求的协议版本

http请求方式: ​

HTTP请求方法描述
GET用于客户端请求指定资源信息,并返回指定资源的实体
HEAD跟GET相似,但是不需要返回客户端请求的资源,只返回响应首部,(告诉客户端我有或者没有)
POST基于HTML表单向服务器提交数据,通常是需要存储数据的时候,像mysql存储
PUT与GET相反,是向服务器发送资源,服务器存储此数据,像百度网盘,阿里云盘
DELETE请求服务器删除URL指定的资源
MOVE请求服务器将指定的页面移至到另一个网络位置
OPTIONS探测服务器端对请求的URL所支持使用的请求方法
TRACE第一次请求中间所经历的代理服务器,防火墙或网关等

2.请求头

请求头由关键字+关键字的值组成,直接使用 : 隔开,格式:Name:value,请求头的作用是通过客户端将请求的相关内容告知服务器,首部不止有一个。

 

3.空白行

请求头之后会有一个空白行,通过方式回车和换行字符,用于通知服务器端以下的内容不会再出现请求首部的信息

4.请求实体

真正请求的内容

 

6.http响应报文

格式:起始行 + 响应首部 + 空白行 + 响应实体

 

1.起始行

也被称为状态行,用于服务器响应客户端请求的状态信息,由版本号<version>+状态码<status>+原因短语<reason-phrase>组成

<Version>:响应客户端请求的是什么版本,服务器就响应什么版本
<status>:状态码,200,404等
<reason-phrase>:响应的状态码的信息是深, 原因短句
<headers>:一大堆的响应首部
<entity-body>:响应体
2.响应首部

类似于请求报文,起始行后面一般有若干个头部字段。每一个头部字段都包含一个名字和一个值。格式:name:value

Content-Type: test/html; charset=utf-8
Content-Length: 78
3.空白行

最后一个响应首部信息之后就是一个空行,通知客户端无首部信息了

4.响应体

响应实体中装载了要返回给客户端的数据,这些数据可以是文本,也可以是二进制

7.HTTP的状态码

状态码说明
1XX信息性状态码,用于指定客户端相应的某些操作
2XX成功状态码,我请求一个资源,这个资源在,这就表示请求成功
3XX重定向的状态码,有时会返回一个新的地址
4XX客户端类错误,你请求的资源不存在,或者你请求的时候,我们这个资源拒绝你访问,你没有权限
5XX服务器类错误信息。向服务器发起请求,服务器发现需要运行一个脚本,从而调用解析库,如果在调用过程中出错就会出现这种情况,或者你的脚本有错误,也可能导致这种问题
常用状态码
状态码说明
200服务器成功返回网页,这是成功的HTTP请求返回的标准状态码
201created上传文件成功后显示
301Move permanently,永久重定向,会返回一个新地址,并告诉我们你所请求的地址将永久挪到哪个新地址去了
302fonud,临时重定向,临时放到某个地方,会在响应报文中使用”location:新位置“
304not modified 资源没有做任何修改
403forbidden 请求拒绝
404not found 请求资源不存在
405method not allowed 你使用的方法不被允许,不支持
500internal server error:服务器内部错误
502Bod gateway,代理服务器从上游服务器收到一条伪响应,上一层服务器返回了一个无法理解的报文,所以代理服务器就会表示错误
503serive unavailable,服务暂时不可用

8.HTTP首部介绍

首部的分类:通用首部,请求首部,响应首部,实体首部(专门用来表示实体中资源内部的类型,长度,编码格式等),扩展首部(非标准首部,可有程序员自行创建)

1.通用首部

• Connection:定义 C/S 之间关于请求、响应的有关选项 在 http1.0 的时候,如果他想使用持久连接,那么他所设置的选项即为 Connection:keep-alive 、

• Cache-Control:缓存控制,实现更精细的缓存控制方式。在 http 1.1 上比较 常见

2.请求首部

• Client-IP :客户端 IP 地址

• Host :请求的主机,这在实现基于主机名的虚拟主机时很有用

• Referer :指明了请求当前资源原始资源的 URL,使用 referer 是可以防盗链

• User-Agent:用户代理,一般而言是浏览器

• Accept 首部:指客户端可以接受哪些编码的类型

▪ Accept:服务端能够发送的媒体的类型

▪ Accetp-Charset:接收的字符集

▪ Accept-Encoding:编码格式

▪ Accept-Lanage:所能接受的语言编码格式

• 条件式请求首部:(在 http1.1 中才会用到)

当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请 求

• 跟安全相关的请求:

▪ Authorization

▪ Cookie

3.响应首部

• Age:资源响应给你之后可以使用的时长

• Server:向客户端说明自己用到的程序名称和版本

• 协商类的首部:

▪ Vary:首部列表,服务器会根据此列表挑选最适合的版本发给客户端

• 跟安全相关:

▪ WWW-Authentication

▪ Set-Cookie

4.实体首部

• Location:指明资源的新位置,实现 302 响应码时通常会用到

• Allow:允许对此资源使用的请求方法

• 内容相关的首部

▪ Content-Encoding

▪ Content-Language

▪ Content-Length

▪ Content-Location:内容所在的位置

▪ Content-Type

• 缓存相关:

▪ ETag:扩展标签/标记

▪ Expires:过期时间

▪ Last-Modified:最后修改时间

9.什么是URL和URI?

• URI(Uniform Resource Identifier) 同一资源标示符

用于标识某一互联网资源名称的字符串,通过这种标识来允许你用户对资源可通 过特定的协议进行交互操作。在 Web 上可用的每种资源,包括 HTML 文档、图 像、视频片段、程序等, 由一个通用资源标识符进行定位。所以我们可以使用 URI 来标识每个资源的名称

• URL(Uniform Resource Locator)(统一资源定位符)

用于描述一个特定服务器上某资源的特定位置。

例如:http://www.baidu.com:80/download/bash-4.3.1-1.rpm

URL 的格式分为三个部分

i. scheme(方案)(也叫协议):http://

ii. Internet 地址:一般这个地址指的是服务器:www.baidu.com:8080

iii. 特定服务器上的资源:download/bash-4.3.1-1.rpm

10.CGI是什么?

Common Gateway Interface 通用网关接口

 

web 服务器发现需要执行脚本了,就通过 CGI 协议跟后端的应用程序打交道, 把用户的请求动态交给服务器,这个服务器的结果通过 CGI 协议返回给 http 服 务器。

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

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

相关文章

嵌入式 C 语言程序数据基本存储结构

一、5大内存分区 内存分成5个区&#xff0c;它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 1、栈区(stack)&#xff1a;FIFO就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 ​…

【数据结构】八大排序详解

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f40c; 个人主页&#xff1a;蜗牛牛啊 &#x1f525; 系列专栏&#xff1a;&#x1f6f9;数据结构、&#x1f6f4;C &#x1f4d5; 学习格言&#xff1a;博观而约取&…

线性扫描寄存器分配算法介绍

线性扫描寄存器分配 文章目录 线性扫描寄存器分配1. 算法介绍2. 相关概念3. 算法的实现3.1 伪代码3.2 图示 参考文献 论文地址&#xff1a; Linear Scan Register Allocation ​ 我们描述了一种称为线性扫描的快速全局寄存器分配的新算法。该算法不基于图形着色&#xff0c;而…

20个互联网用户Python数据分析项目

这篇文章给大家整理了20个互联网用户数据分析的项目。所有收录的项目&#xff0c;进行了严格的筛选&#xff0c;标准有二&#xff1a; 1.有解说性文字&#xff0c;大家能知道每一步在干嘛&#xff0c;新手友好 2.数据集公开&#xff0c;保证大家可以在原文的基础上自行探索 更…

定长内存池设计ConcurrentMemoryPool

原理 还回来的内存用链表串联起来&#xff0c;称为自由链表 内存块自身进行链接&#xff0c;前四个字节存下一个的地址 结构 template<class T> class ObjectPool { public:T* New(){} private:char* _memory nullptr; //方便切割void* _freeList nullptr; };第一步…

ATF BL1 UFS初始化简单分析

ATF BL1 UFS初始化分析 1 ATF的下载链接2 ATF BL1 UFS 初始化简易流程图3 ATF BL1 ufs初始化简单过程分析3.1 调用过程3.2 hikey960_ufs_init3.3 dw_ufs_init3.3 ufs_init 以海思hikey960为例来介绍&#xff0c;简单介绍在ATF BL1阶段的初始化处理。 1 ATF的下载链接 https:/…

“解引用“空指针一定会导致段错误吗?

可能有些朋友看见这个标题第一反应是嵌入式的某些内存中,0地址也是可以被正常访问的,所以对0地址的解引用不会发生错误,但我要说的情况不是这个,而是指一个真正的空指针,不仅是c/c中的0,(void*)0,NULL,还有nullptr,一个真正的空指针. 在c语言中,想获得某结构体的成员变量相对偏…

HTTP 协议的基本格式和 fiddler 的用法

目录 一. HTTP 协议 1. HTTP协议是什么 2. HTTP协议的基本格式 HTTP请求 首行 GET和POST方法&#xff1a; 其他方法 经典面试题&#xff1a; URL Header(请求报头)部分 空行 ​HTTP响应 状态码总结: 二、Fiddler的用法 1.Fidder的安装 2.Fidder的使用 一. HTTP 协议 1. H…

netty学习分享(一)

TCP与UDP TCP 是面向连接的、可靠的流协议&#xff0c;通过三次握手建立连接&#xff0c;通讯完成时要拆除连接。 UDP是面向无连接的通讯协议&#xff0c;UDP通讯时不需要接收方确认&#xff0c;属于不可靠的传输&#xff0c;可能会出现丢包现象 端口号&#xff1a; 端口号用…

软考:中级软件设计师:文件管理,索引文件结构,树型文件结构,位示图,数据传输方式,微内核

软考&#xff1a;中级软件设计师: 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff08;1…

数学运算1

正确答案&#xff1a;F 你的答案&#xff1a;E 参考答案&#xff1a;最大排列为100 1 99 2 98 3…51 49 50 所以和为999897…1(100-50)因为是一个圈所以&#xff0c;100和50相接&#xff0c;所以等于5000 知识点&#xff1a;数学运算

工作经验总结:RH850中SP、LP、PC寄存器间联系与入栈出栈操作简单整理

一、RH850系列中SP、LP、PC寄存器简介 SP&#xff1a;栈顶寄存器&#xff0c;保存最新栈顶的地址 LP&#xff1a;链接寄存器&#xff0c;保存函数跳转的地址&#xff08;当没发生调用子函数的操作时候&#xff0c;你可以通过单步调试发现&#xff0c;该寄存器的值不变&#x…

Golang-使用 gvm 进行版本控制

当你想为每个项目切换 go 版本时&#xff0c;gvm (Go Version Manager) 很方便。 这里&#xff0c;我将介绍“如何在Mac上安装gvm”和“如何使用gvm” 使用准备 仅适用于 Mac 的准备工作 按照MacOSX 要求中的说明执行以下命令。 xcode-select --install brew update brew …

JavaFx基础学习【一】:基本认识

一、介绍 JavaFX 是一个开源的下一代客户端应用平台&#xff0c;适用于基于Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公司的共同努力的成果&#xff0c;目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。 二、JavaFx应用基本结构 想要开发一款…

浅谈医用IT隔离电源在医院特殊场所接地系统的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】我们国家大部分医院的临床救治和确诊都是利用了医疗电气类设备和医用的医疗仪器&#xff0c;因此这些地方的接地问题应该引起我们的高度的重视。IT系统主要是利用了中性点没有直接接地的方式&#xff0c;所以可以减少电…

【【verilog 典型电路设计之加法器树乘法器】】

verilog 典型电路设计之加法器树乘法器 加法器树乘法器 加法器树乘法器的设计思想是“移位后加”&#xff0c;并且加法运算采用加法器树的形式。乘法运算的过程是&#xff0c;被乘数与乘数的每一位相乘并且乘以相应的权值&#xff0c;最后将所得的结果相加&#xff0c;便得到了…

日常BUG——微信小程序提交代码报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 在使用微信小程序开发工具进行提交代码时&#xff0c;报出如下错误&#xff1a; Invalid a…

DDR5内存升级看光威,两款超值DDR5内存条,价格实惠性能强劲

DDR4内存条现在用的人应该占多数&#xff0c;但是时候升级DDR5了&#xff0c;都已经2023年了&#xff0c;国产内存早就崛起了&#xff0c;超值的DDR5内存条选择非常多&#xff0c;特别适合游戏玩家使用&#xff0c;像是光威前段时间推出的两款高端DDR5&#xff0c;神策DDR5 和神…

Java面向对象(内部类)(枚举)(泛型)

内部类 内部类是五大成员之一&#xff08;成员变量、方法、构造方法、代码块、内部类&#xff09;&#xff1b; 一个类定义在另一个类的内部&#xff0c;就叫做内部类&#xff1b; 当一个类的内部&#xff0c;包含一个完整的事物&#xff0c;且这个事务不必单独设计&#xf…