一.HTTP

1.http

HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

HTTP 主要内容分为三部分,超文本(Hypertext)、传输(Transfer)、协议(Protocol)

(1)超文本:超文本就是不单单只是本文,它还可以传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转

(2)传输:传输就是数据需要经过一系列的物理介质从一个端系统传送到另外一个端系统的过程。通常我们把传输数据包的一方称为请求方,把接到二进制数据包的一方称为应答方

(3)协议:网络中(包括互联网)传递、管理信息的一些规范

2.https

是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。它其实就是 HTTP + SSL 协议组合而成

3.http和https区别

(1)最简单的,HTTP 在地址栏上的协议是以 http:// 开头,而 HTTPS 在地址栏上的协议是以 https:// 开头

(2)HTTP 是未经安全加密的协议,它的传输过程容易被攻击者监听、数据容易被窃取、发送方和接收方容易被伪造; HTTPS 是安全的协议,它通过 密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法 能够解决上面这些问题

(3)HTTP 的默认端口是 80,而 HTTPS 的默认端口是 443

4.http get和post的区别

(1)get 方法一般用于请求资源,post方法一般用于提交表单

(2)get 方法是不安全的,因为你在发送请求的过程中,你的请求参数会拼在 URL 后面,从而导致容易被攻击者窃取,对你的信息造成破坏和伪造; post 方法是把参数放在请求体 body 中的,这对用户来说不可见

(3)get 请求的 URL 有长度限制,而 post 请求会把参数和值放在消息体中,对数据长度没有要求

(4)get 请求会被浏览器主动 cache,而 post 不会,除非手动设置

(5)get 请求在发送过程中会产生一个 TCP 数据包;post 在发送过程中会产生两个 TCP 数据包。对于 get 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 post,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)

5.什么是无状态协议,HTTP 是无状态协议吗

对交互场景没有记忆能力。无论哪个客户端请求,都返回相同的资源。可以通过其它技术使HTTP保持状态(cookie和session)

6.session和cookie的区别

(1).session 在服务器端,cookie 在客户端(浏览器)

(2).session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效

(3).单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。对于session来说并没有上限

7.禁用cookie,还想用session?

url重写。在响应消息的实体内容中必须包含下一次请求的超链接, 将sessionid作为超链接的URL地址的一个特殊参数

二.TCP和UDP

1.UDP

1.基本概念

UDP ,用户数据报协议。它不需要所谓的握手操作,从而加快了通信速度,允许网络上的其他主机在接收方同意通信之前进行数据传输

2.特点

(1)UDP 能够支持容忍数据包丢失的带宽密集型应用程序(视频直播)

(2)UDP 具有低延迟的特点

(3)UDP 能够发送大量的数据包

(4)UDP 能够允许 DNS 查找,DNS 是建立在 UDP 之上的应用层协议

2.TCP

1.基本概念

TCP传输控制协议。它能够帮助你确定计算机连接到 Internet 以及它们之间的数据传输。通过三次握手来建立 TCP 连接,三次握手就是用来启动和确认 TCP 连接的过程。一旦连接建立后,就可以发送数据了,当数据传输完成后,会通过关闭虚拟电路来断开连接

2.特点

(1)TCP 能够确保连接的建立和数据包的发送

(2)TCP 支持错误重传机制

(3)TCP 支持拥塞控制,能够在网络拥堵的情况下延迟发送

(4)TCP 能够提供错误校验和,甄别有害的数据包。

3.TCP和UDP区别

4.三次握手

(一).流程

(1)客户端发送一个syn到服务器,序列号x

(2)服务器收到syn后,发送一个syn-ack作为答复,确认号x+1,序列号y

(3)客户端收到syn+ack后,发送一个ack,确认号y+1

(二).实例

小明给小红打电话,接通了后,小明说喂,能听到吗,这就相当于是连接建立。

小红给小明回应,能听到,你能听到我说的话吗,这就相当于是请求响应。

小明听到小红的回应后,好的,这相当于是连接确认。在这之后小明和小红就可以通话/交换信息了

5.四次挥手

(一).流程

(1)首先,客户端应用程序决定要终止连接(这里服务端也可以选择断开连接)。这会使客户端将 FIN 发送到服务器,并进入 FIN_WAIT_1 状态

(2)当服务器收到 FIN 消息时,服务器会立刻向客户端发送 ACK 确认消息,客户端就进入 FIN_WAIT_2 状态,然后等待来自服务器的 FIN 消息

(3)服务器发送 ACK 确认消息后,一段时间(可以进行关闭后)会发送 FIN 消息给客户端,告知客户端可以进行关闭

(4)当客户端收到 FIN 消息时,就会由 FIN_WAIT_2 状态变为 TIME_WAIT 状态。处于 TIME_WAIT 状态的客户端允许重新发送 ACK 到服务器为了防止信息丢失。客户端在 TIME_WAIT 状态下花费的时间取决于它的实现,在等待一段时间后,连接关闭,客户端上所有的资源(包括端口号和缓冲区数据)都被释放。

(二).实例

小明对小红说,我所有的东西都说完了,我要挂电话了。

小红说,收到,我这边还有一些东西没说。

经过若干秒后,小红也说完了,小红说,我说完了,现在可以挂断了

小明收到消息后,又等了若干时间后,挂断了电话

6.为什么是三次握手?

确保双方都有收发数据的能力

7.为什么是四次挥手?

关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接

三.http进阶

1.输入url到响应,经历了哪些过程?

(1)dns查询

①首先去本地dns缓存查询,如果查到,直接返回ip

②查询host文件是否配置ip

③按本地dns服务器(ISP域:互联网服务提供商)—>根域名服务器(www) -> 顶级域名服务器(com edu) -> 权威 DNS 服务器(baidu.com)后

(2)浏览器和目标服务器建立tcp连接(三次握手)

(3)请求和传输数据(HTTP 1.1 后默认使用长连接,只需要一次握手即可多次传输数据)

2.简述 HTTP1.0/1.1/2.0 的区别

(1)http1.0

HTTP 1.0 是在 1996 年引入的,从那时开始,它的普及率就达到了惊人的效果。

HTTP 1.0 仅仅提供了最基本的认证,这时候用户名和密码还未经加密,因此很容易收到窥探。

HTTP 1.0 被设计用来使用短链接,即每次发送数据都会经过 TCP 的三次握手和四次挥手,效率比较低。

HTTP 1.0 不支持断点续传,也就是说,每次都会传送全部的页面和数据。

(2)HTTP1.1

HTTP 1.1 是 HTTP 1.0 开发三年后出现的,也就是 1999 年,它做出了以下方面的变化

HTTP 1.1 使用了摘要算法来进行身份验证

HTTP 1.1 默认使用长连接,长连接就是只需一次建立就可以传输多次数据,传输完成后,只需要一次切断连接即可。长连接的连接时长可以通过请求头中的 keep-alive 来设置

HTTP 1.1 支持断点续传,通过使用请求头中的 Range 来实现。

(3)HTTP2.0

HTTP 2.0 是 2015 年开发出来的标准

头部压缩,由于 HTTP 1.1 经常会出现 User-Agent、Cookie、Accept、Server、Range 等字段可能会占用几百甚至几千字节,而 Body 却经常只有几十字节,所以导致头部偏重。HTTP 2.0 使用 HPACK 算法进行压缩

二进制格式,HTTP 2.0 使用了更加靠近 TCP/IP 的二进制格式,而抛弃了 ASCII 码,提升了解析效率

多路复用,就是在一个 TCP 连接中可以发送多个请求

随机推荐

  1. 加权图的最小生成树、最短路径算法 - java实现

    加权图相关算法 前言 本文主要介绍加权图算法中两个重要应用:最小生成树和最短路径. 求最小生成树时针对的是加权无向图,加权有向图的最小生成树算法成为"最小属树形图"问题,较为复杂, ...

  2. Git的使用--码云

    Git的使用--码云 进入码云官网:https://gitee.com/ 注册or登录账号进入gitee页面(页面结构大同小异). 点击右上角加号--新建仓库,用于存放项目代码 创建项目需要注意的选项 ...

  3. Linux系统编程 —互斥量mutex

    互斥量mutex 前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象.为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也称 ...

  4. gRPC-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) 场景:A服务主动发起 ...

  5. 坐标下降(Coordinate descent)

    坐标下降法属于一种非梯度优化的方法,它在每步迭代中沿一个坐标的方向进行线性搜索(线性搜索是不需要求导数的),通过循环使用不同的坐标方法来达到目标函数的局部极小值.

  6. python-格式化(%,format,f-string)输出+输入

    1-格式化输出: % 1.print('我的姓名是%s,身高%s cm'%(name,height)) 2.%s -str() ; %d–十进制3.传入值的时候一定是个元组,不是列表4.当指定长度时: ...

  7. Arduino重置-复位问题

    转自: https://blog.csdn.net/y511374875/article/details/77845240 三种方式手动重启Arduino 1.Arduino板上重新编写代码时,Ard ...

  8. JavaScript倒计时效果

    实现思路: 输入的时间减去现在的时间就是剩余的时间,但是不能拿着时分秒相减,比如05分减去25分,结果会是负的. 可以用时间戳来做,用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的 ...

  9. Tensorflow学习笔记No.6

    数据的批标准化 本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层). 1.什么是标准化 传统机器学习中标准化也叫做归一化. 一般是将数据映射到指定的范围,用于去除不同维度数据的 ...

  10. 2-K8S常用命令

    kubectl 命令行管理工具 类型 命令 描述 基础命令 create 通过文件名或标准输入创建资源 expose 为Deployment,Pod创建service run 在集群中运行一个特定的镜 ...