网络原理——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------WebKitFormBoundaryrGKCBY7ghFd3TrwAContent-Disposition: form-data; name="file"; filename="chrome.png'Content-Type:image/pngPNG ... 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

在这里插入图片描述

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

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

相关文章

6月2(信息差)

🌍特斯拉:Model3高性能版预计6月中旬开启首批交付 🎄微软对开源字体 Cascadia Code 进行重大更新 ✨天猫618加码引爆消费热潮 截至晚9点185个品牌成交破亿 1.瑞士清洁科技公司Librec开发废旧锂离子电池回收技术,可回收电池90%的…

贴片和直插型IRM红外遥控接收头引脚定义和规格参数及使用注意事项

红外遥控接收头使用注意事项 引脚定义存在不同 红外遥控接收头大量使用在家用电器的遥控中,属于价廉物美的一种光电接收器件,批量价格约0.3元左右。 多数遥控接收头的引脚定义是OUT,GND,VCC,另有引脚定义不同为OUT,VCC,GND,记住…

Django 创建项目及应用

1,安装 Django pip install Django3.1.5 2,创建 Django项目 django-admin startproject myshop 3,创建 Django应用 python manage.py startapp app1 4,启动 Django项目 python .\manage.py runserver 到这里项目及应用创建…

空间转录组基础数据解读+学习方法

详情请参考这个视频:空间转录组(spatial transcriptome)数据分析基础教程_哔哩哔哩_bilibili 1.首先是filtered_feature_bc_matrix文件 两个里面的内容本质一样,都是空间转录组 表达矩阵的信息 2.具体的所有东西可以在10x的网站…

React(五)UseEffect、UseRef

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期,但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时,网络请求,订阅等操作都是在生命周期中完成 import React, { Co…

图书推荐:ChatGPT专业知识信息课程

《ChatGPT专业知识信息课程》(ChatGPT-Expertise Informative Course) 是一本由Dwayne Anderson撰写的电子书,提供了关于ChatGPT的丰富知识。该书涵盖了与ChatGPT相关的各种主题,如其与OpenAI的关系、ChatGPT与GPT-3之间的混淆、C…

【蓝牙概述】

蓝牙无线技术是一种短距离通信系统,旨在取代连接便携式和/或固定电子设备的电缆。蓝牙无线技术的主要特点是稳健性、低功耗和低成本。该规范的许多功能都是可选的,从而允许产品差异化。 蓝牙无线技术系统有两种形式:基本速率 (BR) 和低功耗 …

浅谈旧项目如何添加新依赖

Spring项目创建之后,还想添加新的依赖(如Spring框架内置的依赖),可以安装插件: 装完该插件之后,就可以在pom.xml文件里,右键选择 Generate即可出现下述界面: 点击ok即可添加新的…

jpeg压缩算法学习(1)——离散余弦变换

离散余弦变换是jpeg压缩算法的关键步骤 思想 离散余弦变换的基本原理是:每一组离散的数据都可以由一组不同频率的余弦波来表示。 应用于图片上就是:将像素值转换为不同频率的余弦函数的系数(权重) 像素值——>权重 一维离…

网络原理——TCP/IP--数据链路层,DNS

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 目录 数量链路层目的地址和原地址类型校验和 DNS 数量链路层 主要的协议是以太网协议.一个横跨数据链路层和 物理层的协议,既包含了数据链路层的内容, 也包含了⼀些物理层的内容 我们来了解一…

【前端开发--css学习笔记】CSS超详细的学习笔记。前端开发css学习笔记(非常详细,适合小白入门)

二&#xff0c;CSS学习笔记 1&#xff0c;CSS语法 1-1 CSS 实例 CSS声明总是以分号 ; 结束&#xff0c;声明总以大括号 {} 括起来: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title…

为什么改变进制传输系统码长不变

目录 直接上图片 问题分析 传信率与传码率 多进制调制 码长不变的理解 误码率考量 总结 直接上图片 问题分析 在讨论这个问题时&#xff0c;通常是指在保持RB&#xff08;码元传输速率&#xff0c;传码率&#xff0c;符号率&#xff0c;波特率&#xff09;不变的情况下&a…

即时通讯视频会议平台,WorkPlus本地化部署解决方案

随着现代科技的快速发展&#xff0c;传统的会议方式已经不再满足企业和组织的需求。即时通讯视频会议以其便利性和高效性&#xff0c;成为了现代企业沟通和协作的重要工具。通过即时通讯视频会议&#xff0c;企业可以实现无时差的交流和远程协作&#xff0c;增强团队合作和提高…

实现Redis和数据库数据同步问题(JAVA代码实现)

这里我用到了Redis当中的发布订阅模式实现(JAVA代码实现) 先看图示 下面为代码实现 首先将RedisMessageListenerContainer交给Spring管理. Configuration public class redisConfig {AutowiredRedisConnectionFactory redisConnectionFactory;AutowiredQualifier("car…

HALCON-从入门到入门-最常用的算子-二值化

1.废话 图像处理中的二值化是一种将灰度图像转换为只有两种可能值&#xff08;通常是0和255&#xff0c;分别代表黑色和白色&#xff09;的过程。这个过程在数字图像处理中非常常见&#xff0c;因为它可以简化图像数据&#xff0c;突出图像的主要特征&#xff0c;并降低后续处…

【Spring框架全系列】IOC DI案例,setter方法和构造方法注入(详解) + 思维导图

文章目录 一.概念实操Maven父子工程 二. IOC和DI入门案例【重点】1 IOC入门案例【重点】问题导入1.1 门案例思路分析1.2 实现步骤2.1 DI入门案例思路分析2.2 实现步骤2.3 实现代码2.4 图解演示 三、Bean的基础配置问题导入问题导入1 Bean是如何创建的【理解】2 实例化Bean的三种…

二分查找,查找第一个大于目标元素target所对应的下标-2300. 咒语和药水的成功对数

题目链接及描述 2300. 咒语和药水的成功对数 - 力扣&#xff08;LeetCode&#xff09; 题目分析 这道题目作为一个典型的二分查找&#xff0c;题目中所述&#xff0c;找到每一个spells[i]在positions中对应的元素positions[i]使其乘积大于给定元素sucess&#xff0c;并统计每一…

云队友:专业的远程工作和程序员接单平台,用户体验佳

编程赚钱的平台有不少&#xff0c;良莠不齐&#xff0c;今天给大家分享个专业的远程工作平台&#xff0c;以技术类工作为主&#xff08;包括编程&#xff09;&#xff1a; 云队友简介 外包大师是PMCAFF互联网产品社区于2016年推出的互联网产品技术外包服务平台。外包大师最新…

HCIP的学习(28)

第九章&#xff0c;链路聚合和VRRP 链路聚合 ​ 目的&#xff1a;备份链路以及提高链路带宽。 ​ 链路聚合技术&#xff08;Eth-Trunk&#xff09;&#xff1a;将多个物理接口捆绑成一个逻辑接口&#xff0c;将N条物理链路逻辑上聚合为一条逻辑链路。 正常情况下&#xff0c;…

成功解决“IndexError: queue index out of range”错误的全面指南

成功解决“IndexError: queue index out of range”错误的全面指南 引言 在Python编程中&#xff0c;queue模块提供了同步队列类&#xff0c;包括FIFO&#xff08;先进先出&#xff09;队列Queue&#xff0c;LIFO&#xff08;后进先出&#xff09;队列LifoQueue&#xff0c;以…