网络原理--http

目录

一、   DNS(应用层协议)

1、域名概念

2、维护ip地址和域名之间的映射(域名解析系统)

3、DNS系统(服务器)

4、如何解决DNS服务器高并发问题

二、HTTP(应用层协议)

1、http协议使用场景

2、抓包工具获取http格式

3、http中请求格式

(1)首行

(2)请求头(header)

(3)空行

(4)正文(body)

4、http中响应格式

(1)首行

(2)响应头

(3)空行

(4)正文(body)

5、GET和POST的区别

6、客户端构造HTTP请求

三、HTTPS

1、HTTP与HTTPS的区别

2、明文、密文、密钥

3、密钥加密的两种方式

4、https加密

(1)先引入对称加密

(2)引入非对称加密

(3)中间人攻击

(4)解决中间人攻击问题


一、   DNS(应用层协议)

1、域名概念

ip地址表示一个设备在网络上的位置,但是我们访问一个网站时,ip地址不方便记忆,且ip地址也不方便宣传,所以就有了域名,域名与ip地址之间具有映射关系,域名是一些字符串,表示实际意义,例如:www.sogou.com这样的域名,就可以知道我们访问的是搜狗。

2、维护ip地址和域名之间的映射(域名解析系统)

早期的域名解析系统是通过一个hosts文件来记录域名和ip地址的,例如:

但是也会造成许多不便,例如:如果一组ip和域名之间关系更新了,那就需要更新每个用户的hosts文件,效率低。

3、DNS系统(服务器)

把ip地址与域名之间的映射关系保存到DNS服务器中,如果后续客户端想访问某个域名,就会先给该服务器发送请求,获取到ip地址,然后再访问目标网站。即使后续一组ip和域名之间关系更新了,就只需要修改服务器。

4、如何解决DNS服务器高并发问题

如果同一时间内,多个客户端同时向DNS发起请求,服务器如何抗住高需求量???

无法增加服务器的资源,因为服务器的资源(CPU、内存、硬盘、网络宽带等)是有限的。

(1)开源

各个网络运营商可以自己搭建DNS镜像服务器,该服务器的功能、数据与DNS服务器一样,这样客户端就可以将请求发送给离自己较近的服务器了。

(2)节流

减少请求量,若一个用户访问了一个网站,就可以把结果保存到本地缓存区,短时间内若再次访问时就可以不用向DNS服务器发送请求了,使用本地缓存结果即可。

二、HTTP(应用层协议)

1、http协议使用场景

(1)、浏览器打开网站;

(2)、手机APP访问对应服务器。

2、抓包工具获取http格式

Fiddler工具,专门获取http格式。本质上是一个“代理”,客户端请求先被Fiddler获取,Fiddler将请求发送给服务器,服务器返回的响应被Fiddler获取,最后将响应给客户端。

http的请求和响应是不同的格式,例如访问Edg浏览器,Fiddler抓包:

请求:

响应:

3、http中请求格式
(1)首行

首行有三个信息:

①http请求的方法:GET、POST等

虽然以上有很多种方法,但现在基本上使用GET和POST是最多的。当需要获取资源时,是GET方法;当需要登陆/上传文件时,是POST方法。

②URL:唯一资源定位符,描述了一个资源在网络上的位置。

协议方案名:形如http://、https://、jdbc:mysql://;

登陆信息认证:现在已经没有了;

服务器地址:域名或者ip地址;

服务器端口号:有些服务器程序端口号可以省略,例如:http请求默认服务器端口号为80,https请求默认端口号为443.

带层次的文件路径:描述要访问服务器的哪个资源。像“目录”一样的写法,但是服务器不一定是以目录的形式储存资源的。

查询字符串(query String):对请求补充说明,是一种键值对结构,以“?”开头的,键值对之间使用“&”分割,键和值之间使用“=”分割,可以包含多个键值对,是程序员自定义的。如果值中包含特殊字符,往往需要进行urlencode操作。

c%2B%2B:表示c++,‘+’的ascii就是2B,再加上“%”表示就是转义的结果。

片段标识符:有的网页内容比较长,就可以分成多个片段,通过片段标识符,可以实现页面跳转。

eg(URL):http://馨园餐厅:5号档口/米线/金汤肥牛?香菜=要&辣度=微辣

③版本号:HTTP/1.1

(2)请求头(header)

是一种键值对结构的数据,每个键值都独占一行,键和值之间使用“:空格”间隔,键值之间是标准规定的。

常见键值对:

①Host:表示服务器的地址和端口;

②Content-Length:正文(body)长度;

③Content-type:body类型;

在请求格式中header有:json、form表单(相当于把查询字符串写到正文中)、form-data;

在响应格式中header有:html(页面骨架)、CSS(页面样式)、JS(页面行为)、json、图片

④User-Agent(UA):表示操作系统版本和浏览器版本。现在主要区分客户端是PC端还是移动端。

⑤Referer:描述了当前页面从哪个页面跳转过来的。

但Referer也会被一些运营商恶意修改。

⑥Cookie:浏览器在本地存储数据的一种机制。例如:上次登陆时间、累计登陆次数、用户信息这些数据都是临时性的数据,存储在浏览器比较合适。Cookie是按照键值对的形式存储数据,键和值之间使用‘=’分割,键值对之间使用‘;’分割,以域名为维度。Cookie数据可以是服务器返回的,也可以是页面生成的。当下次客户端再访问该服务器时,就会把Cookie放入请求中发给服务器。

(3)空行

代表请求头结束。

(4)正文(body)

有的请求有,有的请求没有。若有正文,则格式和请求头中的Content-type密切相关。

4、http中响应格式
(1)首行

首行有三个信息:

①版本号:HTTP/1.1;

②状态码;

③状态码描述。

状态码与状态描述之间关系:

常见状态码:

200 表示OK,成功;

301 永久重定向,有些域名更新了,发送旧的域名会自动跳转到新域名。

302 短暂重定向,有些域名短暂更换,发送旧的域名会自动跳转到新域名,但过一段时间可能就还是旧域名。

404 请求中的资源在服务器中找不到资源;

403 没有访问该资源的权限;

418 彩蛋。

(2)响应头

和请求头格式基本一样,但body类型不一样。

(3)空行

响应头结束标志。

(4)正文(body)

格式和响应头中的Content-type密切相关。

5、GET和POST的区别

GET和POST没有本质的区别,双方可以替换使用。但在使用习惯上存在一点差异。

(1)GET一般将要传输的数据放到查询字符串(URL)中,POST一般将要传输的数据放到正文中;

(2)GET一般是获取数据,POST一般是发送数据。

(3)GET请求可以被浏览器收藏,POST一般不能。

其他说法则是错误或不准确的。(传输数据量、安全性、传输类型、是否幂等(相同请求每次结果都一样)、是否可以被浏览器缓存)。

6、客户端构造HTTP请求

(1)在浏览器地址栏里输入URL,此时构造了一个GET请求;

(2)html中,一些特殊的标签会触发GET请求;

(3)通过form(本质也是html标签)表单触发GET/POST请求;

from action:开始属性,可以包括url、端口号、ip地址等,键值对形式,键值对之间用空格隔开,键和值之间“=”间隔;

input type:输入框中的类型,输入的内容是查询字符串(url中)中的值(value),name后的内容是查询字符串的键(key);类型是“submit”,是一个提交按钮,name是提交按钮的名字。

form只能使用http中的GET和POST方法。

(4)通过ajax方法构造http请求

通过js(编程语言 JavaScript)提供的api来构造http请求。浏览器原生提供了ajax的api,原生的api比较难用,一些第三方库封装了ajax,eg:jquery库,封装了ajax的api。

①先引入第三方库:jquery库(jQuary CDN)

通过script标签引入第三方库。

②编写代码

$是jquery库的全局变量,ajax是一个方法,参数是一个js对象。

(5)借助第三方工具构造请求(Postman)

查询字符串:

正文:

生成http请求:

抓包:

三、HTTPS

1、HTTP与HTTPS的区别

http在传输时是明文传输,数据未加密;https(SSL+HTTP)数据在传输时是加密了的。

http端口默认为80,https端口默认为443。

2、明文、密文、密钥

加密过程:明文+密钥→密文  

解密过程:密文+密钥→明文

3、密钥加密的两种方式

(1)对称加密:加密和解密使用的密钥是同一个;

(2)非对称加密:有一对密钥,一个是公钥(可以公开),另一个是私钥(不能公开);公钥可以用于加密,也可以用于解密。

4、https加密
(1)先引入对称加密

以上即使黑客入侵了路由器,也拿不到密钥进行解密。但以上存在个问题:每个客户端请求对应的密钥都不应该相同,要求客户端在发送请求时也需要将自己的密钥发送给服务器。此时若黑客入侵路由器,就拿了密钥解密客户端信息,信息就会被泄漏。

(2)引入非对称加密

以上即使黑客入侵路由器拿到公钥了,由于服务器没有私钥,也无法解密请求。但仍然会存在中间人攻击问题。

(3)中间人攻击

此时黑客入侵,对于对称密钥的加密使用的是路由器的公钥和私钥,此时黑客就可以使用私钥解密,服务器也不会发现端倪。

(4)解决中间人攻击问题

此时黑客入侵,拿到服务器的公钥后,私自改变公钥后,客户端计算出的检验和就和数字签名不一样,客户端就会发现公钥不是服务器的。

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

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

相关文章

开源云真机平台-Sonic平台-python自定义脚本-config.json方式实现全局配置参数的读写操作

【主要功能】 config.json方式实现全局配置参数的读写操作 使用python实现以下功能: 1、使用将接口获取的变量值,写入到当前目录下的config文件中,如delayTime10; 2、读取当前目录下的config文件中,特定变量的值&…

修改默认负载均衡策略(Ribbon)

修改方式 配置类配置文件 配置类 增加配置类:配置类必须拥有 Configuration 且不能在 ComponentScan 包下 package com.learning.springcloud.config; import com.alibaba.cloud.nacos.ribbon.NacosRule; import com.netflix.loadbalancer.IRule; import org.sp…

vue3深入组件:组件事件

触发与监听事件 在组件的模板表达式中&#xff0c;可以直接使用 $emit 方法触发自定义事件&#xff1a; <button click"$emit(someEvent)">click me</button>父组件可以通过 v-on (缩写为 ) 来监听事件&#xff1a; <MyComponent some-event"…

fs 模块

1. fs写文件 1.1 普通写入 const fs require(fs) // 异步写入 fs.writeFile(./hello.txt,刚刚我错过的大雨,err>{console.log(err); }) // 同步写入 fs.writeFileSync(./text.txt,hello boy!)1.2 文件的追加写入 const fs require(fs) fs.appendFile(./text.txt,\r\r\r…

【华为OD机试真题2023CD卷 JAVAJS】高效货运

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 高效货运 知识点递归循环 时间限制:1s 空间限制:32MB 限定语言:不限 题目描述: 1.老李是货运公司承运人,老李的货车额定载货重量为wt 2.现有两种货物,货物A单件重量为wa,单件运费利润为pa,货物B单件重量为wb,单…

0115qt聊天室客户端+数据库

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QSqlDatabase>//数据库管理类 #include <QSqlQuery>//执行sql语句类 #include <QSqlRecord>//数据库记录类 #include <QSqlError>//数据库错误类 #include <QMessageBox>/…

win10安装ssh服务

前置条件&#xff1a; 远程虚拟机&#xff0c;防火墙关闭&#xff0c;本地主机与虚拟机互相可以ping通 虚拟机是win10专业版本 操作步骤&#xff1a; 1、搜索框搜索“Windows PowerShell”并以管理员身份运行 2、输入如下代码&#xff0c;检查本地是否有ssh服务&#xff0c…

【Docker】网络模式➕自定义网络

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 一.Docker网络模式的介绍 二. 网桥模…

Linux内核架构和工作原理详解(二)

Linux内核体系结构简析简析 图1 Linux系统层次结构 最上面是用户&#xff08;或应用程序&#xff09;空间。这是用户应用程序执行的地方。用户空间之下是内核空间&#xff0c;Linux 内核正是位于这里。GNU C Library &#xff08;glibc&#xff09;也在这里。它提供了连接内核…

【react】记录一次react组件props依赖异步数据(setFieldsValue)后传递form给子组件,再逐层传递给孙子组件引起的未渲染异常

背景 react祖父组件设置异步数据&#xff08;setFieldsValue&#xff09;后传递form给子组件&#xff0c;再逐层传递给孙子组件引起的未渲染异常&#xff0c;孙子组件如果不设置useEffect和useState去监听value的值进行重渲染&#xff0c;会出现获取得到value最新值&#xff0…

【JVM】类的生命周期

目录 类的生命周期 加载阶段 连接阶段 初始化阶段 类的使用阶段 类的加载阶段 类的生命周期 加载阶段 在加载阶段&#xff0c;类加载器首先会通过一个类的全限定名来获取定义此类的二进制字节流。这个步骤主要是将整个Class 文件解析成二进制流。 &#xff08;全限定名是…

海外代理IP怎么用?常见使用问题及解决方案

海外代理IP是指提供全球范围内的代理服务器&#xff0c;代理服务器充当IP与目标网站之间的中介&#xff0c;可以起到安全匿名、提高网速、突破网络壁垒的作用。在使用代理IP的过程中&#xff0c;用户可能会遇到各种挑战&#xff0c;如连接问题、速度慢等。理解这些问题的原因并…

HCIP第一次练习 -- RIP复习实验

要求&#xff1a; 需求:R1-R2-R3-R4-R5运行RIPV2 R6-R7运行RIPV1 1.使用合理地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回172.16.1.1/24172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条自数量,增加路由传递安全性 5.R5创建一个环回模拟运营商,不…

申泰勇教练的独家人物化身系列即将登陆 The Sandbox

申泰勇&#xff08;Shin Tae-yong&#xff09;教练是足球界的传奇人物&#xff0c;他来到 The Sandbox&#xff0c;推出了自己的专属人物化身系列。作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练&#xff0c;他的传奇经历现在已经影响到了虚拟世界。 向过去、现在和未…

在Dynamics 365中通过代码为用户添加角色

作为一个Dynamics 365开发者&#xff0c;你可能会遇到这样的需求&#xff1a;通过代码为用户分配角色。这个任务的实现方式可能并不明显&#xff0c;因为你不能直接创建systemuserroles实体。但别担心&#xff0c;我将在这篇文章中解释如何做到这一点。 首先&#xff0c;我们需…

基于ArcGIS的晕线制作

在借助ArcGIS进行制图时&#xff0c;我们有时需要为矢量边界添加晕线&#xff0c;今天就来探索一下基于ArcGIS的晕线制作操作。 软件版本&#xff1a;ArcMap10.4.1 方法一&#xff1a;制作多环缓冲区 工具路径&#xff1a;Analysis Tools-Proximity-Mutiple Ring Buffer 思…

Python 基础(七):与时间相关的模块

目录 1 time 模块1.1 struct_time 类1.2 常用函数 1 time 模块 time 模块提供了很多与时间相关的类和函数&#xff0c;下面我们介绍一些常用的。 1.1 struct_time 类 time 模块的 struct_time 类代表一个时间对象&#xff0c;可以通过索引和属性名访问值。对应关系如下所示&…

前后端跨域问题

告别烦恼&#xff0c;彻底解决跨域问题的终极指南-chrome的安全进阶之路_chrom 强制跨域-CSDN博客

融优学堂-艺术史

导论4 1.【单选题】根据导论的讲解&#xff0c;下列表述正确的是&#xff08;&#xff09;。&#xff08;1&#xff09;艺术品是因人的活动而被创造出来的人工制品。&#xff08;2&#xff09;许多物品被制造出来时&#xff0c;最初的目的是满足某种实用的用途&#xff0c;而不…

在linux安装LAStools

LAStools下载&#xff1a; https://github.com/LAStools/LAStools/releases 编译安装&#xff1a; # 设置安装路径 cmake -DCMAKE_INSTALL_PREFIX/home/vis/work/SourceCode/LAStools-2.0.2/build cmake . cmake --build . make install编译后的库&#xff1a;