【总结】HTTP
一.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 连接中可以发送多个请求
随机推荐
- SQL Server 2008 R2执行存储过程sp_MailItemResultSets引起大量PREEMPTIVE_OS_WAITFORSINGLEOBJEC等待
从监控工具DPA中发现一个数据库(SQL Server 2008 R2)的等待事件突然彪增,下钻分析发现数据库执行存储过程sp_MailItemResultSets时,引起了非常严重的等待(Hig ...
- gateway(二、过滤器)
过滤器其实是路由转发+过滤器 自定义过滤器 首先创建一个类继承下边两个类,实现过滤器 然后在启动项中通过创建bean的方式创建路由器 @Componentpublic class TimeFilter ...
- Redis 4.0.2安装与卸载
安装 使用root用户安装: 1.wget http://download.redis.io/releases/redis-4.0.2.tar.gz 2.tar -zxvf redis-4.0.2.t ...
- IDEA 使用的配置
IDEA 使用 工欲善其事必先利其器,选择适合自己的 IDE,会让自己事倍功半.作为 Java 开发环境,有人喜欢 Eclipse,有人喜欢 idea,这其中的差别对比这里不做对比,需要了解的朋友可以 ...
- 在Python中使用OpenCV(CV2)对图像进行边缘检测
转载:https://blog.csdn.net/cumtb2002/article/details/107798767 Modules used: 使用的模块: For this, we will ...
- 对ACE和ATL积分
下载source code - 39.66 KB 介绍 这篇文章展示了一种结合ACE和ATL的方法.它不打算作为功能演示,而是作为一个小型的"入门"解决方案,展示实现此目标的可行方 ...
- IDEA中,已经被加到版本库的文件如何在提交的时候忽略它们
因为某些资源共享的原因,我在本地调试的时候需要修改Java启动程序类上的一些配置,禁用掉Kafka等等.然后我就想 把这些本地调试需要修改的但是线上服务不需要修改的给忽略掉,于是加入到了.gitign ...
- RHSA-2017:1931-中危: bash 安全和BUG修复更新(代码执行)
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- shell-添加条件测试的多种方法语法介绍与简单实战
1. 条件测试 1) 测试语句 1) 条件测试语法 在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作,有时也会通过与if等条件语句相结合,使我们可以方便的完成判断. ...
- rxjs入门4之rxjs模式设计
观察者模式 (Observer Pattern) 观察者模式其实在日常编码中经常遇到,比如DOM的事件监听,代码如下 function clickHandler(event) { console.lo ...