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

 

目录

         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.mzph.cn/news/36448.shtml

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

相关文章

测试架构师如何落地性能测试方案(一)

背景描述&#xff1a; 最近刚接手一个新项目&#xff0c;在最开始的时候要求对这个项目做性能测试&#xff0c;产品经理也给不出性能需求&#xff0c;只因为这个项目是电商项目&#xff0c;可能会有高并发&#xff0c;秒杀的场景&#xff0c;所以产品经理要求我们对这个项目必…

STM32基于CubeIDE和HAL库 基础入门学习笔记:物联网项目开发流程和思路

文章目录&#xff1a; 第一部分&#xff1a;项目开始前的计划与准备 1.项目策划和开发规范 1.1 项目要求文档 1.2 技术实现文档 1.3 开发规范 2.创建项目工程与日志 第二部分&#xff1a;调通硬件电路与驱动程序 第三部分&#xff1a;编写最基础的应用程序 第四部分&…

opencv带GStreamer之Windows编译

目录 1、下载GStreamer和安装2. GSTReamer CMake配置3. 验证是否配置成功 1、下载GStreamer和安装 下载地址如下&#xff1a; gstreamer-1.0-msvc-x86_64-1.18.2.msi gstreamer-1.0-devel-msvc-x86_64-1.18.2.msi 安装目录无要求&#xff0c;主要是安装完设置环境变量 xxx\1…

【css】渐变

渐变是设置一种颜色或者多种颜色之间的过度变化。 两种渐变类型&#xff1a; 线性渐变&#xff08;向下/向上/向左/向右/对角线&#xff09; 径向渐变&#xff08;由其中心定义&#xff09; 1、线性渐变 语法&#xff1a;background-image: linear-gradient(direction, co…

springboot结合element-ui实现增删改查,附前端完整代码

实现功能 前端完整代码 后端接口 登录&#xff0c;注册&#xff0c;查询所有用户&#xff0c;根据用户名模糊查询&#xff0c;添加用户&#xff0c;更新用户&#xff0c;删除用户 前端 注册&#xff0c;登录&#xff0c;退出&#xff0c;用户增删改查&#xff0c;导航栏&#…

Android Sutdio 导入libs文件夹下的jar包没反应

有点离谱&#xff0c;笨笨的脑子才犯的错误 首先发现问题&#xff1a;转移项目的时候 直接复制粘贴libs文件夹下的jar包到新项目&#xff0c;在build.gradle文件下 使用语句并应用也没反应&#xff08;jar包没有出现箭头且代码报错&#xff0c;找不到&#xff09; implementa…

什么样的 PLC 可以算是高端 PLC?

针对问题本身&#xff0c;有的回答里都提到了。可靠性&#xff0c;扫描时间&#xff0c;带离散量点数&#xff0c;带模拟量输出点数&#xff0c;扩展性&#xff0c;这些都可以看作PLC系统级别划分的依据。比如说&#xff0c;有相应安全完整性等级认证的LOGIC SOLVER为核心的PLC…

五个独特且有趣的ChatGPT指令

今天分享5个很实用的指令&#xff0c;这几个指令很多时候对我们输出内容的连贯性、文章风格、创意性等方面有着决定性的作用。 目录 第一个&#xff1a;Max tokens&#xff08;最大令牌&#xff09; 第二个&#xff1a;Top_p(控制采样) 第三个&#xff1a;Presence_penalty …

Android Studio System.out.println()中文乱码

第一步&#xff1a; 打开studio64.exe.vmoptions加入-Dfile.encodingUTF-8 第二步&#xff1a; File-Settings-Editor-File Encodings 把所有的编码格式改为UTF-8 尝试跑一下代码&#xff0c;如果还不行&#xff0c;重启IDE 再试试。

UI美工设计岗位的工作职责

UI美工设计岗位的工作职责1 职责&#xff1a; 1、负责软件界面的美术设计、创意工作和制作工作; 2、根据各种相关软件的用户群&#xff0c;提出构思新颖、有高度吸引力的创意设计; 3、对页面进行优化&#xff0c;使用户操作更趋于人性化; 4、维护现有的应用产品; 5、收集和…

NLP文本匹配任务Text Matching [无监督训练]:SimCSE、ESimCSE、DiffCSE 项目实践

NLP文本匹配任务Text Matching [无监督训练]&#xff1a;SimCSE、ESimCSE、DiffCSE 项目实践 文本匹配多用于计算两个文本之间的相似度&#xff0c;该示例会基于 ESimCSE 实现一个无监督的文本匹配模型的训练流程。文本匹配多用于计算两段「自然文本」之间的「相似度」。 例如…

一百五十三、Kettle——Linux上安装的kettle9.3启动后说缺少libwebkitgtk-1.0(真是坑爹啊,刚龟速下载又忍痛卸载)

一、问题 在kettle9.3可以在本地连接hive312后&#xff0c;在Linux中安装了kettle9.3&#xff0c;结果启动时报错WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable 而且如果直接下载libwebkitgtk的话也没有用 [roothurys22 data-integration]# yu…

在线吉他调音

先看效果&#xff08;图片没有声&#xff0c;可以下载源码看看&#xff0c;比这更好~&#xff09;&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

【第二阶段】kotlin的函数类型作为返回类型

fun main() {//调用,返回的是一个匿名类型&#xff0c;所以info就是一个匿名函数val infoshow("",0)//info接受的返回值为匿名类型&#xff0c;此时info就是一个匿名函数println(info("kotlin",20)) }//返回类型为一个匿名函数的返回类型fun show(name:Str…

01 - 工作区、暂存区、版本库、远程仓库 - 以一次连贯的提交操作为例

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 工作区、暂存区、版本库、远程仓库1.1 工作区1.2 工作区 > 暂存区&#xff1a;git add1.3 暂存区 > 版本库&#xff1a;git commit1.4 push到远程仓库 1. 工作区、暂存区、版本…

【生成式AI】ProlificDreamer论文阅读

ProlificDreamer 论文阅读 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…

解决校园网使用vmware桥接模式,虚拟机与物理机互相ping通,但是虚拟机ping不通百度的问题

遇到的问题 使用校园网时&#xff0c;桥接模式下&#xff0c;物理机可以ping通虚拟机&#xff0c;但是虚拟机ping不通主机 解决方法 在物理机中查看网络相关信息 ipconfig 修改虚拟机网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 注意 /ifcfg-ens33需要根据…

C++ QT(一)

目录 初识QtQt 是什么Qt 能做什么Qt/C与QML 如何选择Qt 版本Windows 下安装QtLinux 下安装Qt安装Qt配置Qt Creator 输入中文配置Ubuntu 中文环境配置中文输入法 Qt Creator 简单使用Qt Creator 界面组成Qt Creator 设置 第一个Qt 程序新建一个项目项目文件介绍项目文件*.pro样式…

SpringBoot启动报错:java: 无法访问org.springframework.boot.SpringApplication

报错原因&#xff1a;jdk 1.8版本与SpringBoot 3.1.2版本不匹配 解决方案&#xff1a;将SpringBoot版本降到2系列版本(例如2.5.4)。如下图&#xff1a; 修改版本后切记刷新Meavn依赖 然后重新启动即可成功。如下图&#xff1a;

3.4 网络安全管理设备

数据参考&#xff1a;CISP官方 目录 IDS (入侵检测系统)网络安全审计漏洞扫描系统VPN&#xff08;虚拟专网&#xff09;堡垒主机安全管理平台 一、IDS (入侵检测系统) 入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;用于监测和检测网络中的入侵行…