HTTP协议报文的结构

如图在要将数据传输给服务器时,通常会将用到上图中的GEA等请求。

GET请求,通常会将要传给服务器的数据,加到url的query string中body中

还有POST请求,通常把要传给服务器的数据加入到body中。

上述都是习惯用法(都是不是强制要求,可以不遵守比如)。

总共有上述方法,但是经常用的只有GET和POST方法其他方法基本上不用。

GET和POST的区别

GET和POST没有本质区别(双方可以替换对方的应用场景)

在使用习惯上存在差异

1.GEI经常是把传递给服务器的数据放到query string 中; POST则是经常放到body中. (使用习惯上最大的差别)
(上述情况并非绝对,GET也可以使用body,POST也可以使用query string.使用的前提是客户端/服务器都得按照一样的方式来处理代码)

2.语义上的差异.(虽然语义上HTTP的使用是比较混乱的,但是相比之下,GET和POST还是比较明确的)
GET大多数还是用来获取数据
POST大多数还是用来提交数据(登录+上传)

三条错误的说法
1.GET请求能传递的数据量有上限,POST传递的数据量没有上限.

早期版本的浏览器(由于硬件资源不足),针对GET请求的URL的长度做出了限制.
实际上,RFC标准文档中并没有明确规定URL能有多长
目前的浏览器和服务器的实现过程中, URL可以非常长的.(甚至说可以使用URL传递一些图片这样的数据

2.GET请求传递数据不安全.POST请求传递数据更安全   

如果使用GET请求来实现登录
点击登录的时候,就会把用户名和密码放到url中,进一步的显示到浏览器地址栏里.(不就被别人看到了吗)相比之下,POST 则是在body中,不会在界面上显示出来,所以就更安全

(通常说的“安全”指的是你传递的数据,不容易被黑客获取.或者被黑客获取到之后,不容易被破解)

3.GET 只能给服务器传输文本数据.POST可以给服务器传输文本和二进制数据.

1)GET也不是不能使用body(body中是可以直接放二进制的)
2) GET也可以把二进制的数据进行base64转码,放到url的query string 中.

1.GET请求是幂等的.POST请求不是幂等的.
(幂等是一个数学概念就是输入相同的内容,输出是稳定的)也就是说这种请求很稳定出现错误的情况很低.

GET和POST具体是否是幂等,取决于代码的实现GET是否幂等,

也不绝对.只不过RFC标准文档上建议GET请求实现成幂等的

如B站的每次进入B站之后的请求不可能是幂等,如果幂等那么每次视频都一样违背了他做视频网站的初心。

2.GET请求可以被浏览器缓存,POST不可以被缓存

幂等性的延续.如果请求是幂等,自然就可以缓存

3.GET请求可以被浏览器收藏夹收藏,POST不能收藏,收藏的时候可能会丢失 body

Header

Header里的键值对是很多的.以下是其重要键值对的一部分


这个信息也是存在于url中。

但是,在使用代理的情况下,
Host的内容是可能和url中的内容不同的.

body中的数据格式

body的数据长度

只有请求中有body,才会有这两个属性

通常情况下GET请求没有body; POST请求有body

body中的格式,方式很多        

请求:
1. json
2. form表单的格式

3. form-data的格式

响应:
1.html

2.css

3. js

4. json

5.图片

后续给服务器提交给请求,不同的Content-Type,服务器处理数据的逻辑是不同的
服务器返回数据给浏览器,也需要设置合适的Content-Type,

浏览器也会根据不同的Content-Type做出不同的处理
 

TCP涉及到粘包问题.
HTTP在传输层就是基于TCP的.
使用同一个TCP连接,传输多个HTTP数据包, 此时,就会使多个HTTP数据包在TCP接收缓冲区中挨在一起.
接收方解析的时候,就需要能够清楚HTTP数据包之间的边界.
对于GET这种没有body的请求,直接使用空行(分隔符)
对于POST这种有body的请求,就结合空行和Content-Length

User-Agent(简称UA)

其描述了使用什么设备来进行上网

很早以前,网页非常简单,就只是一些单纯的文字.浏览器功能也比较原始.
后来,网页内容越来越丰富了,浏览器的功能也开始逐渐升级.

1)显示图片2)支持样式3)支持js4)支持多媒体5等

由于这个升级过程很快的.(新的浏览器出现的很快)
新的浏览器诞生之后,并不是立即就占据全部市场.相当一部分时间里新浏览器和旧浏览器,并存的.

网站的开发者就遇到困难了.网站并发者就需要考虑到,是否要兼容旧版本浏览器?

事实上,可以使用User-Agent来进行区分的.
由于UA中记录了浏览器的版本.哪个版本的浏览器都支持哪些特性,
网站开发者就可以通过看UA里的内容来进行区分

现在,浏览器之间的差异非常小了.此时,UA的作用就没那么关键了.

现在UA主要是用来区分PC端还是移动端

Referer

描述了当前页面是从哪个页面跳转来的.

如果是直接在地址栏输入url(或者点击收藏夹中的按钮)都是没有Referer.




 


cookie

Cookie可以认为是浏览器在本地存储数据的一种机制.

浏览器的数据来自于服务器.
浏览器后续的操作也是要提交给服务器的.
服务器这边管理了一个网站的各种核心数据

在程序运行过程中,会有一些数据,需要在浏览器这边存储的.并且在后续请求的时候数据可能需要再发给服务器上次登陆时间.上次访问时间.用户的身份信息.累计的访问次数等

(临时性的数据.存储在浏览器比较合适的.)

实际上更容易想到的是,把这样的数据直接存储到本地文件中~~
但是实际上不可行的.浏览器为了考虑到安全性禁止网页直接访问你的电脑的文件系统中也就无法直接生成一个硬盘的文件来存储数据了.

怕访问某个网站,结果网页里有病毒,读取到个人隐私.

为了保证安全性,又能进行存储数据,于是就引入了Cookie
(也是按照硬盘文件的方式保存的,但是浏览器把操作文件给封装了网页只能往Cookie中存储键值对)

Cookie往往是从服务器返回的数据(也可以是页面自己生成的)

Cookie的值每次登入网页会进行刷新来改变上一次保存的信息。
Cookie存储到浏览器所在主机的硬盘上.并且是按照域名为维度来存储的.
(每个域名下可以存自己的Cookie,彼此之间不影响)

Cookie是按照键值对的形式来组织的.这里的键值对也都是程序猿自定义的(和query string差不多)
后续再请求这个服务器的时候,就会把Cookie 中的内容自动代入到请求中,发给服务器.

服务器通过Cookie的内容做一些逻辑上的处理.


 

键值对之间,使用;分割.键和值使用=分割,这些内容就是浏览器本地存储的cookie,都会再后续请求服务器的时候,把这些内容给代入到请求中,传给服务器
 


 





 


 


 


 


 


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥集训之斐波那契数列

蓝桥集训之斐波那契数列 核心思想&#xff1a;矩阵乘法 将原本O(n)的递推算法优化为O(log2n) 构造1x2矩阵f和2x2矩阵a 发现f(n1) f(n) * a 则f(n1) f(1) * an可以用快速幂优化 #include <iostream>#include <cstring>#include <algorithm>using na…

ES13 学习

文章目录 1. 私有属性和方法静态代码块 2. 最外层的await3. at 函数4. 正则匹配的开始和结束索引5. findLast() 和findLastIndex()6. Error 对象的Cause 属性 1. 私有属性和方法 ES13 的改进之处&#xff1a; 创建对象时&#xff0c;如果有不需要外界传参进来的属性&#xff…

PCIe 7.0|不要太卷,劝你先躺平

PCIe 6.0都已经发布了2-3年了&#xff0c;目前业内生态还没完全建立。甚至很多人都还没用上PCIe 5.0呢&#xff01; 近日&#xff0c;PCIe 7.0 ver0.5版本已经开放&#xff0c;同时宣布马不停蹄准备在2025年完成正式SPEC规范发布。 回顾PCIe 7.0变更&#xff0c;PCI-SIG在2022年…

Google视觉机器人超级汇总:从RT、RT-2到AutoRT、SARA-RT、RT-Trajectory

前言 随着对视觉语言机器人研究的深入&#xff0c;发现Google的工作很值得深挖&#xff0c;比如RT-2 ​想到很多工作都是站在Google的肩上做产品和应用&#xff0c;​Google真是科技进步的核心推动力&#xff0c;做了大量大模型的基础设施&#xff0c;服 故有了本文&#xf…

从概念到实践:探索独立站在当代电商中的关键作用

随着数字化时代的到来&#xff0c;电子商务已成为全球商业生态的核心组成部分。在这个不断变化的市场中&#xff0c;独立站作为企业建立在线身份和拓展业务的强大工具&#xff0c;正逐步展现出其不可替代的价值。 从概念到实践&#xff0c;本文将深入探索独立站在当代电商中的关…

C语言中strcpy函数的实现

C语言中strcpy函数的实现 为了便于和strcpy函数区别&#xff0c;以下命令为_strcpy。 描述&#xff1a;实现strcpy&#xff0c;字符串拷贝函数&#xff0c;函数原型如下&#xff1a; char* strcpy(char* _Destination, const char *_Source);_strcpy实现&#xff1a; char*…

01-​JVM学习记录-类加载器

一、类加载器子系统 1. 作用-运输工具&#xff08;快递员&#xff09; 负责从文件系统或者网络中加载Class文件&#xff08;DNA元数据模板&#xff09;&#xff0c;Class文件开头有特定标识&#xff0c;魔术&#xff0c;咖啡杯壁&#xff08;class文件存于本地硬盘&#xff0c…

169.乐理基础-调式板块总结、调式判断

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里&#xff0c;这里面有五线谱对应的音名&#xff0c;对比着看 如果不认识调号去看112.五线谱的调号&#xff08;一&#xff09;、113.五线谱的调号&#xff08;二&#xff09;、114.快…

华为激光雷达真的遥遥领先吗?华为激光雷达详细拆解和系统方案分析(55图)

华为作为中国自动驾驶技术第一梯队的卓越代表&#xff0c;其激光雷达产品也备受瞩目&#xff0c;不过关于华为激光雷达的公开资料非常少&#xff0c;即便是有也非常粗略。 本文通过详细拆解华为96线激光雷达产品&#xff0c;尝试分析华为激光雷达的技术方案&#xff0c;并通过…

提取word文档里面的图片

大家好&#xff0c;我是阿赵。   阿赵我写博客的时候的习惯是&#xff0c;先用word文档写好&#xff0c;然后再把word文档里面的图片另存&#xff0c;最后再在博客里面复制正文和上传图片。   而我写的文章一般配图都比较多&#xff0c;所以经常要做的一个功能就是另存图片…

Kubernetes 高可用性入门:初学者指南

Kubernetes 高可用性解释 引言一、需要 Kubernetes 高可用性二、Kubernetes 控制平面的高可用性2.1、etcd2.2、API 服务器2.3、Kube 调度器2.4、Kube 控制器管理器2.5、云控制器管理器 三、工作节点的高可用性四、Kubernetes 集群可用性度量五、Kubernetes 可用性常见问题六、总…

基于java 的高校设备管理系统

摘要 高校是培养人才的重要场所&#xff0c;拥有大量的设备和器材&#xff0c;如实验室设备、学生宿舍设备、教学设备等&#xff0c;这些设备的管理对于高校事业的顺利发展起着至关重要的作用。随着高校信息化建设的不断深入&#xff0c;高校设备管理已逐渐成为学院日常教学环…

蓝鲸6.1 CMDB 事件推送的开源替代方案

本文来自腾讯蓝鲸智云社区用户&#xff1a;木讷大叔爱运维 背景 在蓝鲸社区“社区问答”帖子中发现这么一个需求&#xff1a; 究其原因&#xff0c;我在《不是CMDB筑高墙&#xff0c;运维需要一定的开发能力&#xff01;》一文中已经介绍&#xff0c;在此我再简单重复下&#…

Apache Pulsar源码解析之Lookup机制

引言 在学习Pulsar一段时间后&#xff0c;相信大家也或多或少听说Lookup这个词&#xff0c;今天就一起来深入剖析下Pulsar是怎么设计的它吧 Lookup是什么 在客户端跟服务端建立TCP连接前有些信息需要提前获取&#xff0c;这个获取方式就是Lookup机制。所获取的信息有以下几种…

[机器学习]人工智能为小米智架保驾护航

前言 小米汽车作为小米集团进军汽车行业的新尝试&#xff0c;吸引了广泛的关注。其结合了小米在科技和创新方面的优势&#xff0c;以及对智能出行的愿景&#xff0c;为汽车行业注入了新的活力。虽然小米汽车工厂还处于初期阶段&#xff0c;但其积极采用人工智能和机器学习等前沿…

基于Pytorch+昇腾NPU部署baichuan2-7B大模型

一、模型介绍 Baichuan 2 是百川智能推出的新一代开源大语言模型&#xff0c;采用 2.6 万亿 Tokens 的高质量语料训练。Baichuan 2 在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。 它基于 Transformer 结构&#xff0c;在大约1.2万亿 tokens…

docker进行jenkins接口自动化测试持续集成实战

文章目录 一、接口功能自动化测试项目源码讲解二、接口功能自动化测试运行环境配置1、下载jdk&#xff0c;maven&#xff0c;git&#xff0c;allure并配置对应的环境变量2、使用docker安装jenkins3、配置接口测试的运行时环境选择对应节点4、jenkins下载插件5、jenkins配置环境…

解决element-plus table组件 fixed=“right“(left)浮动后横向滚动文字穿透的问题

BUG 版本&#xff1a;element-plus 2.6.1 浏览器&#xff1a;360极速浏览器22.1 (Chromium内核) 组件&#xff1a;el-table组件 问题&#xff1a;在头部/尾部浮动加上斑马条纹后&#xff0c;横向滚动存在文字穿透的问题。具体如图&#xff1a; 白色背景行的文字&#xff0c…

【关于窗口移动求和的两种计算方法】

窗口移动计算方法 例子方法1方法2运行结果: 例子 在很多算法中都会涉及到窗口滑动&#xff0c;比如基于新息序列更新的自适应卡尔曼滤波器算法中便会使用到。 已知一个数列&#xff1a;OCV [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15]&#xff0c;定义窗口长度为5&#xff0c;每次…

Python自带的集成开发和学习环境IDLE 中安装工具包的pip文件修复和重置解决方法————以win 7系统下Python 3.8 32-bit为例

Python自带的集成开发和学习环境IDLE 中安装工具包的pip文件修复和重置解决方法————以win 7系统下Python 3.8 32-bit为例 目录 Python自带的集成开发和学习环境IDLE 中安装工具包的pip文件修复和重置解决方法————以win 7系统下Python 3.8 32-bit为例一、IDLE简介和特点…