计算机网络(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请求的正确与否

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

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

相关文章

NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields 论文阅读

论文信息 题目&#xff1a;NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields 作者&#xff1a;Antoni Rosinol, John J. Leonard&#xff0c; Luca Carlone 代码&#xff1a;https://github.com/ToniRV/NeRF-SLAM 来源&#xff1a;arxiv 时间&#xff…

Java课设--学生信息管理系统(例2)

文章目录 前提一、运行效果二、代码获取 前言 首先确定自己的JDBC连接数据库已经完成&#xff0c;不懂可以看看其他博主的解析。 我使用的是SQL Server数据库&#xff0c;数据库名称为stu,账号为sa,密码为123456 数据库的表为student表&#xff0c;内容如下&#xff1a; 一、…

第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)

vector插入和删除 功能描述&#xff1a; 对vector容器进行插入、删除操作 函数原型&#xff1a; push_back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele insert(const_iterator pos, int cou…

MySQL数据库安装(二)

夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库概述(一), 如果没有看过, 请观看上一章 一. MySQL 卸载 一.一 停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话…

我设置了IIS的默认文档为什么还是提示403 - 禁止访问: 访问被拒绝。

我设置了IIS的默认文档为什么还是提示403 - 禁止访问: 访问被拒绝。 这个问题我是在处理dedeCMS站点时发现的问题 解决方法&#xff1a; 打开IIS》应用程序池》&#xff08;找到你的站点应用池&#xff09;》右键》基本设置》版本&#xff1a;选择2.0》管道&#xff1a;选择“…

75. 颜色分类

题目链接&#xff1a;力扣 解题思路&#xff1a;因为整个nums数组中只有0&#xff0c;1&#xff0c;2三个数组成。对nums升序排序后&#xff0c;0一定都在数组的最左边&#xff0c;2一定都在数组的最右边&#xff0c;1在数组的中间。那么只需要将0移动到数组的左边&#xff0c;…

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线&#xff0c;并画出来 // 1、 斑块的框 血管二值化图&#xff0c;pca 找到垂直血管壁的直线, 还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标&#xff0c;std::vector<cv::Point> points;for (int y 0; y <…

亿发江西中小型制造企业信息化建设解决方案,2023数字化转型升级

实体经济在经济中的重要性愈发凸显&#xff0c;江西省作为制造业强省&#xff0c;要实现制造业经济高质量发展&#xff0c;信息技术与制造业的深度汇合是不可或缺的关键路径。在这个制造业转型升级的浪潮中&#xff0c;中小企业成为了江西省制造业转型的焦点。让我们深入探讨一…

【java】final

final final修饰属性fianl修饰方法fianl修饰类 final修饰属性 final可以修饰变量&#xff1a;变量的值一旦初始化后无法修改 final可以修饰属性&#xff1a;那么JVM无法自动进行初始化&#xff0c;需要自己进行初始化, 属性值不能发生变化。 public class chapter15 {public …

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

以太网Ethernet通信协议

一、以太网简介 计算机网络可分为局域网(LAN)、 城域网(MAN)、广域网(WAN)、互联网(Initernet)。局域网按传输介质所使用的访问控制方法可分为&#xff1a;以太网(Ethernet)、光纤分布式数据接口(FDDI)、异步传输模式(ATM)、令牌环网(Token Ring)、交换网(Switching) 等&#x…

基于fpga的电子时钟

文章目录 前言实验手册一、实验目的二、实验原理1&#xff0e;理论原理2&#xff0e;硬件原理 三、系统架构设计四、模块说明1&#xff0e;模块端口信号列表按键消抖模块&#xff08;key&#xff09;计数器模块&#xff08;counter&#xff09;蜂鸣器乐谱模块(music)蜂鸣器发声…

MySQL—— 基础语法大全

MySQL—— 基础 一、MySQL概述1.1 、数据库相关概念1.2 、MySQL 客户端连接1.3 、数据模型 二、SQL2.1、SQL通用语法2.2、SQL分类2.3、DDL2.4、DML2.5、DQL2.6、DCL 三、函数四、约束五、多表查询六、事务 一、MySQL概述 1.1 、数据库相关概念 数据库、数据库管理系统、SQL&a…

ClickHouse(十四):Clickhouse MergeTree系列表引擎 - SummingMergeTree

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

做好“关键基础设施提供商”角色,亚马逊云科技加快生成式AI落地

一场关于生产力的革命已在酝酿之中。全球管理咨询公司麦肯锡在最近的报告《生成式人工智能的经济潜力&#xff1a;下一波生产力浪潮》中指出&#xff0c;生成式AI每年可能为全球经济增加2.6万亿到4.4万亿美元的价值。在几天前的亚马逊云科技纽约峰会中&#xff0c;「生成式AI」…

「从零入门推荐系统」22:chatGPT、大模型在推荐系统中的应用

作者 | gongyouliu 编辑 | gongyouliu 提示&#xff1a;全文2.5万字&#xff0c;预计阅读时长2小时&#xff0c;可以先收藏再慢慢阅读。 我们在上一章介绍了chatGPT、大模型的基本概念、核心技术原理等基础知识&#xff0c;有了这些背景知识的铺垫&#xff0c;下面我们来介绍ch…

[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...

项目开始的准备工作 在上一篇文章中, 已经从Boost官网获取了Boost库的源码. 相关文章: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 接下来就要编写代码了. 不过还需要做一些准备工作. 创建项目目录 所有的项目文件肯定要在一…

Linux系统---进程控制

文章目录 进程创建进程终止进程等待进程替换实现简单的mini-shell 一、进程创建 1.fork()函数 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 #include <unistd.h> pid_t fork(void…

数据结构日记之《队列的定义》

队列的定义 一、队列的定义和特点二、队列的抽象数据类型定义三、例子 一、队列的定义和特点 队列 (queue) 是一种 先进先出(First In First Out, FIFO) 的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端删除元素。这和日常生活中的排队是一致的&#xff0c;最早进…