<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.hqwc.cn/news/310203.html

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

相关文章

大数据- Hadoop入门

目录 🐶2.1 hadoop的简介 1. 概述 2. 什么是分布式? 3. Hadoop的指代 🐶2.2 hadoop的发展历程 🐶2.3 hadoop的版本介绍 🐶2.4 hadoop的常用端口号 🐶2.5 hadoop的设计目的 🐶2.6 hadoo…

商会集聚区正式启动,云迈科技成为首批入驻企业,助力片区信息化升级!

“商”聚雨花,“会”集新城。12月27日,长沙市雨花区举行高铁新城商会集聚区政策发布暨首家商会大厦揭牌活动。活动现场发布了《关于支持高铁新城商会集聚区发展的若干措施》,首家商会大厦长沙市耒阳商会大厦揭牌并与入驻会员签约,…

goframe v2 模板引擎的用法

这里用的goframe v2框架 提醒:下面的import 引入的控制器和api,根据自己实际项目路径 main函数 import ("context""github.com/gogf/gf/v2/net/ghttp""github.com/gzdzh/dzhgo/modules/dzhCms/controller/web""gith…

Go语言中的性能考虑和优化

优化您的Go代码以达到最佳性能 性能优化是软件开发的关键方面,无论您使用哪种编程语言。在这篇文章中,我们将探讨Go语言中的性能考虑和优化,Go是一种以其效率而著称的静态类型和编译语言。我们将深入探讨三个关键领域:分析并发代…

YOLOv5改进 | 2023Neck篇 | CCFM轻量级跨尺度特征融合模块(RT-DETR结构改进v5)

一、本文介绍 本文给大家带来的改进机制是轻量级跨尺度特征融合模块CCFM(Cross-Scale Feature Fusion Module)其主要原理是:将不同尺度的特征通过融合操作整合起来,以增强模型对于尺度变化的适应性和对小尺度对象的检测能力。我将…

利用 IntelliJ IDEA 整合 GitHub 实现项目版本控制与协作管理

目录 前言1 设置GitHub登录账号2 将项目分享到GitHub3 IntelliJ IDEA 中导入Github项目4 往GitHub推送代码4.1 Commit Change(提交到本地库)4.2 Git -> Repository -> Push(推送到远程库) 5 拉取远程库代码到本地6 克隆远程…

KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models

论文链接:2023.12-https://arxiv.org/pdf/2312.06185.pdf 1.Background & Motivation 目前生成式的语言模型,如ChatGPT等在通用领域获得了巨大的成功,但在专业领域,由于缺乏相关事实性知识,LLM往往会产生不准确的…

大创项目推荐 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 🔥 优质竞赛项目系列,今天…

LVS负载均衡配置虚拟引起微服务注册混乱

线上小程序突然报错,查看网关日志,访问下游微服务A时大量报错: 1)检查微服务是否未注册。登录eureka页面,发现三个节点均正常注册 三个微服务节点地址分别为:13.9.1.91:8080,13.9.1.92:8080和1…

Javaweb-servlet

一、servlet入门 1.Servlet介绍 (1)什么是Servlet Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#…

【JVM】一篇通关JMM内存模型

JMM内存模型 1. 原子性1-1. 问题分析1-2. 问题解决 2. 可见性2-1. 问题分析2-2. 问题解决 3. 有序性3-1. 问题分析3-2. 问题解决 4. CAS与原子性5. synchronized 优化 1. 原子性 很多人将【java 内存结构】与【java 内存模型】傻傻分不清,【java 内存模型】是 Java…

1、aigc图像相关

aigc图像相关 一、Diffusion webui 在autodl上部署一些问题二、lora和kohyass(1)角色模型(2)风格模型(3)dreambooth(4)模型合并(5)Lora加Adetail其他 三、sd …