<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,一经查实,立即删除!

相关文章

随记-SQLAlchemy ORM 梳理

随记 最近在使用 SQLAlchemy 2.0 的过程中,有一些不适应的地方,所以想梳理一下 SQLAlchemy ORM 的使用。 关于旧版的使用以及其他信息请参考另一篇文章Flask 初探七, 这里就不过多赘述,直接进入主题。 One To Many 单向 官方版本 class Par…

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…

import_module() 函数的理解

importlib 模块中的 import_module 函数用于动态导入模块。它返回导入的模块对象&#xff0c;允许你在运行时按需加载模块。 示例代码如下&#xff1a; import importlib# 指定要导入的模块的名称 module_name math# 使用 import_module 函数动态导入模块 imported_module …

基于SpringBoot的新能源充电系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的新能源充电系统,java项…

C语言不常用小tip

#include <stdio.h> #define S(x) 3 < (x) < 5 int a, n;void f1(int n) { for(; n > 0; n--){if(n % 2 ! 0) continue;printf("%d ", n); /*%d后面有1个空格*/}printf("\n"); }double f2(double x, int n) { if(n 1) retur…

【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;只需要继承…

代码随想录 123. 买卖股票的最佳时机 III

题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&#xff09;。 示例 1: 输入…

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

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

Java中final、finally和finalize方法的区别

简而言之&#xff0c;final关键字可以与变量、方法和类一起使用&#xff0c;并且对它们都有不同的含义。finally是另一个 Java 关键字&#xff0c;与try 、catch 、throw 和 throws一起用于异常处理。Finalize()是 Java 中的一个特殊方法&#xff0c;垃圾收集器在回收符合 GC 条…

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 维护结算参数文件 定义利润分析码

Go语言中的包管理工具之Go Vendor的使用

GoLang 中常用的包管理的方式 常用的有三种 Go PathGo VendorGo Modules 关于 Go Vender 1 &#xff09;概述 在2015年的时候&#xff0c;我们的另一个包管理工具Go Vendor就诞生了它诞生于 2015.8.19 &#xff0c;是在Go的 1.5 版本当中引入的&#xff0c;它默认是关闭的我…