当前位置: 首页 > news >正文

计算机网络(5) --- http协议

计算机网络(4) --- 协议定制_哈里沃克的博客-CSDN博客协议定制https://blog.csdn.net/m0_63488627/article/details/132070683?spm=1001.2014.3001.5501

目录

1.http协议介绍

1.协议的延申

2.http协议介绍

3.URL

4.urlencode和urldecode

2.HTTP协议结构

1.引入

2.细节

3.HTTP协议的使用

1.协议

2.网页配置

3.HTTP请求方法

4.HTTP内容

1.HTTP状态码

1.常见的几个状态码

2.重定向的状态码

2.长链接

3.HTTP周边会话保持

cookie保存信息

session保存

5.基本工具

1.postman

2.fiddler


1.http协议介绍

1.协议的延申

1.协议不只有一种,我们能自己定制协议。那么区分协议的关键就是报头的内容,如果报头内容有标记表示是哪种协议,那么接收方就能判断是哪个协议,进而使用对应的协议规范

2.其实离不开序列化和业务逻辑,那么其实站在7层网络协议的视角来看。表示层其实对应的就是序列化和反序列化;而应用层就是业务处理。但是我们也知道由于不同的要求,我们必须设置出不同的业务逻辑和序列化的标准,那么也就意味着七层的会话层,表达层和应用层是无法统一化的。

2.http协议介绍

1.http是超文本传输协议,它是用于web的一种常见协议。该协议可以传输视频,语音,图片等等的结构数据,所以多用于网页处理

2.http协议是服务于应用层的

3.URL

1.URL开头为协议,能确认是哪个协议进行网络传输的

2.服务器地址,又叫做域名。该域名能找到指定的服务器IP地址

3.服务器端口,一般会被隐藏。http的端口号为80,https的端口号为443

4.端口号这里就已经确定是在哪个主机的哪个端口号下进行。而端口号后面表示在当前主机下的文件路径。第一个/表示web根目录,并不是指操作系统中的根目录。

5.那么URL的过程其实就是在指定的主机中指定位置根据具体的协议找到对应的资源。这些资源就是网络上看到一切数据,它们都在服务器的磁盘上存储着

4.urlencode和urldecode

1.像 / ? : 等这样的字符, 已经被url当做特殊意义理解了, 因此这些字符不能随意出现。那么某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
2.对特殊符号进行encode过程转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
3.把转码变为特殊符号过程为decode

2.HTTP协议结构

1.引入

1.以行为单位的协议

2.状态码,就是用于表示响应的状态:404->Not Found 200->OK

2.细节

1.由于以行为单位,我们轻松的读取完整的一行。第一行为请求行,我们知道了协议的具体获取方式,地址以及http的版本,随后循环式的获取行,知道获取到空行,那么我们得到了请求报头。请求报头中就有数据显示请求正文的大小,那么我们根据报头获取的数据就能得到正文。

2.序列化其实也简单。对于正文而言,其实是不需要做任何变化的。真正需要序列化的地方是报头,每读取一个报头后面加上\r\n,再不断的追加。最终得到序列化的报文。此时就可以组成协议了。

3.HTTP协议的使用

1.协议

        void HandlerHttp(int sock){// 1. 读到完整的http请求// 2. 反序列化// 3. httprequst, httpresponse, _func(req, resp)// 4. resp序列化// 5. sendchar buffer[4096];HttpRequest req;HttpResponse resp;size_t n = recv(sock, buffer, sizeof(buffer) - 1, 0); // 大概率我们直接就能读取到完整的http请求if (n > 0){buffer[n] = 0;req.inbuffer = buffer;_func(req, resp); // req -> respsend(sock, resp.outbuffer.c_str(), resp.outbuffer.size(), 0);}}
class HttpRequest
{
public:std::string inbuffer;std::string reqline;std::vector<std::string> reqheader;std::string body;std::string method;std::string url;std::string httpversion;std::string path;
};class HttpResponse
{
public:std::string outbuffer;
};bool Get(const HttpRequest &req, HttpResponse &resp)
{cout << "----------------------http start---------------------------" << endl;cout << req.inbuffer << std::endl;cout << "----------------------http end---------------------------" << endl;
}

编写一段接收服务器接收http协议,并且打印的逻辑。当我们访问当前的服务器是。结果回传出客户端打来http协议。

GET方法,在/web根目录下,HTTP/1.1版本的协议

2.网页配置

1.配置初始的web首页:就是在文件中创建一个wwwroot文件,该文件可以放入各种网页所需要的资源。

2.wwwroot中,index.html文件为默认的首页,404.html文件显示无法访问的网页

3.一个用户看到的网页是多个资源组合而成的,所以我们要得到一整张完整的网页,服务端会发起多次请求。

3.HTTP请求方法

1.交互web有两种行为:1.获取资源 2.上传资源(交互)

2.我们进行数据提交的时候,其实是前端要form表单提交的,浏览器会自动将form表单中的内容转换成为GET/POST方法请求。

3.GET方法会把参数拼接到URL上提交给服务器;POST方法提交参数通过正文提参。POST是正文提参,一般用户看不到,私密性比较好。但是私密性不代表安全,GET和POST都不安全。POST通过正文,所以可以传入比较大的资源。

4.GET在内部服务器端可以写代码,一旦得到GET请求,可以分离出url和参数,之后我们就可以对参数进行服务操作了;而POST本来就分离的,那么自然可以在正文里找到参数进行服务操作

4.HTTP内容

1.HTTP状态码

1.常见的几个状态码

1.200:OK -- 正常运行

2.404:Not Found -- 用户错误

3.403:Forbidden -- 拒绝客户访问

4.503:Bad Gateway -- 服务端错误(创建进程线程等任务失败)

2.重定向的状态码

3开头的状态码:是关于重定向的状态码。其原理就是先通过url访问服务端,服务端发送给客户端3开头对应的状态码,随后又将设置好的新url传送给客户端,客户端跳转到新的url处。301:永久重定向,跳转旧网页就会访问新网页;307临时重定向,一般用于登录界面之类。

2.长链接

1.其实我们看到的网页是一堆的资源组成的,那么也就意味着需要多次的http请求将整个完整的浏览器进行渲染和优化

2.http是基于tcp套接字的,tcp是面向链接的,也就是说http多次请求tcp就多次链接。那么就会出现频繁创建链接的问题

3.所谓的client和server都需要长链接,这种链接是在获取一大堆资源时,通过一条链接完成的。

4.协议中出现connection:keep-alive说明是长链接。

3.HTTP周边会话保持

1.会话保持严格意义不是http协议天然具备的,是后面使用发现需要的

2.访问指定浏览器一个网页,该网页需要登录,一旦关闭后又重新开启网页,网页依然会有登录的记录。我们换一个浏览器,那么就没有登录的记录了,不能自己登录。

3.http只在乎当前这一次的请求,那么也就意味着之前或者后来的请求有什么状态,就当前而言是无法知道的。但是用户需要这种历史记录!

4.会话保持:http协议是无状态的,但是用户需要,因为用户查看新的网页是常规操作,那么新页面也就无法识别用户,为了让用户一经登录,整个网站按照用户身份进行随意的访问的功能就是会话保持

cookie保存信息

1.浏览器在登录时,我们将所有的信息写入时,会创建一个空间存储当前的信息。那么服务端在用户访问时需要不断判断身份,随后就能拿到浏览器保存的信息进行身份认证,这样就能够达到目的。该浏览器记录的功能为cookie技术。

2.cookie分为文件级别和内存级别。关闭浏览器重新开启依然能保存信息是文件级别的cookie;但是关闭后就没有信息的就是内存级别,因为浏览器是进程,关闭后进程的信息就会被释放。

3.缺点:由于cookie保存的功能,一旦有木马攻击用户,那么此时黑客就拥有了用户的登录信息,此时就能像用户一样进行登录。换句话说我们被盗号了。造成信息泄漏和他人使用。

session保存

1.根据上面的缺点,归根到底是因为信息由用户管理出现的问题。所以将用户的信息在输入时保存到 服务器中,服务器生成唯一的session文件进行保存,每一个访问浏览器返回唯一的session id对应session文件。一旦浏览器访问,则需要把http和session id一起发送过去,随后调取服务器内部session文件,避免了信息泄漏。

2.为了防止木马拿去session id以达到访问的效果,服务器设置了cookie访问时间,如果cookie在其他地方没一分钟就会有措施。只要不符合就将session id失效,这样只有有密码的人才能访问。

3.以及一些长时间未登录等的用户行为,IP地址变换等等的情况都是保护个人信息的措施。

4.手机保护,人脸识别等等也可以作为确认个人信息的能力

5.基本工具

1.postman

格式化处理的网页

2.fiddler

抓包本地http工具,一般用于检查http请求的正确与否

相关文章:

计算机网络(5) --- http协议

计算机网络&#xff08;4&#xff09; --- 协议定制_哈里沃克的博客-CSDN博客协议定制https://blog.csdn.net/m0_63488627/article/details/132070683?spm1001.2014.3001.5501 目录 1.http协议介绍 1.协议的延申 2.http协议介绍 3.URL 4.urlencode和urldecode 2.HTTP协…...

ubuntu 硬盘操作

查看移动硬盘的文件系统名 以及空间使用情况 df -hl查看硬盘的格式类型&#xff0c;以及挂载位置 df -T挂载硬盘 fdisk -l #查看磁盘信息 mount -o rw /dev/sdb1 /home/test # 挂载硬盘-o 指定挂载文件系统时的选项 ro 以只读方式挂载 rw 以读写方式挂载 注意&#xff1a;…...

C#垃圾回收器GC、析构函数(Finalize 方法)和Dispose

1、垃圾回收器GC GC&#xff08;Garbage Collection)是.NET中的垃圾回收器。以应用程序的root为基础&#xff0c;遍历应用程序在Heap上动态分配的所有对象&#xff0c;通过识别它们是否被引用&#xff0c;来确定哪些对象是已经死亡的&#xff0c;哪些仍需要被使用。已经不再被…...

第20周 服务容错-Hystrix

RabbitMQ 安装 1. 首先在Linux上进行一些软件的准备工作&#xff0c;yum下来一些基础的软件包 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel 2. 下载RabbitMQ所需软件包&#xff08;本神在这里使用的是 RabbitM…...

浏览器不同源的页面之间如何跨域通信

目录 1&#xff0c;需求2&#xff0c;难点3&#xff0c;思路浏览器不同源的页面之间如何跨域通信&#xff1f; 4&#xff0c;实现第1版第2版最终版其他的问题1&#xff0c;页面路径需完全一致。2&#xff0c;事件注册问题 1&#xff0c;需求 现在有2个项目&#xff0c;页面路径…...

【云原生】K8S二进制搭建三:高可用配置

目录 一、部署CoreDNS二、配置高可用三、配置负载均衡四、部署 Dashboard 一、部署CoreDNS 在所有 node 节点上操作 #上传 coredns.tar 到 /opt 目录中 cd /opt docker load -i coredns.tar在 master01 节点上操作 #上传 coredns.yaml 文件到 /opt/k8s 目录中&#xff0c;部…...

HOT78-跳跃游戏

leetcode原题链接&#xff1a;跳跃游戏 题目描述 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1&#xff1a; 输入&#xff1a;nums [2,3,1,1,4] 输…...

HDFS中的NAMENODE元数据管理(超详细)

元数据管理 元数据是什么元数据管理概述内存元数据元数据文件fsimage内存镜像文件edits log编辑日志 namenode加载元数据文件顺序 元数据管理相关目录文件元数据相关文件VERSIONseen_txid 元数据文件查看&#xff08;OIV,OEV&#xff09;SecondaryNameNode介绍checkpoint机制SN…...

区块链实验室(14) - 编译FISCO-BCOS

FISCO-BCOS是一种区块链平台&#xff0c;与Hyperledger和Ethereum有些不同&#xff0c;详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块&#xff0c;进行对比实验&#xff0c;验证新想法、新创意的效果。编译的步骤很简单&#xff0c;按技术文档一…...

for(auto iter:vec) 及 for(auto iter:vec) 的典型用法

【算法知识点】C11 标准引入了 auto 类型说明符。它通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。 一、for(auto iter:vec) 的典型用法 #include <bits/stdc.h> using namespace std;int main(){string s;cin>>s;for(auto t:s){cout<<…...

【iosH5开发】IOS浏览器对于Vue3 Element-plus el-input中,input.value.focus无法聚焦问题

【iosH5开发】IOS浏览器对于Vue3 Element-plus el-input中&#xff0c;input.value.focus无法聚焦问题 此次项目遇到了两个问题&#xff0c;一个是在Vue3中el-input的input.value.focus()无法触发&#xff0c;但是在PC或者安卓均可触发。 // 解决方案 // 单纯的触发input.val…...

【2023】华为OD机试真题Java CC++ Python JS Go-题目0257-增强的strstr

题目0257-增强的strstr 题目描述 C 语言有一个库函数: char *strstr(const char *haystack, const char *needle) ,实现在字符串 haystack 中查找第一次出现字符串 needle 的位置,如果未找到则返回 null。 现要求实现一个strstr的增强函数,可以使用带可选段的字符串来模…...

Android 解析ping回复包

目标&#xff1a; 已知多个字符串&#xff0c;形如&#xff1a;“64 bytes from 39.156.66.18: icmp_seq1 ttl50 time29.7 ms” 获取 总Ping时间(XX:XX:XX格式)&#xff0c;最小时间&#xff0c;最大时间&#xff0c;平均时间&#xff0c;丢包率&#xff0c;已发送个数&#xf…...

在外地ssh远程连接家里ubuntu服务器(Coplar内网穿透)

官网&#xff1a;https://www.cpolar.com/ 步骤&#xff1a; 可以先安装ssh许可(必须先完成&#xff0c;完成后在局域网内就可以连接自己服务器&#xff0c;但还是需要安装cpolar才可以外地连接服务器)&#xff0c;参考[B站&#xff1a;Linux (Ubuntu) 如何开启SSH远程登录]((…...

windows创建占用特定端口程序

默认情况下&#xff0c;远程桌面使用的是3389端口。如果您想将远程桌面端口更改为8005&#xff0c;以达到模拟程序占用端口8005的情况&#xff0c;可以执行以下操作&#xff1a; 如执行以下命令&#xff0c;则1&#xff0c;2&#xff0c;3步相同操作可以跳过&#xff0c;直接往…...

【uniapp 定位获取详细位置】

在 uniapp 中获取定位信息方法&#xff0c;具体如下&#xff1a; 1. uni.getLocation 方法&#xff08;都可&#xff09;&#xff1a; uni.getLocation({type: gcj02,success: function(res) {console.log(经度&#xff1a; res.longitude)console.log(纬度&#xff1a; re…...

后端进阶之路——万字总结Spring Security与数据库集成实践(五)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…...

mysql8查看执行sql记录历史,配置开启sql历史日志general_log

1.概要说明 mysql8默认未开启sql记录历史日志。 2.配置开启general_log 2.1.查看配置 general_log&#xff1a;是否开启sql日志。默认为OFFlog_output:日志输出位置&#xff1a; FILE&#xff1a;输出到文件。默认值TABLE&#xff1a;输出到表。mysql.general_log show v…...

git 版本控制与合并

一 git概述&#xff1a; - Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理软件开发项目中的代码变更。 - 它允许多人协同工作&#xff0c;记录代码历史变更&#xff0c;并轻松管理多个项目版本。 **Git的主要特点**包括&#xff1a; 1. **分布式系统**&#xff1a;…...

【力扣】23. 合并 K 个升序链表 <链表指针、堆排序、分治>

目录 【力扣】23. 合并 K 个升序链表题解方法一&#xff1a;暴力&#xff0c;先遍历取出来值到数组中排序&#xff0c;再生成新链表方法二&#xff1a;基础堆排序&#xff08;使用优先队列 PriorityQueue&#xff09;方法三&#xff1a;基础堆排序&#xff08;使用优先队列 Pri…...

UML类图实战:从设计到代码的精准映射

1. 为什么需要从UML类图到代码的精准映射&#xff1f; 第一次接触UML类图时&#xff0c;我总觉得它像是一张"纸上谈兵"的设计稿。直到在实际项目中踩过几次坑才明白&#xff0c;类图与代码之间的精准映射能力&#xff0c;是区分普通程序员和架构师的关键技能之一。 …...

163MusicLyrics:一站式跨平台歌词管理解决方案

163MusicLyrics&#xff1a;一站式跨平台歌词管理解决方案 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 当你在音乐海洋中遨游时&#xff0c;是否曾为找不到心仪歌曲的…...

某供应链企业200GB数据泄露复盘:如果开了透明加密,攻击者拿走的只有乱码

图&#xff1a;供应链企业数据泄露的3条典型路径&#xff08;U盘导出/数据库导出/截图&#xff09;与TDE透明加密的拦截机制事件还原&#xff1a;一次"完美"的内部数据窃取说明&#xff1a;以下事件基于多起真实安全事件综合脱敏处理&#xff0c;技术细节均为真实攻击…...

手把手教你搞定Windows下的NAMD和VMD安装(附最新版下载与注册避坑指南)

Windows平台NAMD与VMD安装全攻略&#xff1a;从零开始玩转分子动力学模拟 当第一次接触分子动力学模拟时&#xff0c;软件安装往往是新手面临的第一个挑战。NAMD和VMD作为该领域最常用的工具组合&#xff0c;它们的安装过程看似简单&#xff0c;实则暗藏诸多细节。本文将带你从…...

YOLOv8在Jetson上导出TensorRT引擎(.engine)全流程实操:从ONNX转换到INT8/FP16量化加速

YOLOv8在Jetson平台上的TensorRT引擎部署与量化加速实战指南 当目标检测模型需要部署到边缘计算设备时&#xff0c;性能优化往往成为最关键的技术挑战。本文将深入探讨如何将YOLOv8模型高效转换为Jetson平台专用的TensorRT引擎&#xff0c;并通过INT8/FP16量化技术实现推理速度…...

Fast-GitHub浏览器插件:国内开发者必备的GitHub下载加速终极解决方案

Fast-GitHub浏览器插件&#xff1a;国内开发者必备的GitHub下载加速终极解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还…...

别再乱接线了!用PulseView+逻辑分析仪抓STM32 SPI波形,保姆级避坑指南

逻辑分析仪实战&#xff1a;精准捕获STM32 SPI波形的五大黄金法则 当你在调试STM32的SPI外设时&#xff0c;是否遇到过这样的困境&#xff1a;代码配置完全按照手册操作&#xff0c;但逻辑分析仪显示的波形却充满毛刺、数据残缺不全&#xff1f;这往往不是代码逻辑的问题&#…...

为什么我劝你放弃FLANN 1.9.2?聊聊源码编译那些坑与1.9.1版的真香选择

为什么FLANN 1.9.1才是开发者更明智的选择&#xff1a;深度解析编译陷阱与版本决策 在开源库的世界里&#xff0c;"最新版本"往往被默认为"最佳选择"&#xff0c;但FLANN 1.9.2却打破了这个常规认知。作为一名经历过无数次深夜调试的开发者&#xff0c;我必…...

3步搭建你的游戏串流魔法:用Sunshine让游戏无处不在

3步搭建你的游戏串流魔法&#xff1a;用Sunshine让游戏无处不在 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 还在为不能随时随地玩电脑游戏而烦恼吗&#xff1f;想象一下&#…...

搞懂对数收益率:为什么金融圈都在悄悄用它?

搞懂对数收益率&#xff1a;为什么金融圈都在悄悄用它&#xff1f;如果你曾经被“涨10%再跌10%&#xff0c;怎么还亏了&#xff1f;”这个问题困扰过&#xff0c;那么读完这篇文章&#xff0c;你会豁然开朗。一、一个让你“感觉不对”的小实验 假设朋友向你推荐一只期货合约&am…...