《网络协议》08. 概念补充
title: 《网络协议》08. 概念补充
date: 2022-10-06 18:33:04
updated: 2023-11-17 10:35:52
categories: 学习记录:网络协议
excerpt: 代理、VPN、CDN、网络爬虫、无线网络、缓存、Cookie & Session、RESTful。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png
网络协议
- 1:代理
- 1.1:正向代理
- 1.2:反向代理
- 1.3:相关头部字段
- 2:VPN
- 2.1:作用
- 2.2:VPN 与代理的区别
- 2.3:实现原理
- 3:CDN
- 4:网络爬虫
- 4.1:简易实例
- 4.2:robots.txt
- 5:无线网络
- 6:缓存
- 6.1:响应头
- 6.2:请求头
- 6.3:缓存的使用流程
- 7:Cookie & Session
- 8:RESTful
- 8.1:实践建议
网络协议从入门到底层原理。
1:代理
代理服务器(Proxy Server)。
特点:
- 本身不生产内容
- 处于中间位置转发上下游的请求和响应
- 面向下游的客户端:它是服务器
- 面向上游的服务器:它是客户端
正向代理 / 反向代理:
- 正向代理:代理的对象是客户端
- 反向代理:代理的对象是服务器
1.1:正向代理
作用:
- 隐藏客户端身份
- 绕过防火墙(突破访问限制)
- Internet 访问控制
- 数据过滤
- …
1.2:反向代理
作用:
- 隐藏服务器身份
- 安全防护
- 负载均衡
- …
抓包工具的原理:
Fiddler、Charles 等抓包工具的原理:在客户端启动了正向代理服务。
Wireshark、tcpdump 的原理:通过底层驱动,拦截网卡上流过的数据。
tcpdump:
tcpdump 是 Linux 平台的抓包分析工具,Windows 版本是 WinDump。
使用手册:
https://www.tcpdump.org/manpages/tcpdump.1.html不错的教程:
https://danielmiessler.com/study/tcpdump/
1.3:相关头部字段
2:VPN
VPN(Virtual Private Network),虚拟私人网络。它可以在公共网络上建立专用网络,进行加密通讯。
2.1:作用
- 提高上网的安全性
- 保护公司内部资料
- 隐藏上网者的身份
- 突破网站的地域限制(有些网站针对不同地区的用户展示不同的内容)
- 突破网络封锁
2.2:VPN 与代理的区别
- 软件
- VPN 一般需要安装 VPN 客户端软件
- 代理不需要安装额外的软件
- 安全性
- VPN 默认会对数据进行加密
- 代理默认不会对数据进行加密(数据最终是否加密取决于使用的协议本身)
- 费用
- 一般情况下,VPN 比代理贵
2.3:实现原理
VPN 的实现原理:使用了隧道协议(Tunneling Protocol)
常见的 VPN 隧道协议有:
- PPTP(Point to Point Tunneling Protocol):点对点隧道协议
- L2TP(Layer Two Tunneling Protocol):第二层隧道协议
- IPsec(Internet Protocol Security):互联网安全协议
- SSL VPN(如 OpenVPN)
3:CDN
CDN(Content Delivery Network 或 Content Distribution Network),内容分发网络。
- 利用最靠近每位用户的服务器
- 更快更可靠地将音乐、图片、视频等资源文件(一般是静态资源)传递给用户
CDN 运营商在全国、乃至全球的各个大枢纽城市都建立了机房,部署了大量拥有高存储高带宽的节点,构建了一个跨运营商、跨地域的专用网络。
内容所有者向 CDN 运营商支付费用,CDN 将其内容交付给最终用户。
使用 CDN 前后对比:
使用 CDN 前:
使用 CDN 后:
4:网络爬虫
网络爬虫(Web Crawler),也叫做网络蜘蛛(Web Spider)。模拟人类使用浏览器操作页面的行为,对页面进行相关的操作。
常用爬虫工具:Python 的 Scrapy 框架。
搜索引擎 :
4.1:简易实例
可以使用 Java 的一个小框架 Jsoup 爬一些简单的数据。
- jar 包(jsoup、commons-io):
https://jsoup.org/packages/jsoup-1.13.1.jar
https://mirror.bit.edu.cn/apache//commons/io/binaries/commons-io-2.8.0-bin.zip
爬取目标:https://ext.se.360.cn/webstore/categor
import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.net.URL;public class Main {public static void main(String[] args) throws Exception {// 请求网站:https://ext.se.360.cn/webstore/category// Jsoup使用CSS选择器来查找元素String dir = "F:/T/"; // 爬取后的存放路径String url = "https://ext.se.360.cn/webstore/category";Document doc = Jsoup.connect(url).get();Elements eles = doc.select(".applist .appwrap");for (Element ele : eles) {String img = ele.selectFirst("img").attr("src");String title = ele.selectFirst("h3").text();String intro = ele.selectFirst(".intro").text();// 下载图片String filepath = dir + (title + ".png");FileUtils.copyURLToFile(new URL(img), new File(filepath));}}
}
4.2:robots.txt
robots.txt 是存放于网站根目录下的文本文件,用来告诉爬虫,哪些内容是不应被爬取的,哪些是可以被爬取的。
比如:https://www.baidu.com/robots.txt
因为一些系统中的 URL 是大小写敏感的,所以 robots.txt 的文件名应统一为小写。
robots.txt 并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。
只能防君子,不能防小人。
无法阻止 “不讲武德” 的爬虫爬取隐私信息。
一般格式:
5:无线网络
无线 AP(Access Point):无线接入点。
6:缓存
缓存(Cache)。
通常会缓存的情况是:GET 请求 + 静态资源(比如 HTML、CSS、JS、图片等)。
Ctrl + F5:强制刷新缓存。
实际上,HTTP 的缓存机制远比上图的流程要复杂。
6.1:响应头
-
Pragma:作用类似于 Cache-Control,HTTP/1.0 的产物
-
Expires:缓存的过期时间(GMT 格式时间),HTTP/1.0 的产物
GMT 时间:例如
date: Sat, 19 May 2018 17:17:24 GMT
- Cache-Control:设置缓存策略
- no-storage:不缓存数据到本地
- public:允许用户、代理服务器缓存数据到本地
- private:只允许用户缓存数据到本地
- max-age:缓存的有效时间(多长时间不过期),单位秒
- no-cache:每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存
优先级:Pragma > Cache-Control > Expires。
-
Last-Modified:资源的最后一次修改时间
-
ETag:资源的唯一标识(根据文件内容计算出来的摘要值)
优先级:ETag > Last-Modifie
Last-Modified vs ETag
Last-Modified 的缺陷
- 只能精确到秒级别,如果资源在 1 秒内被修改了,客户端将无法获取最新的资源数据
- 如果某些资源被修改了(最后一次修改时间发生了变化),但是内容并没有任何变化,则会导致相同数据重复传输,没有使用到缓存
ETag
- 只要资源的内容没有变化,就不会重复传输资源数据
- 只要资源的内容发生了变化,就会返回最新的资源数据给客户端
6.2:请求头
- If-None-Match
- 如果上一次的响应头中有 ETag,就会将 ETag 的值作为请求头的值
- 服务器发现资源的最新摘要值跟 If-None-Match 不匹配,就会返回新的资源(200 OK)
- 否则,就不会返回资源的具体数据(304 Not Modified)
- If-Modified-Since
- 如果上一次的响应头中没有 ETag,有 Last-Modified,就会将 Last-Modified 的值作为请求头的值
- 如果服务器发现资源的最后一次修改时间晚于 If-Modified-Since,就会返回新的资源(200 OK)
- 否则,就不会返回资源的具体数据(304 Not Modified)
6.3:缓存的使用流程
7:Cookie & Session
会话(Session)跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话。
常用的会话跟踪技术有 Cookie、Session。
- Cookie 通过在客户端记录信息确定用户身份
- Session 通过在服务器端记录信息确定用户身份
除此以外类似的概念还有 Token、JWT 等。
Cookie:
- 数据存储在浏览器客户端
- 数据有大小和数量的限制
- 适合存储一些小型、不敏感的数据
- 默认情况下,关闭浏览器后就会销毁
Session:
- 数据存储在服务器端
- 数据没有大小和数量的限制
- 可以存储大型、敏感的数据(比如用户信息)
- 默认情况下,未使用 30 分钟后就会销毁
8:RESTful
REST 的全称是:REpresentational State Transfer,表现层状态转移。
REST 是一种互联网软件架构的设计风格:
- 定义了一组用于创建 Web 服务的约束
- 符合 REST 架构的 Web 服务,称为 RESTful Web 服务
8.1:实践建议
-
URL 中使用名词(建议用复数形式),不使用动词。
推荐:/users、/users/6
不推荐:listsers,/getser?id=6,/uer/list,/user/get?id=6 -
使用 HTTP 的请求方法表达动作。
-
一个资源连接到其他资源,使用子资源的形式。
GET /users/6/cars/8
POST /users/8/cars -
API 版本化。
mj.com/v1/users
mj.com/v2/users/66 -
返回 JSON 格式的数据。
-
发生错误时,不要返回 200 状态码。
-
…
今人不见古时月,今月曾经照古人。
——《把酒问月 · 故人贾淳令予问之》(唐)李白
相关文章:

《网络协议》08. 概念补充
title: 《网络协议》08. 概念补充 date: 2022-10-06 18:33:04 updated: 2023-11-17 10:35:52 categories: 学习记录:网络协议 excerpt: 代理、VPN、CDN、网络爬虫、无线网络、缓存、Cookie & Session、RESTful。 comments: false tags: top_image: /images/back…...

利用NVIDIA DALI读取视频帧
1. NVIDIA DALI简介 NVIDIA DALI全称是NVIDIA Data Loading Library,是一个用GPU加速的数据加载和预处理库,可用于图像、视频和语音数据的加载和处理,从而为深度学习的训练和推理加速。 NVIDIA DALI库的出发点是,深度学习应用中…...

TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...

【算法每日一练]-图论(保姆级教程 篇5(LCA,最短路,分层图)) #LCA #最短路计数 #社交网络 #飞行路线 # 第二短路
今天讲最短路统计和分层图 目录 题目:LCA 思路: 题目:最短路计数 思路: 题目:社交网络 思路: 题目:飞行路线 思路: 题目:第二短路 思路: 题目&a…...

德迅云安全为您介绍关于抗D盾的一些事
抗D盾概述: 抗D盾是新一代的智能分布式云接入系统,接入节点采用多机房集群部署模式,隐藏真实服务器IP,类似于网站CDN的节点接入,但是“抗D盾”是比CDN应用范围更广的接入方式,适合任何TCP 端类应用包括&am…...

leetcode算法之位运算
目录 1.判断字符是否唯一2.丢失的数字3.两整数之和4.只出现一次的数字II5.消失的两个数字6.位1的个数7.比特位计数8.汉明距离 1.判断字符是否唯一 判断字符是否唯一 class Solution { public:bool isUnique(string astr) {//利用鸽巢原理做优化if(astr.size()>26) return…...

java常用的几个图片处理工具对Tiff文件的支持
ImageMagick 官网 https://imagemagick.org/, 支持多种格式。命令行工具很适合调试。功能很强大. 还有一款工具GraphicsMagick 是从ImageMagick的基础上研发出来的。 OpenCV 官网 https://opencv.org/ , github地址https://github.com/opencv/opencv&…...
SQL必知会(二)-SQL查询篇(11)-联结表
第12课、联结表 联结表 使用联结:之前的 SELECT 查询某些列,只是针对一张表进行检索的。(即 FROM 表名)。但是如果用户想要使用 SELECT 对存储在不同表中的某些列时,则需要使用联结表的方式来实现。 例子中有建立两个…...
多模态大一统:开启全模态LLM和通用AI时代的大门
多模态大一统:开启全模态LLM和通用AI时代的大门 1. 目前多模态实现的方法1.1 单独训练各领域模型1.2 多任务学习1.3 集成多模态模型1.4 通用多模态模型2. 多模态统一难点2.1 数据集对齐和融合2.2 大规模计算资源需求2.3 各领域特性的兼容性2.4 可解释性和泛化能力3. 全模态的好…...

Alibaba Nacos注册中心实战
为什么需要注册中心 思考:网络请求,如果服务提供者发生变动,服务调用者如何感知服务提供者的ip和端口变化? // 微服务之间通过RestTemplate调用,ip:port写死,如果ip或者port变化呢? String ur…...

京东数据采集与挖掘(京东大数据):2023年10月京东冰箱品牌销售排行榜
鲸参谋监测的京东平台10月份冰箱市场销售数据已出炉! 10月份,冰箱市场的销售额有小幅上涨。鲸参谋数据显示,在京东平台上,今年10月冰箱市场的销量为94万,销售额将近23亿,同比增长超过1%。从价格上看&#x…...
某事业单位转型二类后绩效项目成功案例纪实
——事业单位从公益一类转向二类之后,如何通过绩效考核提高人员积极性 【客户行业】事业单位 【问题类型】绩效管理 【客户背景】 某国家级博物馆是由当地ZF与自然资源局共建共管的事业单位,是一家综合性较强的博物馆,入选过全国热搜博物…...
MySQL 和 SQL Server之间的数据迁移方法
目录 MySQL导入SQL Server 使用 SQL Server Management Studio (SSMS) 导入导出向导: 使用 SQL Server Integration Services (SSIS): SQL Server 导入 MySQL 使用 SQL Server Management Studio (SSMS) 导出数据: 使用 MySQL Workbench…...
单元测试实战(五)普通类的测试
为鼓励单元测试,特分门别类示例各种组件的测试代码并进行解说,供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战(一)Controller 的测试 单元测试实战(二)Service 的测试 单元测试实战&am…...
js 迭代器iterator 和 生成器Generator 10
✌ 文章目录 一、迭代器 iterator二、使用步骤1.引入库2.读入数据 总结 一、迭代器 iterator 迭代器是帮助我们对某个数据结构进行遍历的对象 迭代器:是一个对象,帮助我们对某个数据结构进行遍历 迭代器要符合迭代器协议,必须要有一个特定的n…...

100套Axure RP大数据可视化大屏模板及通用组件库
106套Axure RP大数据可视化大屏模板包括了多种实用美观的可视化组件库及行业模板库,行业模板涵盖:金融、教育、医疗、政府、交通、制造等多个行业提供设计参考。 随着大数据的发展,可视化大屏在各行各业得到越来越广泛的应用。可视化大屏不再…...
【OpenGauss源码学习 —— 执行算子(Append算子)】
执行算子(Append算子) Append 算子ExecInitAppend 函数exec_append_initialize_next 函数ExecAppend 函数ExecEndAppend 函数ExecReScanAppend 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和…...

Java(一)(引用类型的参数在传递,方法重载,面向对象编程基础)
基本类型和引用类型的参数在传递的时候有什么不同? 基本类型的值传递:参数传输存储的数据值 引用类型的值传递:参数传输存储的地址值 传递数组名字的时候,传递的是数组的地址,change方法可以通过地址直接访问我们在堆内存中开辟的数组,然后改变数组,数组中的元素发生变化 方…...
Vue第1天:特性概览
文章目录 Vue.js 简介 Vue的特性 如何使用Vue 安装Vue 通过CDN引入 使用npm 创建Vue实例 结语 Vue.js 简介 Vue.js(通常简称为Vue)是一款流行的JavaScript框架,专注于构建用户界面。它的设计灵感来自于现代的JavaScript框架…...
C++语法基础知识面经汇总
背景:汇总了网上C常考的基础知识,方便复习 1,static关键字 static可以用于成员变量,或者成员函数。存储空间在静态存储区(编译器会将其初始化为0,对应的存储空间直到程序执行结束才会释放)&…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...