9.3.5网络原理(应用层HTTP/HTTPS)

一.HTTP:

1. HTTP是超文本传输协议,除了传输字符串,还可以传输图片,字体,视频,音频.

2. 

3.HTTP协议报文格式:a.首行,b.请求头(header),c.空行(相当于一个分隔符,分隔了header和body),d.正文(body).

4.

5.URL:唯一资源描述符(长度不限制). 

a.

b.注意:查询字符串(query string)是键值对的格式.键值对之间使用'&'符号分割,键和值之间,使用'='分割,查询字符串以'?'开始.

c.上述的URL几个部分都是可以省略的

1)IP地址/域名省略:相当于请访问当前服务器的地址(上一次获取的).

2)端口号省略:浏览器会自动加上,HTTP自动添加80,HTTPS自动添加443.

3)带层次的路径省略:相当于访问根目录(/),服务器主页.

4)查询字符串省略:后端自动处理.

d.URL encode:

例如'+' ':' '?' '&' '=' '#',还有中文都需要转义.

以为网站可以查看转义:URL encode转义网站

5.method(方法):

a.

注意:最上面两个最常用.

b.GET:"从服务器获取xxx",

   POST:"向服务器传输一个xxx".

c. 一般来说

GET请求中body部分是空的,数据放在query string中.

POST请求使用的场景是登录和上传,有body(和query string很类似),但是query string是空的.

注意:GET和POST没有本质区别,两者经常相互替换,上述区别只是习惯,放在query string中用户可以直接看到(收藏夹可以收藏),放在body则不行.

d.错误的说法:

1)较长的数据放到body中,url有长度限制. 

2)POST比GET更安全.

注意:以上说法错误.

e.需要注意的地方:

1)设计的时候,GET和POST语义不同,但是实践中不一定要遵守.

2)GET是幂等的,POST不是幂等的,设计互联网产品的时候,需要考虑幂等性,有的需要幂等(账户余额查询),有的需要不幂等(广告投放,不同地方广告不同).

3)GET请求可以被缓存,POST不能缓存,但是GET缓存的前提是幂等.

f.其它方法(比较少见):

6.请求报头(header):

a.采用键值对结构,每一行是一个键值对,键和值用":空格"分割.

b.query string / body 中的键值对完全由程序员自己定义,header中有标准定义的部分,也要自定义的部分.

c.重要的header规定:

1)Host:服务器主机地址和端口号.

注意:一般情况下,Host里的内容和url是一样的,但是如果使用了代理,就不一样.

2)Content-Length:表示body中数据长度,为了解决粘包问题.

注意:如果没有body,这个字段就没有,如果有body,这个字段必须有,否则为非法请求.

3)Content-Type:表示请求body中数据格式.

4)User-Agent(简称UA):主要包含操作系统版本和浏览器版本,现在主要区分PC端和移动端.

5)Referer:描述了当前网页从哪里来.

如果从浏览器地址来直接输入url,或者收藏夹打开的网站,没有referer.

如果是点击了网页内容,发生了跳转,referer就是刚才搜索的结果页.

6)Cookie(重要):浏览器本地存储数据的一种机制.

a)用户访问服务器的时候会产生一些临时数据,有的放在服务器储存,有的在浏览器这边储存.

b)采用键值对储存,这些数据通常是服务器返回的,不同的网站cookie是独立的,内容是程序员自定义的.

c)有一个很重要的键值对,用来表示用户身份信息,有时候,登录一个网站,再次访问无需重新登陆.

d)实现身份识别,不仅仅需要cookie(客户端),还需要session(服务器端),(类似于医院看病,做检查需要刷病历卡),每个用户都有自己的session(value),以sessionid(key)作为标识,以类似hash的形式存储数据.

e)后续在访问这个网站的页面时,就会在请求中带上cookie,服务器就可以进一步知道客户端的详细情况了.

7.响应首行:HTTP版本号,状态码,状态码描述.

200 成功

404 访问的资源不存在

403 访问的资源没有权限

502 服务器挂了

504 服务器响应超时

302 重定向,跳转至其他页面

8.构造HTTP请求 (html的form表单, js的ajax, 各种语言代码, postman):

a.html的form表单(只能支持get和post两者方法):

 

b.ajax:

1)搜索jQuery CDN,使用url: https://code.jquery.com/jquery-3.7.1.min.js

二.HTTPS(加密):

1.最简单的加密方式是使用对称密钥(所以非对称密钥传输对称密钥):

不同的客户端密钥是不同的,如果客户端生成了密钥,就要把密钥传输给服务器,但是黑客可能截获密钥.

所以要使用非对称加密(公钥和私钥),将对称加密的密钥从客户端传输到服务器。

注意:非对称加密,只传输对称密钥,之后所有的信息由对称密钥进行加密,因为非对称密钥的运算量很大,效率很低,而对称密钥运算量小,效率高.

2.上述的加密方式有一个很大的漏洞,黑客可以通过中间人攻击的方式,仍然可以拿到密钥:


 

3.解决上述问题,可以引入证书机制,使用第三方认证:
a.服务器要在第三方公证机制申请一个证书,第三方机构会审核服务器的资质.在这个证书中包括很多属性,比如网站的域名,证书过期时间,公钥,数字签名等等.

b.客户端想要和服务器进行通信,发送请求之后,服务器会返回证书,这时客户端会对证书进行检验,因为客户端手里持有第三方认证机构的公钥(这个公钥不是通过网络传输的,而是直接系统内置的,客户端安装了windows系统,系统里就会内置各种认证机构的公钥,所以这个环节黑客无法攻击),所以客户端根据手里持有的认证机构的公钥对数字签名解密得到校验和的明文,根据相同的算法,对证书上的其他属性再算一次校验和,对比是否相同.

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

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

相关文章

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档,在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

Windows10设置开启自启动任务

Windows10设置开机自启动任务 在日常的工作中经常会遇到需要给系统设置一个开机自启动的任务,例如开机自启动浏览器,开机自启动代理程序等等,这个时候就需要给系统设置一个开机自启动任务,本文主要介绍一下设置开机自启动任务的几…

使用 Messenger 跨进程通信

什么是Messenger Messenger 也是IPC的方案之一,是基于消息的跨进程通信。基于消息是什么意思?Handler是我们最常用的消息机制,所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已,它们…

微服务全栈:深入核心组件与开发技巧

文章目录 1.服务注册与发现1.1. 客户端注册 (ZooKeeper)1.2. 第三方注册 (独立的服务Registrar)1.3. 客户端发现1.4. 服务端发现1.5. Consul1.6. Eureka1.7. SmartStack1.8. Etcd 2. API 网关2.1. 请求转发2.2. 响应合并2.3. 协议转换2.4. 数据转换2.5. 安全认证 3. 配置中心3.…

什么是交换分区以及如何创建交换分区

介绍 交换分区是Linux中的一项功能,可提供虚拟内存空间和多种好处。它允许操作系统有效地处理内存需求。因此,交换分区提高了系统稳定性、响应能力和繁重工作负载处理。 本指南将探讨交换分区及其优缺点,并概述在 Linux 系统上创建和管理交换分区的步骤。 先决条件 运行 …

PHP自己的框架2.0结合容器技术(重构篇二)

目录 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 3、框架使用容器类来执行public/index.php 4、运行效果还是一样 1、使用容器实现框架加载类运行 2、 创建框架容器类core/fm/Di.php 什么是容器?容器就相当于盒子,把很多类放里…

NTIRE2023-RTSR-Track2 冠军方案详解

编辑 | Happy 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/JQ5g9yn_OdjR8hi_tWc4jA arXiv:2305.02126 , cvpr2023 , code , video 本文了一个实时&轻量图像超分方案Bicubic,它通过下采样模块降低图像分辨率以减少计算量,在网络尾部采用…

三分钟使用ngrok实现内网穿透

1.官网注册 官网地址:https://ngrok.com/ tips:若使用邮箱注册自行认证 2.下载对应部署电脑 压缩包(此处笔者使用自己电脑因此以Windows11作为案例) 解压下载的ngrok压缩包,在对应目录进入命令提示符装口(也可直接…

免费api接口:物流api,企业工商查询api,游戏api。。。

免费api接口,物流api,企业工商查询api,游戏api。。。都有。 Facebook Games Services - Facebook Games Services 为游戏开发者提供了各种服务, 包括(但不限于) 成就 API, 分数 API, 应用通知, 请求, 游戏养成和 Facebook SDK for Unity.Google Play Games Service…

Git diff 使用 vimdiff 对比差异

在Ubuntu中使用Git时,可使用命令行的git diff命令来对比两次提交的差异,但是这种对比查看方式无法直观地查看修改的差异,在对比和查看时不太方便。 可以使用vimdiff作为Git diff的对比工具,这样就方便了许多,Git的配置…

TensorFlow 03(Keras)

一、tf.keras tf.keras是TensorFlow 2.0的高阶API接口,为TensorFlow的代码提供了新的风格和设计模式,大大提升了TF代码的简洁性和复用性,官方也推荐使用tf.keras来进行模型设计和开发。 1.1 tf.keras中常用模块 如下表所示: 1.2 常用方法 …

TCP/IP网络江湖——数据链路层的协议与传承(数据链路层中篇:数据链路层的协议与帧)

0、引言 网络江湖,宛如千年武林,承载着代代传承的文化和传统。在这个广袤的江湖之中,数据链路层犹如武林门派,代代传承着网络通信的精华。这一部分将带领我们深入探讨数据链路层的协议与传承,揭示其在网络江湖中的精彩故事。 就如同江湖中的武者需要基本功夫作为修行的基础…

mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内

要根据经纬度判断一个坐标是否在一个多边形区域内,MySQL提供了几种函数来处理地理空间数据,其中包括用于处理多边形区域的函数。 1.创建一个包含多边形区域的表: 首先,创建一个表来存储多边形区域。可以使用ST_GeomFromText函数将…

kuiper 规则sql写法

创建规则对接收到的报文数据进行业务过滤,报文有各种结构的,下面对各种结构报文sql过滤使用进行说明 下面sql规则统一对temperature大于20的数据进行过滤 1:单层结构报文 {"temperature": 35,"humidity": 66 } sql写…

【Leetcode Sheet】Weekly Practice 6

Leetcode Test 2605 从两个数字数组里生成最小数字(9.5) 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 &#xff0c;每个数组中的元素 互不相同 &#xff0c;请你返回 最小 的数字&#xff0c;两个数组都 至少 包含这个数字的某个数位。 提示&#xff1a; 1 < …

MySQL8--my.cnf配置文件的设置

原文网址&#xff1a;MySQL8--my.cfg配置文件的设置_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL8的my.cnf的配置。 典型配置 [client] default-character-setutf8mb4[mysql] default-character-setutf8mb4[mysqld] #服务端口号 默认3306 port3306datadir /work/docker…

一个FlutterCocoapods项目打包问题集锦

一个Flutter&Cocoapods项目打包问题集锦 问题1 github加速问题 cocoapods项目需要访问https://github.com/CocoaPods/Specs.git&#xff0c;众所周知&#xff0c;github经常被墙&#xff0c;导致经常需要借助加速来下载和访问&#xff0c;这里可以使用油猴脚本或者Fastgi…

kibana报错内存溢出问题解决

一、背景&#xff1a; kibana内存溢出&#xff0c;进程被kill掉&#xff0c;导致前端页面访问不到。 报错内容 二、报错原因&#xff1a; 发现是前端 js 报的内存 oom 异常&#xff0c;通过网上资料发现node.js 的默认内存大小为1.4G Node 中通过 JavaScript 使用内存时只能…

Promethues(五)查询-PromQL 语言-保证易懂好学

文章目录 一、介绍二、PromQL 数据类型三、常量1 字符串2 浮点 四、时间序列选择器 Time series Selectors1 即时矢量&#xff08;Instant vector&#xff09;选择器2 范围矢量选择器2.1 时间长度2.2 偏移修饰符2.3 修饰符 3 避免慢速查询和过载 五、子查询六、操作符 Operato…

【C++】深拷贝和浅拷贝 ② ( 默认拷贝构造函数是浅拷贝 | 代码示例 - 浅拷贝造成的问题 )

文章目录 一、默认拷贝构造函数是浅拷贝1、默认拷贝构造函数2、默认拷贝构造函数是浅拷贝机制 二、代码示例 - 浅拷贝造成的问题 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 如果 C 类中 没有定义拷贝构造函数 , C 编译器会自动为该类提供一个 " 默认的拷贝构造函…