上海定制网站建设费用/今日头条最新
首先,前端请求后端数据,后端响应数据给前端,这是我们大家都知道的,那其中所涉及到的数据传输协议又是什么呢?这个传输规范就是我们大名鼎鼎的HTTP协议!
什么是HTTP协议?
HTTP(超文本传输协议)是一种用于在计算机网络上发送和接收超文本资源的应用层协议。它是在Web应用程序之间传输数据的一种规范。HTTP的设计目的是实现客户端和服务器之间的通信和数据交换。
HTTP协议使用简单的请求-响应模型来传输数据。客户端发送HTTP请求到服务器,服务器根据请求作出相应并返回HTTP响应。请求和响应的内容可以是文本、HTML、XML、JSON等格式的数据。
HTTP协议的特点包括:
1. 无连接:每个请求-响应交互都是独立的,服务器不会保持与客户端之间的持久连接。每个请求都需要建立一个新的连接。这使得HTTP协议具有轻量级和灵活性,但也会增加一些额外的开销。
2. 无状态:HTTP协议是无状态的,服务器不会记录之前的通信状态。每个请求都是相互独立的,服务器无法感知到之前的请求。这要求服务端在处理请求时,对前后请求之间的上下文和状态进行管理。
3. 可扩展:HTTP协议支持开发者扩展协议功能。通过使用头部字段来传递各种参数和元数据,开发者可以自定义和扩展协议的行为。
先来一个简单的示例,创建springboot工程之后,加入以下代码片段:
@RestController
public class SpringbootFirstTest {//设置请求的地址@RequestMapping("/helloTest")public String getAddress(){System.out.println("hello world!");return "hello world!";}
}
说明:
@RestController= @Controller + @ResponseBody
@ResponseBody注解是作用于类的返回对象
● 类型:属于方法注解、类注解
● 位置:书写在Controller方法上或类上
● 作用:将方法返回值直接响应给浏览器,且如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器 ,所以这里特别注意如果返回值不是实体类对象/集合的话,是不会转换成json格式的!
Springboot的服务启动之后,我们来到浏览器找到本地8080端口下,对请求路径发起请求得到如下的图
@RestController
public class SpringbootFirstTest {//设置请求的地址@RequestMapping("/helloTest")public Set<Object> getAddress(){System.out.println("hello world!");Set<Object> set = new HashSet<>();set.add(1);set.add(2);set.add(3);return set;}
}
这里我的浏览器安装了对应的json格式解析插件
HTTP协议又分为:请求协议和响应协议
● 请求协议:浏览器将数据以请求格式发送到服务器
● 包括:**请求行**、**请求头** 、**请求体**
● 响应协议:服务器将数据以响应格式返回给浏览器
● 包括:**响应行** 、**响应头** 、**响应体**
打开开发者工具(右键检查或则F12快捷键),每点击一次刷新,浏览器都会重新发起一个网络请求,框起来的部分即就是我们HTTP的固定格式,可以看出http无论是请求还是响应都是以Key、Value的形式进行展示
先看常规:
这里边需要关注的是请求的网址、方法、状态代码,请求的网址在前后端开发的时候必须遵守,要不然找不到对应的资源;方法即代表当前所请求的类型,待会儿会着重梳理一下,这里有一个非常重要的知识——状态码,状态码是鉴别本次请求响应,返回结果的一种体现:
状态码 | 说明 |
---|---|
1xx | 信息性状态码,表示请求被接收并继续处理。 |
2xx | 成功状态码,表示请求被成功接收、理解和处理。 |
3xx | 重定向状态码,表示资源位置发生变化,需要进一步处理。 |
4xx | 客户端错误状态码,表示请求包含错误或无法完成请求。 |
5xx | 服务器错误状态码,表示服务器无法完成合法请求。 |
浏览器向服务器发起请求:
可以看到,在请求行中,有一个GET,而他代表的就是浏览器所发起请求的方式,那么请求方式有哪些呢?
请求方式 | 请求说明 |
---|---|
GET | 获取资源:向特定的资源发起请求 |
POST | 传输实体主体:向指定资源提交数据进行处理请求,常见的就是上传的操作,数据被包含在请求体中 |
PUT | PUT方法用来传输文件。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。 |
DELETE | 删除文件:请求服务器删除Request-URL所标识的资源 |
CONNECT | 用求用隧道协议连接代理,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 返回服务器针对特定资源所支持的HTTP请求方式。因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法,例如:DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。 |
HEAD | HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据。通常用于确认URI的有效性及资源更新时间等。 |
请求的常用配置详解:
请求行:
HTTP请求中的第一行数据。由: 请求方式 、 资源路径 、 协议/版本 组成(之间使用空格分隔)
● 请求方式:GET
● 资源路径:/brand/findAll?name=OPPO&status=1
● 请求路径:/brand/findAll
● 请求参数:name=OPPO&status=1
● 请求参数是以key=value形式出现
● 多个请求参数之间使用 & 连接
● 请求路径和请求参数之间使用 ? 连接
● 协议/版本:HTTP/1.1请求头:
1. Accept:指定客户端可接受的媒体类型,可以用来告诉服务器返回特定类型的内容。例如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp
2. Content-Type:指定请求体(Request Body)的媒体类型。常见的有 application/json、application/x-www-form-urlencoded、multipart/form-data等。
例如:Content-Type: application/json,这里在Springboot工程中,如果不确定是否使用@Requstbody注解,通常项目开发中会约定数据的传输格式,如果不确定是否使用json时,可以根据网络请求体的媒体类型来决定要不要将json数据封装成为对象。如果盲目使用@Requstbody可能会造成以下的异常:
HttpMessageNotReadableException: Required request body is missing
3. User-Agent:标识发起请求的客户端应用程序的软件和版本信息。通常用于统计和识别用户代理。例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
4. Authorization:用于在请求中发送认证凭据,通常用于身份验证。例如:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
5. Cookie:用于在请求中发送存储在客户端的 Cookie 数据。例如:Cookie: sessionId=abc123; userId=12345
6. Referer:指定请求的来源页面的 URL,用于一些安全策略和数据分析。例如:Referer: https://www.example.com/page1.html
7. Cache-Control:指定缓存机制和缓存策略。例如:Cache-Control: no-cache
8. If-None-Match:用于实现缓存验证机制,服务器会根据请求头中的 ETag 值判断资源是否需要重新发送。例如:If-None-Match: "686897696a7c876b7e"
9. Accept-Encoding: 支持的压缩类型,如:gzip, deflate, br
10.sec-fetch/ch- ?代表
sec-ch-ua:浏览器信息
sec-ch-ua-mobile:是否为移动设备
sec-ch-ua-platform:平台
sec-fetch-dest:表示请求的目的,期望需要什么样的资源
sec-fetch-mode:表明了一个请求的模式
request:一个浏览器的页面切换请求
navigate:仅在浏览器切换页面时创建,该请求应该返回HTML
sec-getch-site:一个请求发起者的来源与目标资源之间的关系,如果用户直接触发页面导航,例如在浏览器地址中输入地址,点击书签跳转等,就会设置为none
sec-getc-user:取值是一个Boolean类型的值
true(?1):表示导航请求由用户激活触发(鼠标点击/键盘)
false(?0):表示导航请求由用户激活以外的原因触发
upgrade-Insecure-requests:升级不安全的连接
在https页面中,如果调用了http资源,那么浏览器就会抛出以下错误,为了改变这一状况,chrome(谷歌浏览器)会在http请求中加入‘Upgrade-Insecure-requests:1’,服务器收到请求后会返回 "Content-Security-Policy: upgrade-insecure-requests" 头,告诉浏览器,可以把所属本站的所有http 连接升级为 https 连接
服务器向浏览器响应数据:
响应常用配置详解:
响应行:
请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本
● 请求方式:POST
● 资源路径:/brand
● 协议/版本:HTTP/1.1响应头:
1. Content-Type:指定响应体(Response Body)的媒体类型。常见的有 text/html、application/json、image/jpeg 等。例如:Content-Type: application/json
2. Content-Length:指定响应体的内容长度,以字节为单位。例如:Content-Length: 1024
3. Cache-Control:指定缓存机制和缓存策略。可以控制客户端和中间缓存服务器对响应内容进行缓存的方式。例如:Cache-Control: max-age=3600, public
4. Expires:指定响应的过期时间,告诉客户端该资源的有效期截止时间。例如:Expires: Wed, 01 Feb 2024 12:00:00 GMT
5. Last-Modified:指定响应资源的最后修改时间,用于实现缓存验证机制。例如:Last-Modified: Fri, 24 Jan 2024 10:00:00 GMT
6. ETag:指定响应资源的唯一标识符,也用于实现缓存验证机制。例如:ETag: "686897696a7c876b7e"
7. Set-Cookie:用于在响应中设置客户端的 Cookie 数据。例如:Set-Cookie: sessionId=abc123; Max-Age=3600; Path=/
8. Access-Control-Allow-Origin:用于允许跨域访问的源,设置为 * 表示允许所有域名跨域。例如:Access-Control-Allow-Origin: *
两者有什么区别?
区别方式 | GET请求 | POST请求 |
请求参数 | GET的请求参数在请求行中就有所体现,在上边请求配置详解中有提到,例:/brand/findAll? name=OPPO&status=1 | 请求参数在请求体中 |
请求长度 | 请求参数长度有限制(浏览器不同限制也不同) | 请求参数长度没有限制 |
安全性 | 安全性低。原因:请求参数暴露在浏览器地址栏中。 | 安全性相对高 |
相关文章:

浅析HTTP协议
首先,前端请求后端数据,后端响应数据给前端,这是我们大家都知道的,那其中所涉及到的数据传输协议又是什么呢?这个传输规范就是我们大名鼎鼎的HTTP协议! 什么是HTTP协议? HTTP(超文本…...

etcd未授权到控制k8s集群
在安装完 K8s 后,默认会安装 etcd 组件,etcd 是一个高可用的 key-value 数据库,它为 k8s 集群提供底层数据存储,保存了整个集群的状态。大多数情形下,数据库中的内容没有加密,因此如果黑客拿下 etcd&#x…...

制作一个简单的HTML个人网站
在当今数字化的世界里,拥有一个个人网站已经成为了展示个人品牌、分享作品和信息的必备工具。虽然有各种复杂的内容管理系统(CMS)和平台可以帮助我们快速搭建个人网站,但对于初学者或者想要了解更多技术细节的人来说,从…...

头歌C语言字符数组
目录 第1关:字符逆序 任务描述 相关知识(略) 编程要求 测试说明 第2关:字符统计 任务描述 相关知识(略) 编程要求 测试说明 第3关:字符插入 任务描述 相关知识(略) 编程要求 测试说明 第4关:字符串处理 任务描述 相关知识(略)...

【mongoDB】文档 CRUD
目录 1.插入文档 批量插入: 2.查询文档 3.更新文档 4.删除文档 deleteOne() deleteMany() findOneAndDelete() 1.插入文档 可以使用 insert () 方法或者 save() 方法向集合中插入文档 语法如下: db.collection_name.insert(document) collectio…...

每日一题——LeetCode1337.矩阵中战斗力最弱的K行
方法一 个人方法 排序 题目要求就是找出每行有多少个1,根据每行1的个数进行排序,但是是把每行在数组中的位置索引进行排序,并返回前k项 所以先统计每行1的个数,并将数组转化为[index,count]就是索引加个数的数组形式,…...

docker指令存档
目录 Docker 1、概念 2、架构图 3、安装 4、Docker怎么工作的? 5、Docker常用命令 帮助命令 镜像命令 1、查看镜像 2、帮助命令 3、搜索镜像 4、拉取镜像 5、删除镜像 容器命令 1、启动 2、查看运行的容器 3、删除容器 4、启动&停止 其他命令…...

Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据
Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言正文 引言 之前在 《pandas向已经拥有数据的Excel文件中添加新数据》 一文中我们介绍了如何通过 pandas 向 Excel 文件中写入数据。那么对于含有多表头的数据,我们该如何将它们…...

ChatGPT 和文心一言 | 两大AI助手哪个更胜一筹
欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步ÿ…...

flink学习之窗口处理函数
窗口处理函数 什么是窗口处理函数 Flink 本身提供了多层 API,DataStream API 只是中间的一环,在更底层,我们可以不定义任何具体的算子(比如 map(),filter(),或者 window()),而只是…...

Python 基于pytorch从头写GPT模型;实现gpt实战
1.GPT简介 GPT(Generative Pre-trained Transformer)模型是一种基于Transformer架构的生成式预训练模型,由OpenAI开发。它采用了无监督学习的方式进行预训练,然后通过微调适应特定的任务。GPT模型的结构由多层Transformer解码器组…...

2023年NOC大赛(学而思赛道)创意编程Python初中组决赛真题
2023年NOC大赛(学而思赛道)创意编程Python初中组决赛真题 题目总数:7 总分数:100 编程题 第 1 题 问答题 二进制回文 编程实现: 输入一个正整数,判断它的二进制形式是否是回文数,如果是输出True…...

头歌C++之Switch控制语句编程实训
目录 第1关:根据输入数字判断是星期几 本关必读 本关任务 测试说明 第2关:根据输入的数值和运算符做相应运算 本关必读 本关任务 测试说明 第3关:根据输入年月计算该月份的天数 本关必读 本关任务...

CNN卷积理解
1 卷积的步骤 1 过滤器(卷积核)(Filter或Kernel): 卷积层使用一组可学习的过滤器来扫描输入数据(通常是图像)。每个过滤器都是一个小的窗口,包含一些权重,这些权重通过训…...

DataKit迁移MySQL到openGauss
前言 本文将分享DataKit迁移MySQL到openGauss的项目实战,供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…...

Dockerfile里ADD * 保留原来的目录结构
1、问题 给新模块写Dockerfile,很多静态资源分散在各个目录,于是Dockerfile里我直接一句: ADD ./* /dest/镜像出来后,启动容器,进入容器种后发现:文件拷贝成功,但原来的目录结构都不在了&…...

C++ 利用容器适配器,仿函数实现栈,队列,优先级队列(堆),反向迭代器,deque的介绍与底层
C 利用容器适配器,仿函数实现栈,队列,优先级队列【堆】,反向迭代器,deque的介绍与底层 一.容器适配器的介绍二.利用容器适配器实现栈和队列1.stack2.queue 三.仿函数介绍1.什么是仿函数2.仿函数的使用3.函数指针的使用1.函数指针的用处2.利用函数指针完成回调3.利用仿函数完成回…...

C语言实战系列二:简单超市收银系统
从一个简单的超市收银系统,我们来练习一个系统如何设计,然后如何实现的思路。 在Ubuntu环境下使用C语言编写一个简单的超市收银系统。以下是一个基本的示例,涵盖了商品管理、购物车、交易处理等功能。 代码 #include <stdio.h> #inc…...

coding推送代码Jenkins自动构建部署
实现功能:我们向coding推送代码,通过webhook自动通知Jenkins,实现自动构建部署 coding 项目设置 / 开发者选项 / Service Hook 输入以下参数 发送POST请求服务 URL:htttp://xxx用户名:xxx密码:xxx Jen…...

Kettle-Docker部署+Sqlserver数据同步Mysql+Start定时任务
一. 背景介绍 1. ETL是什么 ETL(Extract-Transform-Load),即数据抽取、转换、装载的过程。它是一种思想,主要是说,从不同的数据源获取数据,并通过对数据进行处理(格式,协议等转换&a…...

《微信小程序开发从入门到实战》学习九十三
7.1 视图容器组件 7.1.3 swiper与swiper-item组件 swiper组件的显示效果如下图所示: indicator-dots、indicator-color和indicator-active-color三个属性用于设置swiper组件下方的指示点。设置指示点的颜色时,可以使用HexColor,也可以使用r…...

Java服务端使用freemarker+wkhtmltoimage生成Echart图片
目录 1.通过 freemarker 将ftl转成html 1.1 freemarker 手册: 1.2 添加freemarker maven依赖 1.3 添加 echart-test.ftl 模版文件 1.4 添加 FreemarkerTool 工具类 1.5 添加测试main方法 1.6 运行,生成echart-test-时间戳.html 文件 2. 通过wkhtmltoimage将html 转为p…...

一款颜值与实力并存的翻页时钟(免费)
FliTik是一款颜值与实力并存的翻页时钟,安卓端是完全免费的,无任何广告,极简风 ,软件默认是12小时制,可以在设置中启用24小时制,并且还支持设置显示秒钟、日期、文案,滴答声和语音报时。 支持横…...

Objective-C方法的声明实现及调用
1.无参数的方法 1)声明 a.位置:在interface括弧的外面 b.语法: - (返回值类型)方法名称; interface Person : NSObject -(void) run; end 2)实现 a.位置:在implementation中实现 b.语法:加大括弧将方法实现的代码写在大括孤之中 …...

第十四届蓝桥杯国赛 C++ B 组 C 题——班级活动(AC)
目录 1. 班级活动1. 问题描述2. 输入格式3. 输出格式4. 样例输入5. 样例输出6. 样例说明7. 评测用例规模与约定8. 原题链接 2. 解题思路3. AC_Code 1. 班级活动 前置知识点:思维,分类讨论 1. 问题描述 小明的老师准备组织一次班级活动。班上一共有 n…...

GraphQL的力量:简化复杂数据查询
1. GraphQL GraphQL 是一种由 Facebook 开发并于 2015 年公开发布的数据查询和操作语言,也是运行在服务端的运行时(runtime)用于处理 API 查询的一种规范。不同于传统的 REST API,GraphQL 允许客户端明确指定它们需要哪些数据&am…...

python环境安装sklearn及报错解决
安装 如刚开始安装,还未遇到问题请直接从重新安装库开始看,如果遇到报错,从问题开始看 问题 python安装sklearn报错 ,报错信息如下 File "<stdin>", line 1pip install scikit-learn^ SyntaxError: invalid s…...

log4j:WARN Please initialize the log4j system properly的解决办法
背景:很多次创建新项目log4j都出现以下2个警告: log4j:WARN No appenders could be found for logger (org.springframework.boot.ApplicationServletEnvironment).log4j:WARN Please initialize the log4j system properly 网上查询都是在说缺少以下jar…...

虹科分享丨汽车技术的未来:Netropy如何测试和确保汽车以太网的性能
来源:艾特保IT 虹科分享丨汽车技术的未来:Netropy如何测试和确保汽车以太网的性能 原文链接:https://mp.weixin.qq.com/s/G8wihrzqpJJOx5i0o63fkA 欢迎关注虹科,为您提供最新资讯! #汽车以太网 #车载网络 #Netropy …...

代码CE:reference to ‘XX‘ is ambiguous
代码CE:reference to ‘XX’ is ambiguous 今天提交代码的时候一直错误,CE,搞不明白明明在dev上成功,为什么提交失败。 现在懂了,因为定义的变量和C内部函数或变量重名了。修改之后即可AC。 int data[21][21]{0}; int maxsum[21…...