<JavaEE> 协议格式 -- 应用层协议 HTTP

目录

一、HTTP的概念

1)什么是HTTP协议?

2)什么是超文本?

二、HTTP协议格式

三、请求(request)

1) 方法(Method)

1> GET方法

2> POST方法

3> GET和POST的区别

4> GET和POST的其他说明

5> 其他方法简单说明

2)URL

1> 什么是URL?

2> URL的格式

3> URL encode(特殊的编码字符)

3)请求头(Header)

1> 什么是请求头(Header)?

2> 请求头(Header)内容是什么?

4)正文(Body)

四、响应(response)

1)状态码

1> 状态码大类

2> 重要的状态码

2)响应头(Header)

3)正文(Body)


一、HTTP的概念

1)什么是HTTP协议?

HTTP协议是一种广泛使用的应用层协议,又称为“超文本传输协议”。
HTTP有1.0、1.1、2.0、3.0四个版本,前三个版本基于TCP实现,而3.0版本基于UDP实现。目前常用版本为HTTP1.1和HTTP12.0。
通过浏览器输入“网址”,浏览器就会给对应的服务器发送获取网页的HTTP请求。服务器收到请求后,经过计算处理就会返回HTTP响应,响应可以包含HTML、CSS、JavaScript、图片、字体等信息。这其中可能涉及多次请求/响应的交互过程。

2)什么是超文本?

超文本就是指传输内容不仅为文本内容,还可以是图片、视频、音频等二进制数据。

二、HTTP协议格式

HTTP协议中,请求和响应分别有自己的格式。


三、请求(request)

1) 方法(Method)

包括以下方法:
方法名说明
GET获取资源
POST传输正文主体
PUT传输文件
HEAD获得报文首部
DELETE删除文件
OPTIONS询问支持的方法
TRACE追踪路径
CONNECT要求用隧道协议连接代理
LINK建立和资源之间的联系
UNLINE断开连接关系

1> GET方法

GET是最常用的HTTP方法,常用于获取服务器上的资源。在浏览器中直接输入URL,就会发送GET请求。
GET请求,方法名为GET,URL中的query string可以为空或有键值对。报头header有若干键值对结构。正文body为空。

2> POST方法

POST也是常见方法,多用于向服务器提交用户输入的数据。
POST请求,方法名为POST,URL中的query string一般为空。报头header有若干键值对结构。正文body一般不为空,body内的数据格式通过header中的Content-Type标签指定。body的长度由header中的Content-Length标签指定。

3> GET和POST的区别

GET和POST本质上没有区别。只是在使用习惯上,有所不同。
(1) 从语义上来说,GET一般用于获取数据;POST一般用于提交数据。
(2) GET的body一般为空,通过query string传递数据;POST的query string一般为空,通过body传输数据。
(3) GET请求一般实现为幂等的;而POST请求一般是非幂等的。
(4) GET可以被缓存;POST不能被缓存。这与两者的幂等性相关。

4> GET和POST的其他说明

GET和POST的提交和获取数据的功能是没有强制要求的。
GET和POST的幂等性是没有强制要求的。最终要看代码实现。
数据的安全性与是否加密相关,与使用GET或使用POST方法无关。
可以传输的数据量与GET和POST无关。GET和POST都可以使用body传输数据,且RFC标准文档中,并没有规定URL和body的长度。
可以传输的数据类型与GET和POST无关。即使是二进制数据,也可以在转码之后放到URL中。

5> 其他方法简单说明

以下方法几乎不使用:
PUT:用法与POST相似,但具有幂等性,一般用于更新。
DELETE:用于删除服务器指定资源。
OPTIONS:返回服务器所支持的请求方法。
HEAD:用法与GET相似,但只返回报头(header),不返回正文(body)。
TRACE:用于回显服务器端,测试时使用。
CINNECT:预留,暂无使用。

2)URL

1> 什么是URL?

URL俗称“网址”,专业术语是URL(Uniform Resource Locator 统一资源定位符)。
网络中每个文件都有唯一的URL,URL描述了这个资源在网络中所处的位置和浏览器应该采取什么方式处理这个资源。

2> URL的格式

协议名:常用协议名有http、https等。可以省略,默认为http:// 。
登录认证信息:用于身份认证。现在通常不使用。
服务器地址:可以是如上图中的“域名”,也可以是IP地址。DNS会将“域名”解析为IP地址。
服务器端口号:使用端口号区分程序,可以省略。省略时,浏览器会根据协议类型自动找到合适的端口号。
文件路径:描述了需要使用的文件和文件的位置,可以省略。
查询字符串:query string,是键值对结构。以?号开头,键值对之间使用&号分隔,键和值之间使用=号分隔。一个URL中的query string可以包含多个键值对。这相当于对本次请求进行补充说明,可以省略。
片段标识符:类似书签,主要用于页面内跳转,可以省略。以#号开头。

3> URL encode(特殊的编码字符)

URL encode中,部分字符有特殊含义,如 ‘/’、‘?’、‘:’、‘+’ 等,需要使用这些字符的本义时,需要先对其进行转义。
使用转义字符 ‘%’ 对特殊字符进行转义。

3)请求头(Header)

1> 什么是请求头(Header)?

header的含义类似报头,但内容是以键值对结构呈现的,每个键值对占一行,键和值之间使用 冒号+空格 进行分隔。

2> 请求头(Header)内容是什么?

header中有非常多规定好的键,包括且不仅仅包括如下内容:
Host表示服务器主机的地址和端口,该信息在URL中也存在。在使用代理时,Host的内容和URL不同。
Content-Length表示正文(body)中的数据长度。请求存在正文(body)才会有该属性。
Content-Type表示正文(body)中的数据格式。请求存在正文(body)才会有该属性。
User-Agent表示浏览器和操作系统的版本和其他信息。
Referer表示当前页面是从哪个页面跳转的。直接输入URL访问,或通过收藏夹访问,则没有该项属性。
Cookie是浏览器在本地存储临时的键值对数据。通常使用这些键值对数据实现“身份标识(令牌)”的功能,也可以记录“访问时间”、“访问次数”等信息。不同的域名下可以有不同的Cookie,不会产生冲突。

4)正文(Body)

用于补充请求信息,也是以键值对形式出现
主要使用json、form表单格式、form-data格式等,浏览器和服务器会根据header中指定的Content-Type对body中的数据进行处理。
form表单格式与query string一致,form-data格式则通常用于提交图片或文件等。

四、响应(response)

1)状态码

1> 状态码大类
状态码类别描述
1XXInformational(信息状态码)请求正在处理,请稍等
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要附加操作以完成请求
4XXClient Error(客户端错误状态码)请求有误,服务器无法处理
5XXServer Error(服务器错误状态码)服务器处理请求出错
2> 重要的状态码
状态码状态码描述说明
200OK访问成功
404Not Found没有找到资源
403Forbidden访问被拒绝,没有权限
405Method Not Allowed访问失败,不支持请求中的方法
500Internal Server Error服务器出错
504Gateway Timeout服务器响应超时
302Move Temporarily临时重定向,跳转其他页面
301Moved Permanently永久重定向,跳转其他页面

2)响应头(Header)

响应的报头与请求的报头基本一致,只是Content-Type支持的格式更多了,包括 text/html、text/css、application/javascript、application/json 等。

3)正文(Body)

响应的正文(Body)也与请求的正文(Body)基本一致,只是支持的数据格式也变多了,这取决于Content-Type

阅读指针 -> 《 协议格式 -- 应用层协议 HTTPS 》

链接生成中.........

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

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

相关文章

linux下docker搭建mysql8

1:环境信息 centos 7,mysql8 安装docker环境 2.创建mysql容器 2.1 拉取镜像 docker pull mysql:8.0.23 2.2 查询镜像拉取成功 docker images 2.3 创建挂载的目录文件 mkdir /usr/mysql8/conf mkdir /usr/mysql8/data ##给data文件赋予操作权限 chmod 777 /…

mfc100u.dll文件丢失了要怎么解决?修复mfc100u.dll详细指南

mfc100u.dll文件丢失了要怎么解决?首先让我们扒一扒什么是 mfc100u.dll。这玩意儿是 Microsoft Visual Studio 2010 的一部分,它就像一款程序生活中不可或缺的零件,没了它,程序肯定跑不起来。想想看,没有一个重要的零件&#xff…

DOA估计算法——迭代自适应算法(IAA)

1 简介 迭代自适应法 (Iterative Adaptive Approach,IAA)估计算法最早由美国的电气工程师和数学家Robert Schmidt和Roy A. Kuc在1986年的一篇论文"Multiple Emitter Location and Signal Parameter Estimation"中首次提出了这一算法, IAA DOA …

jQuery显示,切换,隐藏的使用练习

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>标题</title><style>div {width: 200px;height: 200px;background-color: red;display: none;}</style> </head> <body>…

thinkphp+vue+mysql企业车辆管理系统m117l

“企业车辆管理系统”是运用php语言和vue框架&#xff0c;以Mysql数据库为基础而发出来的。为保证我国经济的持续性发展&#xff0c;必须要让互联网信息时代在我国日益壮大&#xff0c;蓬勃发展。伴随着信息社会的飞速发展&#xff0c;企业车辆管理系统所面临的问题也一个接一个…

提升效率:使用注解实现精简而高效的Spring开发

IOC/DI注解开发 1.0 环境准备1.1 注解开发定义bean步骤1:删除原XML配置步骤2:Dao上添加注解步骤3:配置Spring的注解包扫描步骤4&#xff1a;运行程序步骤5:Service上添加注解步骤6:运行程序知识点1:Component等 1.2 纯注解开发模式1.2.1 思路分析1.2.2 实现步骤步骤1:创建配置类…

SpringBoot整合Canal

一 linux docker compose版本 1.第一步&#xff1a;基础环境 &#xff08;1&#xff09;第1步&#xff1a;安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…

【C++】开源:libev事件循环库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍libev事件循环库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

Java EE Servlet之Servlet API详解

文章目录 1. HttpServlet1.1 核心方法 2. HttpServletRequest3. HttpServletResponse 接下来我们来学习 Servlet API 里面的详细情况 1. HttpServlet 写一个 Servlet 代码&#xff0c;都是要继承这个类&#xff0c;重写里面的方法 Servlet 这里的代码&#xff0c;只需要继承…

企业如何做好内容?媒介盒子分享

在个性化算法的支持下&#xff0c;企业通过创作优质内容使消费者主动选择企业的时代已经来临&#xff0c;对于中小企业来说&#xff0c;这是能够低成本进行营销的好机会。但是有许多企业对内容的理解依旧是片面的&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;企业如何做…

Spring-5-切入点的高级使用

Spring提供了两个额外的Pointcut实现&#xff0c;分别是ComposablePointcut和ControlFlowPointcut,它们提供了所需的灵活性。 使用控制流切入点 由ControlFlowPointcut类实现的Spring控制流切入点类似于许多其他AOP实现中可用的cflow构造&#xff0c;尽管功能上没有那么强大。…

yolov5简单手势识别

实验目的 实验要求只需要识别五个简单的手势即可&#xff0c;分别对应的一下五个动作 动作对应标签名点赞goodOKok单手比心love数字 5five数字8eight 使用yolov5实现目标检测功能&#xff0c;有一下几个主要步骤 环境配置&#xff08;包括conda、labelimg、yolov5的下载&am…

SAP CO系统配置-与PS集成相关配置(机器人制造项目实例)

维护分配结构 配置路径 IMG菜单路径:控制>内部订单>实际过帐>结算>维护分配结构 事务代码 OKO6 维护结算参数文件 定义利润分析码

焊点保护,选择使用焊点保护UV胶的优势有哪些?

快速固化 UV胶在受到紫外光照射后能够迅速固化&#xff0c;使得焊点保护的过程更加迅速。这种快速固化的特性有助于提高生产效率&#xff0c;减少等待时间。 精准涂覆 由于UV胶在受到紫外光照射后才开始固化&#xff0c;操作者有足够的时间来进行精准的涂覆和调整位置。这使…

SpringBoot 请求参数

文章目录 一、简单参数实体参数数组集合参数日期参数Json参数路径参数 一、简单参数 原始方式 在原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServletRequest 对象手动获取。 SpringBoot方式 1.参数名与形参变量名相同&#xff0c;定义形参即可接收参数。…

云短信平台优惠活动 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 某云短信厂商,为庆祝国庆,推出充值优惠活动。 现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。 输入描述 第一行客户预算M,其中 0<=M<=100 第二行给出售价表,P1,P2,… Pn, 其中 1<=n<=100…

命令行创建Vue项目

Vue项目创建 1. 打开UI界面 在命令行中&#xff0c;执行如下指令&#xff1a; vue ui 2. 打开项目管理器 3. 创建项目 创建项目的过程&#xff0c;需要联网进行&#xff0c;这可能会耗时比较长的时间&#xff0c;请耐心等待。 windows的命令行&#xff0c;容易卡顿&#xff0c…

Android笔记(二十二):Paging3分页加载库结合Compose的实现网络单一数据源访问

Paging3 组件是谷歌公司推出的分页加载库。个人认为Paging3库是非常强大&#xff0c;但是学习难点比较大的一个库。Paging3组件可用于加载和显示来自本地存储或网络中更大的数据集中的数据页面。此方法可让移动应用更高效地利用网络带宽和系统资源。在具体实现上&#xff0c;Pa…

[mysql 基于C++实现数据库连接池 连接池的使用] 持续更新中

目背景 常见的MySQL、Oracle、SQLServer等数据库都是基于C/S架构设计的&#xff0c;即&#xff08;客户端/服务器&#xff09;架构&#xff0c;也就是说我们对数据库的操作相当于一个客户端&#xff0c;这个客户端使用既定的API把SQL语句通过网络发送给服务器端&#xff0c;MyS…

磁盘阵列raid

一、服务器硬件 cpu 、 主板 、内存、硬盘、网卡、电源、raid卡、风扇、远程管理卡 二、硬盘尺寸 目前生产环境中主流的两种类型硬盘 3.5寸 和 2.5寸 硬盘 2.5寸硬盘可以通过使用硬盘托架后适用于3.5寸硬盘的服务器&#xff0c;但是3.5寸没法转换成2.5寸 1.如何在服务器上…