网络原理——http/https ---http(2)

http(接上一篇文章)

认识请求报头"header"

header里面的键值对,都是标准规定的内容,很多,我们主要是认识一些关键的

host

表示对应的服务器主机的IP / 域名
在这里插入图片描述
实际上,这两个通常来说是一样的
但是有些时候不一样
当我们通过代码构造http请求,url里面写的以Ip地址的格式作为目标服务器,但是host写的任然是域名,此时就会出现不一致

Content-Length

表示的是body里面的数据长度
一旦有body,就需要知道 body到底有多长,才能够早知道一个完整的http请求

这个变量同时也解决了"粘包问题"

在http请求报文里面,解决"粘包问题"是通过两种方法来实现的
(1)分隔符 对于get请求来说,没有body的时候,header后面的空行就是一个分隔符
(2)长度,当有body的时候,通过空行找到body开始的位置,通过长度确定body结束的位置

Content - Type

表示body是哪种数据类型

通过http请求,我们可以传输的数据有很多,图片 /视频/ 音频 / 字体/ html/json /css…
就需要通过 Content-type来做出区分

常见选项有:
application/x-www-form-urlencoded:form
–表单提交的数据格式.此时 body 的格式形如:

title=test&content=hello

multipart/form-data: form
表单提交的数据格式(在 form 标签中加上enctyped=“multipart/form-data”.通常用于提交图片/文件.body 格式形如:

 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKcBY7ghFd3Trw
 
------WebKitFormBoundaryrGKCBY7ghFd3TrwA4 
Content-Disposition:form-data;name="text'

title
 ------WebKitFormBoundaryrGKCBY7ghFd3TrwA
 Content-Disposition: form-data; name="file"; filename="chrome.png'
 Content-Type:image/png
 
 PNG ... content of chrome.png ...
 ------WebKitFormBoundaryrGKcBY7ahEd3TrwA--

application/json: 数据为 ison 格式. body 格式形如:

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

一个请求里面,可能会有body

一旦有,那么length 和 type就必须存在,没有的话就不存在

User - Agent(简称UA)

表示浏览器 + 操作系统的属性

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

其中, (Windows NT 10.0; Win64; x64) 表示操作系统

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0表示 浏览器信息

UA主要表示的就是两个部分(操作系统版本+浏览器版本)
就是描述了用户用的什么设备打开当前网页

那么UA有什么用呢??

以前的用处就是 通过UA来实现兼容
在很久以前,浏览器发展非常迅速,在同一个时间就可能存在多个版本的浏览器,有的用户用的是老版本,有的是新版本

二者之间功能差异很大

开发者就可以通过UA来判断用户的浏览器和系统是什么水平的,返回对应的内容

至于现在的浏览器,都是大同小异的

而现在的UA主要是用来区分,当前访问的设备是电脑还是手机

如果是电脑,就返回一个宽屏的网页

如果是手机,就返回一个窄屏的网页

但是使用UA区分就意味着,网站开发者就需要维护两套代码

于是就诞生了"响应式布局",只写一套代码,就能根据你设备的尺寸,设置不同的样式,适应各种设备

referer

表示当前页面是从哪里跳转过来的
如果是直接在浏览器地址栏里面输入 URL 那么此时的referer就是空的

在这里插入图片描述
此时就表示,这个此时是从搜狗主页跳转过来的

Cookit
Cookie: 
sensorsdata2015jssdkchannel=%7B%22prop%22%3A%7B%22_sa_channel_landing_url%22%3A%22%22%7D%7D; 
user_locale=zh-CN;
oschina_new_user=false; 
remote_way=http;
slide_id=10; 
visit-gitee--2024-05-20=1; 

Cookie也是键值对的格式,和query string类似,都是程序员自定义的

Cookie这个的键值对,本质上都是要能够在客户端这边的硬盘上持久化保存的

但是网页是运行在浏览器上的,默认情况下,一个网页是不能够随意访问用户的硬盘的(直接操作就很危险)

但是有的网站确实是需要在用户这边存下必要的信息
希望能够持久化存储(就是写到硬盘上,即使是重启也还存在)

于是浏览器就给网页提供了特定的机制,也就是Cookie
Cookie机制不是让有服务器/网页随意的访问用户的硬盘,而是做了封装.相当于专门提供了一组文件
限制了只能往这些特殊文件里面去写,还限制了格式,只能是 键值对,不能是其他的

那么Cookit具体是怎么存的呢??
浏览器会根据不同的域名,每个网站都会有自己的一份Cookit(不同网站之间是不会有影响的)
如果你的浏览器第一次访问某个网站,那么第一次访问的时候,网站的服务器返回的htpp响应里面,就会包含set-Cookie这样的header,此时就会将一些键值对,保存在浏览器提供的Cookie里面

在这里插入图片描述
此时就会保存在浏览器的cookie里面
在这里插入图片描述

Cookie保存在浏览器之后,后续访问该网站的时候,就会在请求header中,把之前保存的这些Cookie键值对给带入进去,即还是要返回给服务器

Cookie本来就是从服务器来的,为啥还要返回给服务器??

这是因为,一个服务器是要面对很多客户端的

每个客户端有自己的偏好,此时就需要让每个客户端都保存好这样的数据,以备告诉服务器

就比如很多网站设置了夜间模式,此时关闭浏览器后,再次访问这个网站,还是希望是 夜间模式

形如上述的设置信息,必须是保存在我的浏览器里面的,后续请求这个网站,就告诉网站服务器,我要日间 / 夜间

此时网站用户很多,有的人用日间,有的人用夜间,大家的浏览器就分别存储了不同的这样的信息

Cookie里面虽然很多都是程序员自定义的,但是往往会有一个特殊的键值对,大部分网站都会有的key,是用来标识用户的身份信息

在这里插入图片描述

http响应里面的一些信息

状态码

就是描述了这次http请求是否成功,以及失败的原因是什么
其中有几个比较关键的

  • 200 OK 表示这次访问是成功了

  • 404 Not Found 表示客户端请求的资源在服务器这边不存在

  • 403 Forbidden 表示客户端权限不足,被禁止访问了

  • 405 Method Not Allowed 表示请求的方法,服务器不支持

  • 500 Internet Server Error 服务器内部错误(bug)

  • 504 Gateway Timeout 服务器访问超时了
    这里的Gateway指的就是网关
    要访问的服务器可能是 很多台,此时就会有一个入口服务器,就是所谓的网关服务器
    这种问题常见于 “服务器比较繁忙的情况”

  • Move temporary
    表示临时重定向
    比如访问某个地址的时候,访问的是旧地址,自动跳转到新地址上去

在这里插入图片描述

  • Move Permanently
    访问的旧地址和新地址之间的映射关系就确定了

此时浏览器就会缓存这样的结果

后续再次访问旧地址的时候,浏览器就可以直接构造出 新地址的请求,就减少一次 http访问了

但是如果使用的是302作为重定向,临时重定向,旧地址是否要重定向,以及重定向到哪里,就是可变的,因此每次访问旧地址,就都要使用旧地址访问服务器,获取到响应的Location属性再跳转

什么时候使用301?? 服务器迁移了.域名更新了,就可以使用301

设置字符集

设置Content-type不仅可以指定响应的数据的类型,还可以指定响应数据的字符集

如果响应数据出现乱码,就可以在这里设置好 字符集,确保数据的字符集和页面显示方式的编码是一样的

通过工具构造http请求

除了通过代码的方式来构造请求之外,还可以通过专门的工具来构造请求,更加简单.方便

尤其是做一些测试类的工作

如使用postman

在这里插入图片描述

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

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

相关文章

企业使用人工智能创建营销内容的8种实践

企业使用人工智能创建营销内容的8种实践 原文作者:朱丽叶约翰 编辑:数字化营销工兵 内容营销人员是第一批从“只玩人工智能”转变为“在日常工作中使用人工智能”的人。为了了解人工智能内容创作的哪些部分影响最大,我询问了其他营销人员如…

论文阅读笔记(十一)——BioInformatics Agent (BIA)

论文阅读笔记(十一)——BioInformatics Agent (BIA): Unleashing the Power of Large Language Models to Reshape Bioinformatics Workflow 目录 论文阅读笔记(十一)——BioInformatics Agent (BIA): Unleashing the Power of Large Language Models to Reshape Bioinformatic…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷7(私有云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

IP协议1.0

基本概念: • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…

微博增强-tampermonkey脚本实现网页管理悄悄关注

不是很明白微博为什么不出个x的列表功能,毕竟现在信息洪流,有些东西只是要看要了解,但不希望天天在首页轰炸眼睛,扰乱心智。 这个tampermonkey脚本适配了pc web和手机pwa版本(weibo.com/m.weibo.cn),解决了…

【LeetCode算法】第104题:二叉树的最大深度

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路:二叉树的先序遍历。首先判断根节点是否是空,其次判断根节点是否是叶子节点,再者递归获取左子树的深度、右子树的深度,最后返回左子…

设计模式(十二)行为型模式---模板方法模式(template)

文章目录 模板方法模式结构优缺点UML图具体实现UML图代码实现 模板方法模式 模板方法模式(Template Method)是一种基于继承实现的设计模式,主要思想是:将定义的算法抽象成一组步骤,在抽象类中定义算法的骨架&#xff…

HOW - BFF 服务实践系列(一)

目录 一、BFF 介绍1.1 BFF 的概念1.2 为什么需要 BFF1.3 举例说明 二、适用于Web前端的BFF应该提供哪些能力2.1 接口聚合(重要)2.2 简化和优化的API2.3 安全和身份验证(重要)2.4 缓存机制2.5 错误处理和重试机制2.6 数据格式转换2…

(ISPRS,2023)RS-CLIP: 基于对比视觉-语言监督的zero-shot遥感场景分类

文章目录 相关资料摘要引言方法CLIP回顾伪标签生成课程学习策略 实验数据集不同文本提示失败案例分析课程学习zero-shot分类 相关资料 论文:RS-CLIP: Zero shot remote sensing scene classification via contrastive vision-language supervision 摘要 零样本遥…

未来已来:Spring Boot引领数据库智能化革命

深入探讨了Spring Boot如何与现代数据库技术相结合,预测并塑造未来的数据访问趋势。本书不仅涵盖了Spring Data JPA的使用技巧,还介绍了云原生数据库的概念,微服务架构下的数据访问策略,以及AI在数据访问层的创新应用。旨在帮助开…

视频搬运的素材网站有哪些?打包好的视频素材在哪找?

短视频创作的朋友们,欢迎进入这个充满创意的世界!如果你曾为找不到合适的素材而苦恼,那么今天就让我为你介绍几个能够快速丰富你视频内容的素材平台。无论是为了搬运视频还是寻找灵感,下面这些网站都将是你的强力助手。特别地&…

lammps金刚石三棱锥刀具建模

大家好,我是小马老师。 本文介绍lammps三棱锥刀具建模方法。 lammps切削模拟的刀具形状有很多,如球形、锐角、钝角、三棱锥等刀具。 球形、锐角、钝角等刀具建模已经在公众号发过,本文介绍三棱锥的建模。 形状如下图所示: 主要原…

探索 Vue Devtools 4.0 的新世界!

大家好,我是前端宝哥。Vue Devtools 4.0 版本带来了一系列激动人心的新特性和改进,让我们一起来探索这些更新亮点! 宝哥省流版: 🛠 直接编辑组件数据,实时预览变更效果。⚙️ 快速编辑功能,一键…

使用python实现超市购物系统(一个小例子)

可以增加其他功能,这里就展示一个小的例子~

git基本使用——回退,撤销add,commit,合并分支

学习笔记 笔记中表格中的—— 表示需要回退的地方,也就是使用命令之后会改变的地方 网页软件分享 这是一个非常好用web端笔记画图软件,解决了typora画图不方便的问题

【评价类模型】Topsis

综合赋权法:Topsis法: 主要适用情况:题目提供了足够的评价指标和数据,数据已知,评价指标的类型差异较大 基本思想:将所有方案与理想解和夫理想解进行比较,通过激素那方案与这两个解的举例去欸的…

mysql面试之分库分表总结

文章目录 1.为什么要分库分表2.分库分表有哪些中间件,不同的中间件都有什么优点和缺点?3.分库分表的方式(水平分库,垂直分库,水平分表,垂直分表)3.1 水平分库3.2 垂直分库3.3 水平分表3.4 垂直分表 4.分库分表带来的问题4.1 事务一致性问题4.2 跨节点关联…

pandas添加行

方法1(df.append()) import pandas as pd# 创建一个空的DataFrame df pd.DataFrame(columns[Column1, Column2])# 新增一行数据 data {Column1: Value1, Column2: Value2} df df.append(data, ignore_indexTrue) print(df)raw_data {"Column1":"adafafa&quo…

【recast-navigation-js】使用three.js辅助绘制Agent

目录 说在前面使用Tweakpane添加CrowAgent其他 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5 使用Tweakpane fps面板interface FPSGraph extends BladeApi<B…

Redis这一篇就够了

一.概述 Redis是什么&#xff1f; Redis是远程服务字典服务&#xff0c;是一个开源的使用ANSI C语言编写&#xff0c;支持网络&#xff0c;可基于内存亦可持久化的日志型&#xff0c;Key-Value数据库&#xff0c;并提供多种语言的API。 redis会周期性把更新的数据写入磁盘或把…