【应用层】网络基础 -- HTTP协议

news2024/11/17 7:25:46

  • 再谈协议
  • HTTP协议
    • 认识URL
    • urlencode和urldecode
    • HTTP协议格式
    • HTTP的方法
    • HTTP的状态码
    • HTTP常见Header
    • HTTP周边会话保持

再谈协议

协议是一种 “约定”. socket api的接口,在读写数据时,都是按 “字符串” 的方式来发送接收的(tcp是以字节流的方式发送的,这里便与表述使用"字符串")

如果我们要传输一些"结构化的数据" 怎么办呢?
在这里插入图片描述

那么我们(TCP)在收到一个报文的时候,如何保证你收到了一个完整的报文?
在这里插入图片描述
tcp是面向字节流的,所以要明确报文和报文的边界

我们调用的所有的发送函数,根本就不是把数据发送到网络中,发送函数,本质是拷贝函数tcp发送的本质,其实就是将数据从c的发送缓冲区,拷贝到s的接受缓冲区:tcp是全双工的!


HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的.
但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)
就是其中之一.

认识URL

平时我们俗称的 “网址” 其实就是说的 URL
在这里插入图片描述
在这里插入图片描述

一切你在网络中看到的都是资源,这些资源文件在你服务器的磁盘上,拿到这些文件就需要Linux系统的路径结构,http就是通过http协议从服务器上拿下来对应的"资源"。因为文件资源种类特别多,http都能搞定,所以:http协议为超文本传输协议

不要认为在https的网址上没有看见端口号就真的没有端口号,只是一般而言端口号采用默认的443

urlencode和urldecode

/ ? :等这样的字符,已经被url当做特殊意义理解了,因此这些字符不能随意出现。

比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
在这里插入图片描述

“+” 被转义成了 “%2B”,urldecode就是urlencode的逆过程;

HTTP协议格式

HTTP请求:
在这里插入图片描述
在这里插入图片描述

  • 首行: [方法] + [url] + [版本]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;

细节:
1.请求和响应怎么保证应用层完整读取完毕了?

  • 我可以读取完整的一行
  • while(读取完整的一行) 一 所有的请求行+请求报头全部读完 一 直到空行
  • 我们能保证把报头读完,报头有一个属性: Content-Length: XXX正文长度
  • 解析出来内容长度,在根据内容长度,读取正文即可

2.请求和响应是怎么做到序列化和反序列化的?
http自己实现的,第一行+请求/响应报头,只要按照\r\n将字符串1->n即可。正文不用做

HTTP响应:

在这里插入图片描述

  • 首行:[版本号] + [状态码] + [状态码解释]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个
  • Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在body中。

HTTP的方法

在这里插入图片描述

其中最常用的就是GET方法和POST方法.

在这里插入图片描述
我们进行数据提交的时候,本质前端要通过form表单提交的,浏览器会自动将form表单中的内容转换成为GET/POST方法请求

  • GET方法:
    在这里插入图片描述
  • POST方法:
    在这里插入图片描述
    区别:
  • GET通过url传递参数,具体: http://ip:port/Xxx/YY?name=value&name2=value2
  • POST提交参数通过http请求的正文提交参数!
  • Post方法通过正文提交参数,所以一般用户看不到,私密性更好,私密性!=安全性,GET方法不私密
  • 无论是GET和POST方法,都不安全!要谈安全,必须加密!
  • 通过URL传递参数,注定了不能太大,但是POST方法,通过正文,正文可以很大,甚至可以是其他的东西

HTTP的状态码

在这里插入图片描述
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

什么是重定向?就是server告诉client,由客户端完成
在这里插入图片描述

  • 临时重定向:比如自动跳转到广告商
  • 永久重定向:比如一个公司以前用的域名更换了,但是用户不知道,所以就给旧域名一个重定向到新的域名,来防止用户找不到新地址。

HTTP常见Header

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

长连接:
其实一张我们看到的网页,实际上可能由多种元素构成,所以一张完整的网页需要多次http请求

在这里插入图片描述
http网页中可能包含多个元素,http是基于tcp的,如果频繁发起http请求,那么就会有tcp面向链接的频繁创建链接的问题

长连接:建立好一条链接,获取一大份资源的时候,通过同一条链接完成
建立长连接需要client和server都要支持,才能建立,显示Connection: keep-alive表示支持长连接,显示Connection: close表示短链接

HTTP周边会话保持

HTTP无状态协议,是指协议对于交互性场景没有记忆能力。

比如点击一个纯的html网页,请求获取服务器的html文件资源时,每次http请求都会返回同样的信息,因为这个是没有交互的,每一次的请求都是相互独立的。在无交互场景中上面那样,当然也不会有太大的问题。但是对于涉及到动态交互的场景,就显得很尴尬了

会话保持严格意义不是http天然具备的,是后面使用发现需要的,http协议是无状态的。但是用户需要。因为用户查看新的网页是常规操作,如果发生网页跳转,那么新的页面也就无法识别是哪一个用户了,为了让用户一经登陆,可以在整个网站,按照自己的身份进行随意访问

在这里插入图片描述

cookie技术:

  • cookie文件:比如你登陆了一个网站,关闭浏览器,结束掉这个进程,你再次登陆这个浏览器的网站,你不需要重新登陆,这就是文件级别的。
  • cookie内存:跟上面例子相反,你没有关闭浏览器,你关闭这个网站重新打开不需要登陆,但是你关闭浏览器以后,再次打开这个浏览器的网站就需要重新登陆。(使用文件还是内存可以自行配置)

在这里插入图片描述

在这里插入图片描述

配合策略:比如异地登陆提醒等。
比如你个人的信息被黑客盗取走问题可能不是特别严重,但是如果企业的信息被盗取,问题就上升了几个档次。


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀

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

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

相关文章

排序—数据结构

文章目录 1.前置知识1.1稳定性1.2内部排序和外部排序1.3是不是比较的排序 2.直接插入排序2.1思想2.2实现2.3时间复杂度和空间复杂度、稳定性 3.希尔排序3.1思想3.2实现3.3时间复杂度和空间复杂度、稳定性 4.选择排序4.1思想4.2实现4.3时间复杂度和空间复杂度、稳定性 5.堆排序5…

基于卷积神经网络的种子等级识别

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 基于GUI的卷积神经网络和长短期神经网络的语音识别系统 代码下载链接:基于MATLABGUI编程的卷积神经网络和长短期神经网络语音识别系统…

【python零基础入门学习】python基础篇(一)

python基础学习 官方: www.python.org,自行安装,linux上有自带python,win自行安装。 [studentroom9pc01 05]$ python --version Python 2.7.5 #创建虚拟环境: [rootroom9pc01 bin]# pwd /root/nsd1907/bin [rootroom9pc01 bin]…

高质量编程与性能调优实践 性能分析工具pprof

01 高质量编程 1.1 简介 什么是高质量 ——编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码 • 各种边界条件是否考虑完备 • 异常情况处理,稳定性保证 • 易读易维护 编程原则 实际应用场景千变万化,各种语言的特性和语法各不相同 但是高…

1267. 统计参与通信的服务器

这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…

浪涌保护器防雷应用的行业解决方案

浪涌保护器SPD是一种用于防止电力系统或电子设备受到雷击或其他暂态过电压的损坏的装置。它可以有效地限制或分流过电压,保护被保护设备的安全和正常运行。浪涌保护器在各个行业领域都有广泛的应用,地凯科技将介绍浪涌保护器的主要应用领域,以…

threejs纹理加载(二)

通过threejs提供的加载器我们去加载一些贴图作为几何体的纹理&#xff0c;非常方便。我们以本地一张图片作为例子来实现这个效果&#xff1a; <template><div></div> </template> <script setup> import { ref } from "vue";import …

C++ 编译报错“jump to label”

C 编译报错“jump to label” 分析解决方法如何在Eclipse中添加编译选项 分析 void func() {int a 0;a;goto label; label:int b 0;return; }这样的代码是有问题的&#xff0c;因为C编译规则中&#xff0c;不允许goto后面还有新的变量声明。 解决方法 将所有变量声明放到第…

LTD240次升级 | 栏目介绍可在官微中心管理 • 移动分享页可显示产品图文参数

1、新增一种自定义内容数据类型&#xff0c;可用于服务特色等版块展示 2、Android版App优化首页内容排序 3、新增一款导航模块和一款轮播模块 4、移动分享页支持产品图文参数 5、已知问题修复与优化 01 官微中心 1) 新增自定义内容类型数据管理功能 本次升级中&#xff0c;新…

卡尔曼滤波学习笔记

Kalman Filter Ⅰ、直观理解1、描述2、例子 Ⅱ、适用范围1、线性系统2、噪声服从高斯分布 Ⅲ、相关公式1、原始公式2、预测公式3、更新公式4、初值赋予5、总结 Ⅳ、应用例子Ⅴ、代码实现Ⅵ、公式理解1、协方差矩阵的理解1.1 协方差1.2 协方差矩阵1.3、相关数学公式 2、状态方程…

实例043 如何实现Office助手

实例说明 用过Office的人都知道&#xff0c;Office助手是一个非常漂亮的小工具&#xff0c;有了它&#xff0c;即使对Office不太熟悉的用户也可以操作自如。本实例使用C#制作了一个类似Office助手的程序&#xff0c;实例效果如图1.44所示。 技术要点 要实现Office助手效果&a…

2023年Java毕业设计题目推荐,怎样选题?500道毕业设计题目推荐

大家好&#xff0c;我是程序员徐师兄&#xff0c;最近有很多同学咨询&#xff0c;说毕业设计了&#xff0c;不知道选怎么题目好&#xff0c;有哪些是想需要注意的。 今天&#xff0c;我整理了一些Java毕业设计的题目,可以参考一下&#xff0c;希望对大家有所帮助 文章目录 一、…

uniapp中解析markdown支持网页和小程序

对于markdown相信大家都不陌生&#xff0c;日常写文档或日常记录都用到的比较多&#xff0c;书写的是markdown的格式&#xff0c;实时预览的是转换后的html样式。本次实现的需求是在uniapp中转换markdown文本展示在不同的平台&#xff0c;主要平台是浏览器使用和微信小程序使用…

Instagram安全运营的10条策略

Instagram每月活跃用户15亿&#xff0c;是跨境外贸开发客户与广告引流的常用工具。本文总结10条Instagram运营基本策略与原则&#xff0c;帮助各位跨境人更好的了解平台规则&#xff0c;规避风险&#xff0c;提高投放效率&#xff01; 1、使用商业账号 企业在instagram 上进行…

北斗RTK高精度定位技术原理及优势

北斗RTK&#xff08;Real-Time Kinematic&#xff09;高精度定位技术是一种利用卫星导航系统进行实时定位的方法&#xff0c;它通过测量卫星信号的相位差来获得非常精确的位置信息。其原理和优势如下&#xff1a; 原理&#xff1a; 1. 载波相位差测量&#xff1a; RTK技术通过…

卷积过程详细讲解

1&#xff1a;单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。假设卷积核大小为3x3&#xff0c;padding0&#xff0c;stride1。 卷积过程如下&#xff1a; 相应的卷积核不断…

保姆级教程之VMD-SABO-KELM优化核极限学习机的西储大学轴承诊断

从数据处理&#xff0c;优化VMD特征提取&#xff0c;再到SABO&#xff08;减法平均优化器&#xff09;优化核极限学习机的故障诊断&#xff0c;实现故障诊断的全流程&#xff0c;其他类型的故障诊断均可参考此流程。 友情提示&#xff1a;对于刚接触故障诊断的新手来说&#xf…

安装Node(脚手架)

目录 一&#xff0c;安装node&#xff08;脚手架&#xff09;1.1&#xff0c; 配置vue.config.js1.2&#xff0c; vue-cli3x的目录介绍1.3&#xff0c; package.json 最后 一&#xff0c;安装node&#xff08;脚手架&#xff09; 从官网直接下载安装即可&#xff0c;自带npm包管…

spring依赖注入详解(下)

Autowired注解依赖注入过程 一、findAutowireCandidates()实现 找出BeanFactory中类型为type的所有的Bean的名字&#xff0c;注意是名字&#xff0c;而不是Bean对象&#xff0c;因为我们可以根据BeanDefinition就能判断和当前type是不是匹配&#xff0c;不用生成Bean对象把re…

【多天线传输技术】BPSK调制信号在复高斯瑞利信道下Alamouti的误码率分析

%% [预处理] clc; clear; close all;%% [配置参数] N3000000; %数据点数&#xff08;个&#xff09; SNR_dB0:1:45; %信噪比&#xff08;dB形式&#xff09; SNR10.^(SNR_dB/10); %信噪比&#xff08;一般形式&#xff0c;Eb/N0&#xff09; Ps1; …