深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法

活动发起人@小虚竹 想对你说:

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!

提醒:在发布作品前,请将不需要的内容删除。

各位看官,大家早安午安晚安呀~~~

如果您觉得这篇文章对您有帮助的话

欢迎您一键三连,小编尽全力做到更好
欢迎您分享给更多人哦

今天我们来学习-深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法

 2.HTTP的报文结构分析

请求和响应的报文结构大同小异

2.1.URL中各个字段的含义

片段标识符:

有的页面很长,就要分成很多片段,通过片段标识符就可以完成页面内部的跳转。(一般技术文档会这么搞。

关于 URLencode(就是转义字符,在UTF-8的基础上加上%)

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

例子:我搜索C++

C++就会转义成为

一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成, 虽然在 URL 中没有特殊含义, 但是仍然需要进行转义. 否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号然后就会造成解析错误

注意:

我们在使用URL的时候一定对query string 的内容进行urlcode操作,如果不处理号可能就会造成浏览器解析失败,导致请求无法正常进行!!!

2.2.HTTP协议请求方法(在请求头中):

看似很多方法,但是实际上我们一般只用到前两个(GET和POST),所以小编主要就是讲前两个

其中GET方法用的超过8成,POST自己占一成,其他方法公用一成(天下文才共十斗哈哈哈)

2.2.1.GET方法

GET方法的特点(一般用于获取数据,通常把要传给服务器的数据加到)

  • 首行的第一部分为 GET
  • URL 的 query string 可以为空, 也可以不为空.
  • body 可以为空,也可不不为空
  • GET请求是等幂的(建议)

2.2.2.POST方法

POST方法:一般用来登录或者上传文件(图片……)

这个就是在gitee上传头衔抓的包

上传头像的body比较长是因为:

图片本身就是二进制数据,此处把图片放到http请求中,往往要进行base64转码(针对二进制数据进行重新编码(转义)编码之后变成纯文本的数据。)

POST方法的特点

  • 首行的第一部分为 POST
  • URL 的 query string 一般为空 (也可以不为空)
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定.
  • POST请求一般是不幂等的

2.2.3GET方法和POST方法的区别

首先GET方法和POST没有本质区别(大家现在不是按照各个方法原本的语义来的)

但是还是有一定的差异,首先先给大家看几个相对正确的说法

但是接下来的说法就不对了

3.Header里面的一些键值对:

3.1.Content-Length和Content-Type

  • Content-Length:描述body中数据的长度
  • Content-Type:描述body数据的格式

只有请求中有body才会有这两个属性,GET请求一般没有body,POST请求中有body

Content-Length:确保了HTTP数据报的边界

  • 没有body的HTTP请求,直接用空行(分隔符)就把两个HTTP数据包分隔开来了
  • 有的,就加一个body数据的长度(确定这个数据报到哪里结束)

HTTP数据包在TCP的粘包问题也会得到很好的解决

HTTP在传输层极速依赖于TCP的,使用同一个TCP连接传输多个HTTP数据报,多个HTTP数据报就会在TCP缓冲区里面紧挨在一起,有了分隔符和COntent0-Length就明确了HTTP数据包之间的边界

Content-Type:

3.2.User-Agent(UA)

以前UA的主要功能,以及

  1. 以前,网页刚兴起的时候,很简单就是一些单纯的文字(浏览器功能也很原始)
  2. 然后,网页逐步发展,浏览器的功能也逐步升级可以支持图片,css(样式),js,多媒体,……(这个时候浏览器的迭代很快,但是新的浏览器诞生之后并不是全部占领市场,一般都是新老浏览器并存)
  3. 这个时候,网站开发者开发的时候就要考虑到不同版本的兼容性问题,我们就可以通过UA来区分不同版本的浏览器,譬如我第一代不支持图片,但是第二代支持图片(我们在开发网站的返回的网页时,给第二代返回一个图片,给第一代返回一个字符串——当前浏览器版本过低不支持显示图片,请升级到最新版本的浏览器)

现在UA主要的功能:
如今浏览器版本之间的差距就比较小了(UA的作用就没那么关键了),现在UA主要用来区分用户上网是PC端还是移动端

现在前端开发有个:“响应式网页”的编程技术同html可以很好的兼容不同的设备

什么是响应式网页编程呢?

响应式网页编程的关键就是让网页能够“感知”到设备的特性(比如屏幕大小),然后通过CSS和HTML的灵活布局,自动调整网页的外观和内容

就像手机上看一个16:9的图片竖着看的话就只能适应比例(只占据了屏幕的一小部分),但是电脑看就不用适应比例(电脑本身就是16:9)

3.3.Referer:描述了当前网页是从哪个网页跳转过来的

虽然是在网页上面,但是你在地址栏搜索或者点击搜藏中按钮都是内Referer的

拿我在百度搜索的抓包来看

referer一般是用来算钱的,可以把百度的referer的改成其他平台的referer,这样我们点击广告的钱就变成搜狗的了。这种情况以前很常见

一个事件就是“运营商劫持”

运营商可以在路由器上部署一些程序,就很容易获取到用户的HTTP请求并且进行修改~

所以这个时候就需要对HTTP协议进行加密,就算有人获取到了用户的HTTP请求,也无法进行解密(很困难)

3.4.Cookie

Cookie:浏览器在本地存储数据的一种方式。

现代浏览器设计时,会避免网页直接访问计算机的文件系统,因此,浏览器封装了操作文件的API,浏览器作为中间层,管理所有Cookie的读写操作。网页不能直接访问文件系统。

  1. Cookie里面放的都是一些键值对,一般是程序员自定义的(和query string差不多)。Coookie往往是从服务器返回的数据(也可以是页面自己生成的)
  2. Cookie存储在浏览器所在主机的硬盘上面,并且是按照域名进行存储的(每个域名下都有自己的Cookie,彼此之间不相互影响)

而且如今浏览器内部也嵌套了简单的数据库,也是一种本地存储的一种方式

4.HTTP响应首行中的状态码

状态码表

关于状态码418:

418状态码是HTTP RFC文档中专门规定的一个状态码,这个状态码没有实际的意义,是“彩蛋”的意思

3.如何构造一个HTTP请求?

  1. 直接在浏览器地址栏输入URL,就构造了一个请求(只不过我们没设定各个键值对),我们进行编程构造HTTP请求的时候大多数都是针对键值对做文章
  2. 通过一些特殊的html标签,触发HTTP请求(像img,a,link,script)
  3. 通过from表单只能构造GET和POST请求(from本质上也是一个HTML标签)
  4. ajax。通过js提供的api构造HTTP请求
  5. 通过图形化界面postman来构造请求(这个最方便)

接下来我们通过form表单的格式以及postman给大家演示一下from表单来构造GET/POST请求

但是一个前提是我们编写前端代码,要选择一个趁手的开发工具,我推荐VSCode,IDEA的话得是专业版的才行

VSCode下载路径

3.1.通过form表单的格式构造GET/POST请求

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>构造HTML的请求</html></HTml></title>
</head>
<body><form action="http://www.baidu.com/abc.html" method="get"><input type="text" name="key1"><input type="text" name="key2"><input type="text" name="key3"><input type="submit" value="提交"></form>
</body>
</html>

我们点击提交这个html页面

3.2.通过paotman构造HTTP请求

postman

具体步骤

如何构造?

然后我们点击send就构造好了

得到响应

最后,我们只要掌握了postman这个图形化的工具之后构造HTTP请求就完全不是问题了,还可以生成我们想要的格式的代码啦~~~

上述就是深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法的全部内容啦~~~

能看到这里相信您一定对小编的文章有了一定的认可。

有什么问题欢迎各位大佬指出
欢迎各位大佬评论区留言修正~~

您的支持就是我最大的动力​​​!!!

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

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

相关文章

SQL中体会多对多

我们可以根据学生与课程多对多关系的数据库模型&#xff0c;给出实际的表数据以及对应的查询结果示例&#xff0c;会用到JOINLEFT JOIN两种连接 1. 学生表&#xff08;students&#xff09; student_idstudent_name1张三2李四3王五 2. 课程表&#xff08;courses&#xff09…

【android】补充

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…

uv:Rust 驱动的 Python 包管理新时代

在 Python 包管理工具层出不穷的今天&#xff0c;pip、pip-tools、poetry、conda 等各有千秋。而今天要介绍的 uv&#xff0c;则是一款由 Astral 团队推出、采用 Rust 编写的全新工具&#xff0c;目标直指成为 “Python 的 Cargo”。它不仅在性能上表现优异&#xff0c;而且在功…

package.json版本前缀

前言 执行 npm i 下载依赖后&#xff0c;element-plus出现bug&#xff08;单页面多个date-picker同时开启&#xff09;&#xff0c;这是 v2.9.0 的问题&#xff0c;但是项目 package.json 中版本如下&#xff1a; "element-plus": "^2.7.6",乍一看并不是…

CSS+JS 堆叠图片动态交互切换

结合DeepSeek提供的代码&#xff0c;终于实现了堆叠两张图片动态循环切换&#xff0c;以下是代码&#xff1a; 通过绝对定位放了两张图片 <div class"col-lg-5" style"z-index: 40; position: relative;"><img src"images/banner_1.png&quo…

SpringCould微服务架构之Docker(2)

Docker和虚拟机的差别&#xff1a; 虚拟机是在操作系统中模拟硬件设备&#xff0c;然后运行另外一个操作系统。

好用的Markdown阅读编辑器Typora破解记录

Typora破解 一、下载Typora二、安装Typora三、破解Typora &#x1f600; 记录一下Typora破解记录&#xff0c;怕不常用忘记咯&#xff0c;感觉自己现在的脑子就像我的肠子一样&#xff0c;刚装进去就么得了。。。&#x1f614; Typroa算是用起来很舒服的Markdown阅读器了吧&am…

UI前端与数字孪生:打造智慧城市的双引擎

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 随着信息技术的飞速发展&#xff0c;智慧城市的概念逐渐从理论走向实践。智慧城市旨在通过运用物联网…

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…

k8s高可用集群安装

一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …

node.js笔记

1. Node.js基本概念 1.1 什么是Node.js Node.js是一个开源、跨平台的JavaScript运行环境&#xff0c;广泛应用于各类项目。它基于Google Chrome的V8 JavaScript引擎&#xff0c;性能卓越。 Node.js在单个进程中运行&#xff0c;利用异步I/O操作避免阻塞&#xff0c;能高效处…

关于在vscode中的Linux 0.11 应用程序项目的生成和运行

首先我们需要需要查看镜像文件 查看软盘镜像文件 floppyb.img 中的内容 在 VSCode 的“Terminal”菜单中选择“Run Build Task...”&#xff0c;会在 VSCode 的顶部中间位置弹出一个 可以执行的 Task 列表&#xff0c;选择其中的“打开 floppyb.img”后会使用 Floppy Editor …

【JavaScript 简明入门教程】为了Screeps服务的纯JS入门教程

0 前言 0-1 Screeps: World 众所不周知&#xff0c;​Screeps: World是一款面向编程爱好者的开源大型多人在线即时战略&#xff08;MMORTS&#xff09;沙盒游戏&#xff0c;其核心机制是通过编写JavaScript代码来控制游戏中的单位&#xff08;称为“Creep”&#xff09;&#…

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势&#xff0c;其引发的社会影响日益显著。尽管已有多种防御技术被提出&#xff0c;基于深度学习&…

SpringMVC_day02

一、SSM 整合 核心步骤 依赖管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 数据源、Jackson 等依赖。注意点&#xff1a;确保版本兼容性&#xff08;如 Spring 5.x 与 MyBatis 3.5.x&#xff09;。 配置类 SpringConfig&#xff1a;扫描 Service 层、启用事务管理、导入…

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差&#xff08;MMSE&#xff09;检测算法 4.4 迫零&#xff08;ZF&#xff09;检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …

CSS动画

目录 一、核心概念与语法 1. keyframes 关键帧 2. animation 属性 二、动画调速函数&#xff08;animation-timing-function&#xff09; 1. 预设值 2. 贝塞尔曲线 3. 步进函数&#xff08;steps()&#xff09; 三、动画控制与交互 1. 暂停与恢复 2. JavaScript 控制…

架构思维:预约抢茅子架构设计

文章目录 案例&#xff1a;预约抢茅子复杂度分析商品预约阶段等待抢购阶段商品抢购阶段订单支付阶段 技术方案商品预约阶段一、基于 Redis 单节点的分布式锁方案1. 核心流程2. 关键设计点 二、Redis 单节点方案的局限性1. 单点故障风险2. 主从切换问题 三、多节点 Redis 实现高…