大菜鸡对动态网络和网络协议的naive理解

2023-12-14 18:08

本文主要是介绍大菜鸡对动态网络和网络协议的naive理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

建议在阅读这篇之前看一下web的基本运作方式(如果不知道的话):

关于网络知识(网络运作方式)的常识(也是在下的菜鸡理解)

好了,先来具体看一下关于协议的东西。协议是计算机通过网络交流要共同遵循的套路,网络协议对交流过程中可能遇到的各种问题该咋办都做了规定。协议就像是人类交流的语言。TCP/IP协议像汉语一样用得最多。
TCP/IP协议群是用的最多,http就是其中一个。

ISO(international organization for standardization,国际标准化机构)规定了宏观的七层网络体系,TM我至今没懂七层究竟都他妈在干啥。每层都干自己的事情,层层互不干扰。某一层协议变化并不影响其它层。举个例子:电话有两层,语音和电气层,你说话不用考虑电流是啥,电话只管转化电流而不管你说啥。你从中文改成英文不会对电气层产生任何影响。

然后TCP/IP把七层弄成四层了:http就在最高的4层应用层saf

http主要规定了web的信息交换的格式方法。即规定了如何互相请求和应答,请求和应答以文本的形式传输,以及这种文本的格式等。
在这里插入图片描述
这张图很清楚地描述了各协议的配合和http负责的东西。我发现http负责的东西在开始那个链接里其实已经讲过了。
http最牛逼的是它规定了消息的格式:

请求消息的格式:

HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。
HTTP请求由状态行、请求头、请求正文三部分组成:

状态行:包括请求方式Method、资源路径URL、协议版本Version;

请求头:包括一些访问的域名、用户代理、Cookie等信息;
中间有个空行。
请求正文:就是HTTP请求的数据(这具体是啥我也不知道,请大佬在评论多多指教)。

备注:请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除,其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中,请求正文部分可以省略,直接将想要获取的资源添加到URL中。下图所示就是GET的请求,没有请求正文。详细的说明在下边。
现在大多数协议版本为http/1.1。

二、HTTP响应

服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

HTTP响应由三部分组成:状态行、响应头、响应正文;

状态行:包括协议版本Version、状态码Status Code、回应短语;

响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;

响应正文:就是响应的具体数据,一般是html代码,浏览器会显示。

常见状态码的含义

    200---OK/请求已经正常处理完毕301---/请求永久重定向302---/请求临时重定向304---/请求被重定向到客户端本地缓存400---/客户端请求存在语法错误401---/客户端请求没有经过授权403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限404---/客户端请求的URL在服务端不存在500---/服务端永久错误503---/服务端发生临时错误

关于一些主要代码比如Accept或ETag等的意思,感觉知道好像没啥用?如果觉得有用就自己Google吧,反正我不会。

然后我们看一下动态网络。。。。

实现动态网络的方法大概有几种

CGI(Commen Gateway Interface,直译过来大概是通用网关接口,即基于服务器的动态程序),基于客户端(浏览器)的动态处理;
还有就是web映射。

CGI

CGI是存在于服务器的程序,可由多种高级语言编写(c++,Java。。。),这些程序可以根据浏览器的信息(比如用户的输入等),自动计算或去别的数据库查找,然后自己将获取的信息生成格式化的HTML代码,发送回客户端。而用户出入后点击提交等按钮实际上是指定了URL(网址),比如http://www.ooo.co.jp/a.cgi就是点击按钮后浏览器实际发出的请求。
CGI的工作流程如下:
1.浏览器通过URL发出请求消息
2.经过DNS等层层处理被服务器收到
3.CGI程序启动运行去计算或查数据库或干别的指定的事
4.CGI生成HTML
5.发出相应消息给客户端
6.客户端浏览器显示。

基于客户端(浏览器)的动态处理

可以在HTML中指定小程序,浏览器发现有陷入小程序的要求时,再向服务器申请下载小程序,下完后又浏览器解码执行。所以执行者是浏览器而不是服务器,跟上面那个不同。

web映射

因为服务器的数据会经常更新,所以浏览器访问服务器时服务器会给元数据(即版本信息,更新信息等,和外卖的票挺像的)。浏览器就会根据这来自动定期访问服务器。若没有用户申请,两者都用元数据交流,不用文件本身交流,提高了效率。

希望大佬能发现我理解错或不足之处,评论指出

下面放上我老婆,希望她能带给我好运,希望她能让更多大佬在评论指教。
在这里插入图片描述

这篇关于大菜鸡对动态网络和网络协议的naive理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493505

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o