【网络原理】HTTP|认识请求“报头“|Host|Content-Length|Content-Type|UA|Referer|Cookie

目录

认识请求"报头"(header)

Host

Content-Length

Content-Type

User-Agent(简称UA)

Referer

💡Cookie(最重要的一个header,开发&面试高频问题)

1.Cookie是啥?

2.Cookie怎么存的?

3.Cookie从哪里来?

4.Cookie到哪里去/Cookie的作用

5.Cookie的一个典型应用场景:保存会话id


💡推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】


认识请求"报头"(header)

header的整体的格式也是"键值对"结构.每个键值对占⼀⾏.键和值之间使⽤分号分割.报头的种类有很多,此处仅介绍⼏个关键的.

Host

请求对应的主机ip和端口

Host对应的ip(/域名)和URL中的ip/域名正常情况是相同的

但是也存在不相同的情况:比如你通过代码构造http请求,URL写的是ip地址,作为目标服务器,但是host写的仍然是域名,反爬虫的时候一般会这样写,这样可以跳过一些校验规则

爬虫要绕开对方的反向代理服务器,反向代理可以给出一些缓存数据,也可能会进行一些校验,但这些校验就可能挡住你的爬虫程序


Content-Length

表⽰body中的数据⻓度.

一旦有body就需要知道body到底有多长,才知道一个完整的http请求

这样可以很好的解决粘包问题:1)分隔符 2)长度

GET请求,没有body,通过空行可以区分哪段是http请求

POST请求,有body,通过空行找到body开始,通过Content-Length找到body的结束位置

Content-Type

表⽰请求的body中的数据格式(就类似文章的文体)

通过HTTP协议,传输的数据有很多种类,图片,视频,音频,字体,html...这些不同的数据,浏览器/服务器就有不同的处理方式,图片,浏览器要能够显示出来;html,要渲染成网页;css,要加载成html的样式

常⻅选项:

(1)application/x-www-form-urlencoded:通过html的form表单构造,此时body的格式形如:

title=test&content=hello

(2)multipart/form-data:也是通过form表单构造(在form标签中加上enctyped="multipart/form-data"),但是通常用于提交图片/文件,body格式形如:

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw

------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"

title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png

PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

💡(3)application/json:数据为json格式.body格式形如:(后续开发中需要重点掌握的方式)

{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16

User-Agent(简称UA)

表示浏览器/操作系统的属性,形如:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)

Mozilla:开源组织,这个组织的成员参与了HTML/CSS/JS等前端技术标准的制定

Windows NT 10.0; Win64; x64:表示操作系统的信息,Windows NT是操作系统的内核,10.0是win10,Win64; x64表示是64位操作系统

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36:表示浏览器的信息(内核...)

UA里的信息主要是两个部分:1)浏览器版本 2)操作系统版本 

描述了用户,使用啥样的设备,打开你的网页

UA有啥用呢?

通过UA来实现“兼容”,作为网站的开发者,你的网站是否要包含图片?是否要包含视频?是否要包含js?开发者就可以根据UA判定用户的浏览器和系统是啥水平的,根据这里的版本信息,进行区分:如果是老版本,就只返回带文字的网页;如果是新版本,就返回各种功能都有的网页...

现在UA最主要的作用是用来区分当前的设备是电脑还是手机,如果是电脑,返回一个宽屏的网页;如果是手机,返回一个窄屏

可以用UA做区分,一些比较老的网站,是直接通过URL来区分的,使用UA区分不同的网页,意味着网站开发者就需要维护两套代码,因此程序员开发了一个新的技术“响应式布局”(前端),只写一套代码,这个代码能够根据你的设备尺寸(宽度),设置不同的样式,从而起到很好的适应各种设备的效果


Referer

表示当前的页面,从哪里跳转来的

如果是直接在地址栏输入URL/直接点击收藏夹中的网站,此时Referer就是空的

eg:广告投放时广告主可能有多个渠道投放,就需要能够区分,哪些请求是来自哪些渠道的,这就可以通过Referer来区分了. 但是也存在某个人把访问广告主服务器的请求的Referer给修改了,运营商(移动,电信,联通等..)完全有能力做这些,也就是“运营商劫持",为了从技术上进行”反制“,HTTPS就是重要的反制手段,HTTPS直接针对HTTP请求中的内容(包括这里的header进行加密),这里的加密就能够防止运营商进行篡改


💡Cookie(最重要的一个header,开发&面试高频问题)

1.Cookie是啥?

浏览器本地存储数据的一种机制(不是唯一的一种,只是典型的一种),现在的浏览器还有其他的方式也能本地持久化存储

Cookie中存储了⼀个字符串,键值对(这里的键值对本质上都是能够在客户端的硬盘上持久化保存的)格式的内容,和query string类似,都是程序员自定义的,这样程序员可以根据不同的需求,定义不同的数据,增加http的可拓展性

网页是运行在浏览器上的,默认情况下,一个网页不能直接访问用户的硬盘(直接操作很危险),但是有些网站确实需要在客户端这边存储一些必要的信息希望持久化存储(写到硬盘上,重启也还在),浏览器就给网页提供了特定的机制Cookie

Cookie机制不是让网页随意访问硬盘,网页对于你的硬盘没法直接读写,浏览器对于硬盘操作,做了特殊的封装,相当于提供了一个/一组特殊的文件,只能往这个特殊文件里写,并且你写的内容,也必须是键值对(键和值都得是文本)

2.Cookie怎么存的?

按照不同的域名,分别存储在硬盘上,不同的域名之间的Cookie互不干扰,键值对,存储文本,键值对都是用户自定义的

3.Cookie从哪里来?

服务器来,服务器的HTTP响应header中可以填写Set-Cookie字段,就会带有一些键值对

如果是一个新的浏览器,第一次访问某个网站,此时这个浏览器上对应的Cookie都是空着的,网站的服务器,就会返回一些HTTP响应...在这些HTTP响应中,就会包含Set-Cookie这样的header,就会把一些键值对,保存到浏览器的Cookie中

4.Cookie到哪里去/Cookie的作用

在后续请求中,通过HTTP请求的header中的Cookie字段,把信息传输给服务器,能够使客户端存储一些必要的“配置”等信息,从而让服务器提供更多的“个性化”的服务

eg:很多网站有主题,夜间模式/日间模式,我给这个网站设置了夜间模式,此时我关闭浏览器,过一会又打开,当然还是希望继续是夜间模式...形如上述的设置信息,必须是保存在我的浏览器里的,后续请求人家的网站,告诉服务器,我要日间/夜间...

5.Cookie的一个典型应用场景:保存会话id

Cookie中虽然很多键值对都是程序员自定义的,但是往往会有一个特殊的键值对,大部分网站都会有的key,用来标识用户的身份信息,也称为"令牌(token)",后续只要访问这个⽹站,就会⼀直带着这个令牌,直到令牌过期/下次重新登陆

eg:去医院不同的科室机械能就诊,都是提供就诊卡串起来的,就诊卡就只需要保存一个id即可,就诊卡中存储的id就称为id(sessionid)对应的,服务器上保存的,id以及相关的各种详细信息,就会称为会话(session)

这里的session从编程的角度:可以理解成一个类/对象,包含有哪些属性,方法,根据你的需求灵活存储的

将登陆的过程类比去医院就诊:

 (1) 到了医院先挂号.挂号时候需要提供⾝份证,同时得到了⼀张"就诊卡",这个就诊卡就相当于患者的"令牌".

(2)后续去各个科室进⾏检查,诊断,开药等操作,都不必再出⽰⾝份证了,只要凭就诊卡即可识别出当前患者的⾝份.

(3)看完病了之后,不想要就诊卡了,就可以注销这个卡.此时患者的⾝份和就诊卡的关联就销毁了.(类似于⽹站的注销操作)

(4)⼜来看病,可以办⼀张新的就诊卡,此时就得到了⼀个新的"令牌"

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

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

相关文章

在PostGIS中检查孤线(Find isolated lines in PostGIS)

场景 在PostGIS中有一张线要素表,需要检查该表中的孤线,并且进行自动纠正的计算。 其中孤线定义为两端端点都不在任何其他线的顶点上。 本文介绍在PostGIS中的线要素点,通过函数计算指定线要素表中的孤线,并计算最接近的纠偏位置。 In PostGIS, there is a table of line …

07-操作元素(键盘和鼠标事件)

在前面的文章中重点介绍了一些元素的定位方法,定位到元素后,就需要操作元素了。本篇总结了web页面常用的一些操作元素方法,可以统称为行为事件。 一、简单操作 点击按钮(鼠标左键):click()清空输入框&…

git冲突

git冲突的产生: 首先用户A新建一个文件conflict,并在里面添加内容 然后通过add,commit,push将该文件上传到远端仓库 然后用户B通过pull将程序拉下来之后,也在这个文档里面进行编辑,并且内容不一样 如果这个时候其中一个人push&…

PAT-1004 成绩排名(java实现)

这一关感觉还没第三关难,思路很清晰 题目 1004 成绩排名 读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行…

加密金字塔的秘密:「高层」的回报你无法想象

原文标题:《The Secrets of the Crypto Pyramid!》 撰文:DUO NINE⚡YCC 编译:Chris,Techub News 本文来源香港Web3科技媒体:Techub News 意外成为一名 KOL 让我有机会深入了解这个领域的运作机制。在这个行业的幕后…

优化基础(二):线性组合、仿射组合、锥组合、凸组合、线性集合、仿射集合、锥集合、凸集合的理解

文章目录 前言组合线性组合 (linear combination)仿射组合 (affine combination)锥组合 (conic combination)凸组合 (convex combination) 集合仿射集合凸集合 练习:哪个图形是凸的,哪个是仿射的?参考资料 前言 组合侧重于描述由一些基点生成…

ai虚拟主播自动切换的实现

前段时间,看到b站突然冒出很多ai主播,输入数字切换小姐姐.感觉挺有趣.思考了以下决定手动实现一下. 然后就陷入长达5天的踩坑中 由于是自建的webrtc服务器,很自然的想直接收流转发,这也是最优的方案, 然而实际上遇到许多不是很友好的bug, 然后再想使用rtp转发,依然不理想. 最后…

使用香橙派 AI pro 开发板生成卡通版的东契奇

引言 AI应用如火如荼,而嵌入式设备与AI的结合也是不可或缺的重要场景。香橙派 AI pro 开发板正是面向嵌入式AI场景而生。 这篇文章记录了对香橙派 AI pro开发板的试用体验。介绍了开发板的基础操作,以及对其中一个AI应用样例的体验,初步感受…

Docker安装Redis(云服务器)

准备: 在云服务器中开启6370端口号 docker run -d --name redis -p 6379:6379 redis 这条命令使用docker运行一个名为"redis"的容器,映射容器的6379端口到主机的6379端口,并且使用redis镜像来运行容器。REDIS是一个开源的内存数据…

记 Codes 开源免费研发管理平台 —— 日报与工时融合集中式填报的创新实现

继上一回合生成式全局看板的创新实现后,本篇我们来讲一讲日报与工时融合集中式填报的创新实现。 市面上所有的研发管理软件,大多都有工时相关功能,但是却没有日报功能,好像也没什么问题,但是在使用过程中体验非常不…

RandLA-Net 训练自定义数据集

https://arxiv.org/abs/1911.11236 搭建训练环境 git clone https://github.com/QingyongHu/RandLA-Net.git搭建 python 环境 , 这里我用的 3.9conda create -n randlanet python3.9 source activate randlanet pip install tensorflow2.15.0 -i https://pypi.tuna.tsinghua.e…

IDEA 安装BPMN插件-Activiti BPMN visualizer

IDEA安装BPMN插件 idea 18版本之前idea 18版本之后安装插件 推荐使用 Activiti BPMN visualizer插件注意 创建bpmn文件使用可视化面板 在可视化面板中右键可创建各种节点每个节点上都有连线 删除 设置的按钮 保存图片 idea 18版本之前 可以通过搜索插件actiBPMN直接安装 idea…

VBA代码解决方案第十四讲 如何利用VBA检查单元格中是否含有公式

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

如何格式化只读U盘?

U盘只读无法格式化,该怎么处理?别担心!本文将向你提供一些实用方法,助你解决U盘写保护的难题。这些方法能有效帮助你解除U盘的只读状态,从而可以顺利进行格式化和其他操作。 不能格式化只读U盘 “我购买了一个U盘&…

64位和32位对C++ 对long类型的使用造成程序崩溃、内存泄漏问题。

系列文章目录 1、理解32位和64位下long类型和int类型不同 2、理解release和debug版本编译的可执行程序的区别 3、谨慎在64位下对long类型与int类型去赋值和相互转换 文章目录 系列文章目录前言一、int、long类型二、使用步骤1.示例代码 前言 编译环境:qt -c、linu…

代码随想录算法训练营第三十二 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 讲解链接:https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.html 简单思路:逐个计算连续两天的股票差值,sum初始为零&…

SAP 物料的与压缩库存数据不一致

在测试系统中进行501和561增加库存的时候,系统提示物料的预压缩库存数据不一致的报错。 如下图所示: 首先想到的就是搜SAP的NOTES,找到了相关的两个note:293356 note:2197042 表示:数据库表 ACDOCA 和 ACDOCA_M_EXTRACT 之间的差异。 经过查询发现是由于物料分类账中的…

平衡二叉树的应用举例

AVL 是一种自平衡二叉搜索树,其中任何节点的左右子树的高度之差不能超过 1。 AVL树的特点: 1、它遵循二叉搜索树的一般属性。 2、树的每个子树都是平衡的,即左右子树的高度之差最多为1。 3、当插入新节点时,树会自我平衡。因此…

第N3周:Pytorch文本分类入门

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 本周任务: 文本分类流程图: 需要的环境: 数据集: TextClassificationModel模型介绍&#xff1a…

Java基础语法——字符串(String/StringBuilder/Stringjoiner)

String Java的String类是不可变的,意味着一旦创建,其值就不能被改变。String类提供了丰富的API来操作字符串。 以下是一些常用的方法: 构造方法: 有以下几种常见的: public class stringlearn {public static void…