http及https分别是什么协议?HTTP和HTTPS通信原理和区别
http及https分别是什么协议?HTTP和HTTPS通信原理和区别2、HTTP 协议工作于客户端、服务端架构之上,浏览器作为 HTTP 客户端,通过 URL 向 HTTP 服务端及 Web 服务器发送所有请求。支持客户 / 服务器模式绝大多数的 Web 开发,都是构建在 HTTP 协议之上的 Web 应用,HTTP 的主要特点可概括如下:1、支持客户 / 服务器模式
HTTP简介1、HTTP 即超文本传输协议,是属于应用层的协议,是一个基于请求与响应模式的无状态的应用层的协议,常基于 TCP 的连接方式。
2、HTTP 目前正处于多个版本共存的情况,包括仍被广泛采用的 1.0 主流最为广泛的 1.1 还有应用较少的用户用的是2.0.
3、1.1 相交于 1.0 最明显的区别是引入了 keep-alive 这项长连接技术,2.0 虽然更合理、更先进,但其推广不开来的原因也是因为 1.1 完全能够满足目前的应用,并且升级上 2.0 的成本太大所导致的,这里主要以 1.1 为准。
HTTP 的特点绝大多数的 Web 开发,都是构建在 HTTP 协议之上的 Web 应用,HTTP 的主要特点可概括如下:
1、支持客户 / 服务器模式
支持客户 / 服务器模式
2、HTTP 协议工作于客户端、服务端架构之上,浏览器作为 HTTP 客户端,通过 URL 向 HTTP 服务端及 Web 服务器发送所有请求。
3、特点:
(1)、简单快速
请求时只需请求方法和路径,请求方法常用的有:GET、POST.
(2)、灵活
允许传输任意类型的数据对象。
(3)、无连接状态
无连接的含义是:限制每次连接,只处理一个请求。服务器处理完客户的请求,并收到客户的应答之后,即断开连接,采用这种方式可以节省传输时间。从http1.1起默认使用的长连接,即服务器需要等待一定时间后,才断开连接,以保证链接特性,虽然目前的一些技术如keep-alive使用了长连接优化效率,但是这些都是http请求之外的,也就是在每个独立的http请求中,你是无法知道当前http是否处于长连接的状态,你始终都要认为http请求在结束后,链接就会关闭,这是http的特性。至于下层实现,是否在结束请求后关闭链接都不会改变这个特性,长连接可以理解为下层实现对上层透明。
(4)、无状态
无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要先前的信息,则必须被重传。可能导致每次链接传送的数据量增大,另一方面,在服务器不需要先前信息的时候,它的应对比较快,http协议目前正处于多个版本控制。
Http请求结构HTTP请求结构
客户端发送一个 HTTP 请求到服务器的请求消息结构,如图,主要有四个部分组成:
请求行, 请求方法,url,协议版本,请求头
请求头由若干个报头组成的,每个报头的结构,都是:
头部字段名(名字),值
这些报头,用来设置 HTTP 请求的一些参数,例如:host 表示被请求资源的主机和端口号。
空行
请求正文
数据体,只在 POST 请求中用到,表示要上传的数据。
数据体和头部之间是有一个空行的。
请求结构分析
请求结构分析
从 Host 到 Cookie 都是请求头;
请求头之后,不管请求正文有没有数据,都会要空一行。
HTTP 响应结构HTTP 响应结构
响应报文主要有三个部分:
(1)、状态行
(2)、协议版本
(3)、状态码
(4)、状态码描述
(5)、响应头部
用来说明客户端要使用的一些附加信息的
(1)、头部字段名
(2)、值
比如说,Date 是用来生成响应的日期和时间,Content-Type 就指定了 MIME 类型的 HTML.
(1)、空行
(2)、响应正文
响应结构分析:
响应结构分析
HTTP 请求 / 响应的步骤http协议定义了文本客户端如何从web服务器,请求web页面,以及服务器如何web页面传送给客户端,http协议采用了请求响应模型,客户端向服务器发送一个请求报文,请求报文包含请求的方法,url,协议版本,请求头部,和请求数据,服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或者错误代码,服务器信息,响应头部,和相应数据。
1.客户端连接到 Web 服务器
一个 HTTP 客户端,通常是浏览器与 Web 服务器的 HTTP 端口,默认端口号是80 建立一个 TCP 套接字连接。
2.发送 HTTP 请求
即通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文
3.服务器接受请求并返回 HTTP 响应
WEB服务器解析该请求,定位请求资源,服务器将资源副本写到TCP套接字,由客户端读取。
4.释放连接 TCP 连接
如果连接模式为 Close 则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接;如果连接模式为 keep-alive 则该链接会保持一段时间,在该时间内,可以继续接受请求。
6.客户端浏览器解析 HTML 内容
客户端浏览器首先去解析状态行,查看表明请求是否成功的状态代码,然后解析每一个响应头,响应头告知以下为若干字节的html文档和文档的字符集,客户端浏览器读取响应数据html,根据html语法,对其进行格式化,并在浏览器窗口中显示。
面试问答:1、在浏览器地址栏键入 URL 按下回车之后经历的流程?
答案:DNS解析,TCP链接,发送HTTP请求,服务器处理请求并返回HTTP请求报文,浏览器解析渲染页面,链接结束。
(1)、DNS 解析
首先,浏览器会依据 URL 逐层查询 DNS 服务器缓存,解析 URL 中的域名所对应的 IP 地址。DNS 缓存从近到远,依次是:浏览器缓存、系统缓存、路由器缓存、IPS 服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。从哪个缓存找到对应的 IP 则直接返回,不再查询后面的缓存。
(2)、TCP 连接
根据 IP 地址和对应端口(默认是80端口)和服务器建立 TCP 连接(三次握手)。
(3)、发送 HTTP 请求
浏览器发出读取文件的HTTP请求,该请求将发送给服务器,这也是前面讲解的HTTP。
(4)、服务器处理请求并返回 HTTP 报文
(5)、浏览器解析并渲染页面
(6)、浏览器释放 TCP 连接(四次挥手)
其中,第五步和第六步可以认为是同时发生的,哪一步在前没有特别的要求。
HTTP状态码分类1XX:指示信息-表示请求已经接受,继续处理。
2XX:成功-表示请求已经被成功接收,理解,接受。
3XX:重定向-要完成请求必须进行更进一步操作。
4XX:客户端错误-请求有语法错误,或者请求无法实现。
5XX:服务器端错误-服务器未能实现合法的请求。
常见状态码200 OK:正常返回信息
400 Bad Request:客户端请求有语法错误,不能够被服务器端所理解
401 Unauthorized:请求未经授权这个状态码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在,eg:输入错误的URL
500 Internal Server Error:服务器发生不可预期的错误
503 Server Unavailable:服务器当前不能够处理客户端的请求,一段时间后可能回复请求
HTTPS 简介https和http
在 HTTP 下面,加入了一个 SSL 层,从而具有了保护交换数据隐私、完整性、提供对网站服务器身份认证的功能。简单来说,HTTPS 就是安全版的 HTTP.
1、SSL(Security Sockets Layer 安全套接层)
(1)、为网络通信提供安全及数据完整性的一种安全协议
(2)、位于 TCP 与各应用层之间,是操作系统对外提供的 API SSL3.0 后更名为 TLS
(3)、是如何保证网络通信安全和数据完整性?身份认证,和数据加密.采用身份验证和数据加密保证网络通信的安全和数据的完整性
2、加密的方式
在前面学习 HTTP 的时候,通过抓包看了相关的协议,发现,不管是 GET 还是 POST 客户端和服务端之间没有任何身份确认的过程,数据全部明文传输,客户端发出的请求很容易被黑客截获,如果此时黑客冒充服务器,则可返回任意信息给客户端而不被客户端察觉,这便是所谓的劫持。
3、如何给数据裹上一层外套?人们便想到了加密,加密主要有以下几种方式:
对称加密: 加密和解密都使用同一个秘钥,相对于非对称加密,效率要高很多
非对称加密: 加密使用的秘钥和解密使用的秘钥是不相同的,分别称为:公钥、私钥。公钥和算法都是公开的,私钥是保密的。非对称算法性能较低,但是安全性超强。但由于加密特性,能加密的数据长度也是有限的
哈希算法: 将任意长度的信息转换为固定长度的值,算法不可逆。就比如 MD5 算法
数字签名: 签名,便是在信息的后面加上一段内容,这些内容,是经过哈希后的值,可以证明信息是某个人发出/认同的,且没有被修改过。哈希值一般都会加密后,也就是签名之后,再和信息一起发送,以保证这个哈希值不被修改。
但是在实际的执行中,人们发现,仅使用其中的某种加密方式,并不能满足生产要求。
要么非对称加密性能过低,要么对称加密秘钥容易泄露,因此,HTTPS 使用的是证书配合各种加密手段的方式,打出一套相对安全的组合拳。
HTTPS 数据传输流程HTTPS 在进行数据传输之前,会与网站服务器和 WEB 浏览器进行一次握手,在握手时,确定双方的加密密码信息,具体过程如下:
(1)、浏览器将支持的加密算法信息发送给服务器;
(2)、服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器;
(3)、浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器;
(4)、服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器;
(5)、浏览器解密响应消息,并对消息进行验证,之后进行加密交互数据。
HTTP 和 HTTPS 的区别HTTPS 需要到 CA 机构申请证书,需要一定的费用,HTTP 不需要
HTTP 是超文本传输协议,信息明文传输;而 HTTPS 则是具有安全性的 SSL 加密传输协议,因此是密文传输
使用完全不同的连接方式。HTTPS 默认使用 443 端口,HTTP 默认使用 80 端口
HTTP 是无状态的,SSL 是有状态的,因此可以理解为:HTTPS = HTTP 加密 认证 完整性保护
HTTPS 真的很安全吗?那倒未必。由于用户习惯,通常准备访问某个网站时,在浏览器中,只会输入一个域名,比如,访问百度,就只会输入:www.baidu.com,不会在域名前面加上 http:// 或 https://,都是由浏览器自动填充。
当前所有浏览器默认填充都是 http://,一般情况,网站管理员会采用 301、302 跳转的方式由 HTTP 跳转到 HTTPS. 但是在这个过程中,会使用到 HTTP 因此在这一步容易发生劫持。
这个时候,可以使用 HSTS(HTTP Strict Transport Security) 优化,即:HTTP 严格传输安全。
HSTS 目前正在推行中,并未成为主流。
Socket 简介
我们知道,两个进程如果需要进行通信,最基本的前提,是能唯一的标识一个进程。
在本地进程通信中,可以使用 PID 来唯一标识一个进程。但在网络中,就要另辟蹊径了。
IP 层的 IP 地址,可以唯一标识主机,而 TCP 协议和端口号,可以标识主机中的一个进程。这样就可以利用 IP 地址 协议 端口号,去标识网络中的一个进程。能够唯一标识网络中的一个进程后,它们就可以利用 Socket 进行通信。
1、什么是 Socket?
Socket 跟 TCP/IP 协议没有必然的联系,Socket 是对TCP/IP协议的抽象,是操作系统对外开放的接口。
Socket 编程接口在设计之初,就希望能适应其他的网络协议,所以,Socket 的出现,只是使得程序员更方便的使用 TCP/IP 协议栈而已,是对 TCP/IP 协议的抽象,从而形成了我们知道的最基本的函数接口,比如:create、listen 等,Socket 起源于 Unix 而 Unix 是遵从『一切皆文件』的哲学,Socket 是基于一种:从打开、到读和写、再到关闭的这种模式去实现的。服务器和客户端各自维护一个文件,在建立连接打开后,可以向自己文件写入内容,供对方读取,或者读取对方的内容。
在通信结束时,就会关闭文件。
Socket 通信流程前面说过,Socket 是基于:从打开、到读和写、再到关闭的这种模式去实现的,这里以使用 TCP 协议通信的 Socket 为例,其通信流程如下:
Socket 通信流程
服务器先创建Socket,之后在为Socket绑定IP地址和端口号,紧接着服务器的Socket就会监听端口号的请求,随时准备接受客户端发来的链接,这个时候服务器的Socket只是listen并没有打开。此时我们假设客户端创建了Socket,然后打开了Socket并根据服务器的IP地址和端口号尝试去链接服务器的Socket,服务器的Socket接受到客户端Socket请求,被动的打开,开始接受客户端的请求,直到客户端返回链接信息,这个时候服务器的Socket进入到阻塞状态,所谓阻塞,即accept方法需要一直等待客户端返回链接信息后,才返回。同时接受下一个客户端的链接请求,客户端在链接成功之后,就会向服务器发送链接状态信息,服务器端在接受到客户端的链接信息之后,就会将accept方法放回,并且提示连接成功,之后客户端就可以将Socket去写入信息,服务器就可以收到,并且读取,相关的信息,最后在发送完数据后,客户端就会关闭Socket,紧接着服务端也需要关闭Socket。