HTTP的请求方法,空行,body,介绍请求报头的内部以及粘包问题

目录

一、GET与POST简介

二、空行和body

三、初识请求报头以及粘包问题

四、认识请求报头剩余部分


一、GET与POST简介

GET https://www.sogou.com/HTTP/1.1

请求报文中的方法,是最常规的方法(获取资源)

POST:传输实体主体的方法

一般来说方法的比重

GET占据八成

POST占据一成

其他的各种杂七杂八的方法一成

方法描述的语义:

GET:从服务器获取XXX💛

POST(常见语境登入,上传):从服务器传输一个XXX💙

但是后来人们都不咋遵守这个语义了

POST和GET主要区别🙆 🙆 🙆 

GET把一些自定义的数据放到QueryString里,body通常是空的

POST把一些自定义的数据放到body里,QueryString通常是空的

共性:都是传输到服务器,本质上没有任何区别,放到URL中QueryString用户可以看到,Body不可视。

经典面试题

上传和登入POST更多

本质上数据放到哪里都可以,二者可以相互替代,只需要记住

Body用户不可视(不可收藏)

QueryString:用户可视(收藏夹可以收藏)

网上部分错误说法: 💢 💢 💢

1.比较长的数据放到body中(用POST)原因:GET请求,URL有限制,规定了具体长度上限(1kb,2kb····老黄历,好久之前的事情了)

2。POST比GET安全,我们说的安全都是:容不容易被黑客截胡,就算POST只是让普通的用户看不到数据了,但是并不影响黑客操作,保证安全的关键是对传输的敏感数据进行加密

网上的部分需要注意的发言(不是很对): 💫 💫 💫

1.GET和POST语义不同

设计者最初是赋予了不同的语义,但是实践中不一定完全遵守

如:有的公司,不管你请求还是发送,都是POST

2.GET幂等,POST不是幂等

给你相同的输入,每次都是相同的输出就是幂等,每次输出的不相同就不是幂等(说是幂等其实更像是说你的产出不稳定,随时做出改变)(就像是百度不孕不育的广告,第一个地点肯定不是北京的医院而是你们当地的医院。

3GET请求可以被缓存,POST不可以被缓存

有的操作,比较耗时,与其每次都要重新计算,不如保存下来结果,在下次存的时候,去直接的获取他(但是获取的前提是幂等,换句话说,23放到一起更容易记住)

二、空行和body

空行,相当于一个分隔符分隔了header和body描述了body从哪里开始,body里格式,其实有很多种,此处body格式和之前说过的QueryString

body:encrypt key=password&utf8=%E2%9C%a3&anthenticy_token=jp%24subbyhwj

也是键值对,只不过经过了urlencode的,在登入场景中,这里就包含当前这次登入的用户名和密码等认证信息。

三、初识请求报头以及粘包问题

请求报头也是键值对结构,每一行是一个键值对,键与值之间使用,空格来分隔,例如:

Cookie:  xxxx(键和值之间存在空格)

QueryString(body中键值对,完全是程序自定义的,header中键值对,主要是标准规定的(有哪些值,对应的取值有哪些,当然他也会有自定义的部分)

Host:服务器主机地址和端口,Host内容,不实在URL中已经有了吗,为什么还要再去表示一遍呢

原因:HOST内容和URL是一致的,但是也有例外,如果用了代理,就不一定一样了。

Content-Length->描述了body长度是多少字节,有的有body,有的没有,如果没有body,这个字段可以没有,假如说有body,则这个字段就必须有。否则他就是一个非法的请求。

body从空行开始,数Content-Length这么长,就是body结束

这个长度Content-Length有没有让你想起一位经典呢——没错就是我们的TCP粘包问题,HTTP基于TCP来解决,当浏览器连续发起多个HTTP的请求的时候,或者服务器连续返回HTTP服务器的时候,服务器和浏览器如何区分,从哪里到哪里是一个完整的HTTP数据呢(这就是粘包问题,老方法 1:使用分隔符,2:使用长度,HTTP两个都有,假如是GET,没有Body使用空行来作为结尾标点,假如是POST,有Body,使用长度来区分结尾。

四、认识请求报头其他部分

Content-Type请求的Body中数据格式<->HTTP有多个用途,传输数据也有很多种类

主要分为以下三种:

1.application/x-www-form-urlended:Body的格式就和QueryString一样(登入请求)

2.multiport/form-data 一般上传文件/或者图片会是这种情况(当然也不绝对,码云上传的图片不是这种)

3.application/json:body是json格式

当然这是请求的格式,假如是响应可能更复杂如html:text/html····· image/jpg/applictaion/json/text/css都有可能的,通过Content-Type可以区分body格式是什么,尤其是浏览器,需要根据不同格式来决定如何处理 ,一个网站很多资源是固定不变的(css,图片,js很少变化)为了提高网站的加载速度,会第一次访问之后,把这些资源缓存在本地(也就是你浏览器的电脑硬盘上)下次访问,就不必重新访问网盘。

4.User-Agent(UA)

User-Agent:Mozila/5.0/windows NT 10.0;win64;x64 (操作版本系统, win64,就像是我的电脑ARM架构)AppleWebKit/537.36(KHTML ,like Gecko不用知道),Chrome/116.0.0.0 Safari/537.36

属于是旧时代的遗物了

新的浏览器支持的功能更多,旧的浏览器支持功能少,但是同一时刻,市面上有人使用新的浏览器版本,有人用旧的

如果你此时开发一个网站,是否会选择让他拥有更牛的功能呢?(假如是拥有了,新用户舒服了,但是老用户就无法使用了),聪明的猿们想了个办法:浏览器发送HTTP请求的时候,向服务器自报家门,告诉服务器,我是使用什么系统,什么浏览器上网,服务器可以根据该信息,区分对待。->(让他变的更兼容),UA主要区分的PC端/移动端(PC:电脑,移动端:手机)

Refer:描述了当前页面从哪里来,如果你里面通过浏览器地址直接输入URL,点击收藏夹打开的网页,这个请求带referer,但是如果你是点击了某人网页的内容,产生了跳转,就是referer。

一般广告主可能在多个网站投广告,广告主分别统计来自百度,搜狗,哪个来自哪个端搜索引擎,来给他们💰,当然你的refeerer是明文传输的前提。

当然了,这样也容易出现一种情况叫做“运营商劫持”,比如说来自搜狗的广告,你把它改成联通的,这样就会提高运营商的收入。

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

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

相关文章

CUDA C编程权威指南:1.1-CUDA基础知识点梳理

主要整理了N多年前&#xff08;2013年&#xff09;学习CUDA的时候开始总结的知识点&#xff0c;好长时间不写CUDA代码了&#xff0c;现在LLM推理需要重新学习CUDA编程&#xff0c;看来出来混迟早要还的。 1.CUDA 解析&#xff1a;2007年&#xff0c;NVIDIA推出CUDA&#xff08…

Boost程序库完全开发指南:1.2-C++基础知识点梳理

主要整理了N多年前&#xff08;2010年&#xff09;学习C的时候开始总结的知识点&#xff0c;好长时间不写C代码了&#xff0c;现在LLM量化和推理需要重新学习C编程&#xff0c;看来出来混迟早要还的。 1.const_cast <new_type> (expression)[1] 解析&#xff1a;const_c…

正则表达式贪婪模式和非贪婪模式

一、贪婪模式 贪婪模式表示尽可能多的匹配字符串&#xff0c;正则表达式六个量词元字符?、、*、{n}、{n,m}、{n,}默认是贪婪模式 接下来引入一个场景来分析说明 获取html a标签href属性的值 <a href"https://www.baidu.com/" attr"abc"></a>…

计算机竞赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …

2022年9月及10月

9月 1.Halcon12的HObject和Hobject halcon12 可以用HObject&#xff0c;也可以用Hobject&#xff0c;用法都一样 包括HalconCpp.h 如果附加目录中&#xff1a; C:\Program Files\MVTec\HALCON-12.0\include\halconcpp\ 在前面&#xff0c;则用 HalconCpp::HObject 如果附加目录…

springmvc-国际化中英文切换文件上传下载

1. 国际化 1.1 介绍 国际化(internationalization)&#xff0c; 简称国际化。一个产品支持国际化是指产品在无需做大的改变就能够适应不同的语言和地区的能力。i18n是指是一种让软件在开发阶段就支持多种语言的技术。 1.2 java.util.Locale 该类对象表示了特定的地理&#…

windows系统下pycharm配置anaconda

参考&#xff1a;超详细的PycharmAnconda安装配置教程_pycharm conda_罅隙的博客-CSDN博客 下载好anaconda安装后&#xff0c;比如我们安装在D盘anaconda文件夹下&#xff0c;在pycharm配置好环境激活时出现问题&#xff0c;可能是电脑没有配置环境变量 需要将一下4行添加到电…

C++入门-day01

一、认识C C融合了三种不同的编程方式 C代表的过程性语言在C基础上添加的类、结构体puls代表的面向对象语言C模板支持泛型编程 C完全兼容C的特性 Tips&#xff1a;侯捷老师提倡的Modren C是指C11、C14、C17和C20这些新标准所引入的一系列新特性和改进。在我们练习的时候也应当去…

TouchGFX之文本和字体

TouchGFX可将动态值作为文本的一部分来使用。 这可以通过在文本中使用通配符来实现。 按给定格式<*>指定通配符&#xff0c;其中的*表示不会包含在结果文本中的可选辅助文本。 一个文本中可以有至多2个通配符。 在TouchGFX 设计器中&#xff0c;只需单击“”按钮为所选文…

《机器学习实战》学习记录-ch2

PS: 个人笔记&#xff0c;建议不看 原书资料&#xff1a;https://github.com/ageron/handson-ml2 2.1数据获取 import pandas as pd data pd.read_csv(r"C:\Users\cyan\Desktop\AI\ML\handson-ml2\datasets\housing\housing.csv")data.head() data.info()<clas…

力扣:118. 杨辉三角(Python3)

题目&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官…

mysql技术文档--阿里巴巴java准则《Mysql数据库建表规约》--结合阿丹理解尝试解读--国庆开卷

阿丹&#xff1a; 国庆快乐呀大家&#xff01; 在项目开始前一个好的设计、一个健康的表关系&#xff0c;不仅会让开发变的有趣舒服&#xff0c;也会在后期的维护和升级迭代中让系统不断的成长。那么今天就认识和解读一下阿里的准则&#xff01;&#xff01; 建表规约 表达是…