一.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. Git源代码管理笔记

    很早之前也学过git但是没有详细的记录,这次是做个复习,巩固 若有不对的地方请您指出 目录 Git和SVN有什么区别? 什么是Git? github仓库 Star和Fork Pull request ...

  2. Python练习题 036:Project Euler 008:1000位数字中相邻13个数字最大的乘积

    本题来自 Project Euler 第8题:https://projecteuler.net/problem=8 # Project Euler: Problem 8: Largest produc ...

  3. 阿里云oss对象存储配置CDN

    阿里云oss对象存储配置CDN 1.打开阿里云CDN 2.填写信息,这个地方要注意,我的备案域名是www.ljwXXX.work,我们可以自定义一个域名,test.ljwXXX.work作为加速域名. ...

  4. Raft 协议

    Paxos 存在的问题 Paxos 算法的描述偏学术化,缺失了很多细节,无法直接应用于工程领域.实际工程应用中的分布式算法大多是 Paxos 的变种,验证这些算法的正确性也成为了一个难题. 举个例子: ...

  5. 走进shiro,构建安全的应用程序---shiro修仙序章

    0. 写在前面 在最近的一个项目当中,我们基于Shiro实现我们系统的认证和授权.借此机会,写几篇博客,总结一下在本次实践当中遇到的问题,和较全面地学习一下Shiro的知识点, 1. 权限管理 权限管 ...

  6. JAVA对象转换为JSON及日期格式转换处理

    1.JSON日期格式转换 默认JSON对DATE类型会转换成一个多属性对象, 而不是单独的一个字符串, 在某些应用处理上不是很方便,  可以利用JsonValueProcessor来实现日期的转换. ...

  7. 引用类型之Array(一)

    Array类型 除了Object之外,Array类型在ECMAScript中也很常用.ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类 ...

  8. 制作u盘启动盘

    制作u盘启动盘 如果是想要制作 windows 系统启动盘,windows 官网提供途径,这里不在赘述. 以下讨论制作 centos 系统启动盘,需要 centos 系统文件,开源,可从官网下载得到. ...

  9. 从0到1进行Spark history分析

    一.总体思路 以上是我在平时工作中分析spark程序报错以及性能问题时的一般步骤.当然,首先说明一下,以上分析步骤是基于企业级大数据平台,该平台会抹平很多开发难度,比如会有调度日志(spark-sub ...

  10. Python+Appium自动化测试(5)-appium元素定位常用方法

    对于Android而言,查找appUI界面元素属性的工具有三种:appium desktop,uiautomatorviewer.bat,weditor.之前已经介绍过了weditor的使用,这里我将 ...