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

news2025/1/17 18:08:04

目录

一、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.coloradmin.cn/o/1345301.html

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

相关文章

lv13 内核模块参数和依赖

1 模块传参 1.1 模块参数设置 将指定的全局变量设置成模块参数 module_param(name,type,perm);//将指定的全局变量设置成模块参数 /* name:全局变量名 type:使用符号 实际类型 传参方式bool bool insmod xxx.ko 变量名0 …

拍照就能建模!手机就能访问! 这个技术正成为宣传新手段!

随着人工智能技术的不断进步,现在可以通过拍摄照片结合AI技术来实现3D模型生成。这种技术的出现, 不仅能更加方便快捷地创建3D模型,而且还能真实复原现实中物件的质感、纹理等。同时,极大地降低了各行业对3D技术的应用门槛&#x…

[Angular] 笔记 24:ngContainer vs. ngTemplate vs. ngContent

请说明 Angular 中 ngContainer, ngTemplate 和 ngContent 这三者之间的区别。 chatgpt 回答: 这三个在 Angular 中的概念是关于处理和组织视图的。 1. ngContainer: ngContainer 是一个虚拟的 HTML 容器,它本身不会在最终渲染…

二分查找(非朴素)--在排序数组中查找元素的第一个和最后一个位置

个人主页:Lei宝啊 愿所有美好如期而遇 目录 本题链接 输入描述 输出描述 算法分析 1.算法一:暴力求解 2.算法二:朴素二分算法 3.算法三:二分查找左右端点 3.1查找左端点 3.1.1细节一:循环条件 3.1.2细节二…

【详解】KMP算法——每步配图让你打穿KMP

介绍 什么是KMP算法: KMP算法主要运用串的模式匹配中(简单来说就是在s串中找到一个与t串相等的子串,称为模式匹配)例如s为abcdef,t为bcd,那么就是在s中找到bcd,并返回其在s中的首下标&#xf…

【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

文章目录 一、查找元素 - set#find 函数1、函数原型 简介2、代码示例 - set#find 函数 二、获取元素个数 - set#count 函数1、函数原型 简介2、代码示例 - set#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C 语言的 STL 标准模板库 , std::set 集合容器 是一个…

优化模型:matlab二次规划

1.二次规划 1.1 二次规划的定义 若某非线性规划的目标函数为自变量 x x x的二次函数,且约束条件全是线性的,则称这种规划模型为二次规划。 1.2 二次规划的数学模型 min ⁡ 1 2 x T H x f T x \min \frac{1}{2}\boldsymbol{x}^{\boldsymbol{T}}\bolds…

Android实验:contentprovider 实验+SQLite 数据库的实现

目录 SQLite实验目的实验内容实验要求项目结构代码实现结果展示 SQLite SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库系统不同,…

三子棋(c语言)

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

“产品经理必懂的关键术语“

产品经理是现代企业中非常重要的一个角色,他们负责制定产品策略、规划产品开发流程、管理产品质量和用户反馈等等。然而,对于产品经理来说,了解并掌握相关的专业术语是非常重要的。本篇文章会介绍一些产品经理需要掌握的专业术语,…

PIC项目(9)——基于PIC16F877A的环境光照检测系统

1.课题背景 近年来,城市光污染问题逐渐显现。白天,玻璃幕墙、釉面砖墙、磨光大理石和各种涂料等装饰反射光线,明晃刺眼;夜晚,商场、酒店、超市楼顶的广告牌、电子屏、霓虹灯炫烂夺目。面对这样的光污染,人们…

SpringMVC学习与开发(四)

注&#xff1a;此为笔者学习狂神说SpringMVC的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! 11、Ajax初体验 1、伪造Ajax 结果&#xff1a;并未有xhr异步请求 <!DOCTYPE html> &…

四.消息队列

目录 1 .消息队列概述 2.消息队列的特点 3.ftok函数 3 创建消息队列-msgget( ) 3.1发送消息-msgsnd( ) 3.2 接收消息-msgrcv( ) 4 消息队列的控制 1 .消息队列概述 消息队列是一种进程间通信的机制&#xff0c;允许不同进程在系统中传递数据。它们通常由内核维护&#x…

c语言-指针练习题

目录 前言一、题目一二、题目二总结 前言 为了巩固c语言中关于指针知识点的掌握&#xff0c;本篇文章记录关于指针的练习题。 一、题目一 有n个整数&#xff0c;使前面各数顺序往后移动m个位置&#xff0c;最后m个数变成最前面的m个数 写一函数实现以上功能&#xff0c;在主函…

【Vue2+3入门到实战】(5)Vue基础之Computed计算属性 详细示例

目录 一、今日学习目标1.computed计算属性 二、computed计算属性1.概念2.语法3.注意4.案例5.代码准备 三、computed计算属性 VS methods方法1.computed计算属性2.methods计算属性3.计算属性的优势4.总结 四、计算属性的完整写法五、综合案例-成绩案例六、Computed计算属性总结 …

荣耀之城(富饶之地)

规则简介 这是一个回合制的游戏&#xff0c;每个回合都是先选角色然后按照角色编号依次执行回合。 8个角色&#xff1a;刺客、小偷、魔术师、国王、住持、商人、建筑师、领主 根据人数的不同&#xff0c;按照不同的规则依次选取一个角色&#xff0c;国王第一个选&#xff0c…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(二)

Matplotlib绘图技巧&#xff08;二&#xff09; 写在前面2. 函数间区域填充函数fill_between()和fill()参数&#xff1a; 3. 散点图 scatter4. 直方图 hist5. 条形图 bar5.1 一个数据样本的条形图参数&#xff1a; 5.2 多个数据样本进行对比的直方图5.3 水平条形图参数 5.4 绘制…

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…

结构体:子网掩码

#include<iostream> using namespace std; union IP //创建共用体 {unsigned char a[4];unsigned int ip; }; IP getIP() //获取ip函数 {int a, b, c, d;scanf_s("%d.%d.%d.%d", &a, &b, &c, &d);IP address;address.a[3] a; address.a[2] …

C. Load Balancing 一个序列同时加一个数和减一个数,直到最大和最小之间相差最大为1(结论可记住)

题目&#xff1a; https://atcoder.jp/contests/abc313/tasks/abc313_c 思想&#xff1a;1.给定一个固定的B&#xff0c;求使A等于B所需的最小运算次数 2.在所有最大值和最小值最多相差1的B中&#xff0c;找出一个所需的运算次数最少的&#xff0c;即1 做法&#xff1a;构造…