http和https的简单了解

发布时间 2023-12-04 12:34:14作者: code1989

HTTP协议

简介

HTTP(Hyper Text Transfer Protocol 超文本传输协议)是用于服务器传输超文本到本地浏览器的传送协议。是基于TCP协议来传递数据的,属于应用层面向对象的协议。

主要特点

  1. 简单快捷:客户向服务器请求服务时,只需要传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
  2. 灵活:HTTP允许传送任意类型的数据对象。传输的类型由content-Type标记。
  3. 无连接:限制每次连接只处理一个请求,服务器处理完客户的请求并收到客户端应答后,即断开连接。
  4. 无状态:HTTP协议是无状态协议,无状态是指协议对处理事务没有记忆功能。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次传输的数据量增大,另一方面,服务器不需要先前信息时应答就很快。
  5. 支持B/S和C/S模式

请求方法

  • GET:客户端请求指定资源信息,服务返回指定的资源
  • HEAD: 只请求响应报文中的HTTP首部,curl -I 就是使用的HEAD方法来请求资源的。
  • POSt:将客户端数据提交到服务器
  • PUT:从客户端向服务端传送的数据取代指定的文档内容
  • DELETE:请求服务器删除指定的资源
  • MOVE:请求服务器将指定的页面移动到另一个网络地址

HTTP报文格式

请求报文是由请求行、请求报头、空行、请求报文主体四部分组成的。

请求头

HTTP最常见的请求头如下:

  • Accept:浏览器可接受的网络媒体类型;
  • Accept-Charset:浏览器可接受的字符集;
  • Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
  • Accept-Language:浏览器所希望的语言种类;
  • Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;
  • Connection:表示是否需要持久连接。
  • Content-Length:表示请求消息正文的长度;
  • Cookie:含有先前由服务器通过 Set-Cookie 首部投放并存储到客户端的 HTTP cookies。这个首部可能会被完全移除,例如在浏览器的隐私设置里面设置为禁用cookie。
  • Host:初始URL中的主机和端口;
  • If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;
  • Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝,应用于HTTP/1.0。
  • Cache-Control:通用消息头被用于在http 请求和响应中通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在响应里设置的指令,在请求中不用包含相同的指令。
  • Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
  • User-Agent:用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。
  • Upgrade-Insecure-Requests:是一个请求首部,用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应

响应头

HTTP最常见的响应头如下所示:

  • Allow:服务器支持哪些请求方法(如GET、POST等);
  • Content-Encoding:文档的编码(Encode)方法。
  • Content-Length:表示内容长度,只有当浏览器使用持久HTTP连接时才需要这个数据。
  • Content-Type: 表示后面的文档属于什么MIME类型。
  • Date:当前的GMT时间。
  • Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它。
  • Last-Modified:文档的最后改动时间。
  • Location:表示客户应当到哪里去提取文档。
  • Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。
  • Cache-Control:通用消息头被用于在http 请求和响应中通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在响应里设置的指令,在请求中不用包含相同的指令。
  • Server :服务端所用到的软件信息
  • Set-Cookie:响应首部 Set-Cookie 被用来由服务器端向客户端发送 cookie。
  • Strict-Transport-Security: (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式.
  • X-Ua-Compatible IE=Edge,chrome=1
  • Transfer-Encoding:消息首部指明了将 entity 安全传递给用户所采用的编码形式。

HTTPS协议

简介

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

技术细节

与HTTP的差异

与HTTP的URL由“http://”起始且默认使用端口80不同,HTTPS的URL由“https://”起始且默认使用端口443。

HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并在正确配置时被认为是安全的。

协议层

HTTP协议和安全协议同属于应用层(OSI模型的最高层),具体来讲,安全协议工作在HTTP之下,运输层之上:安全协议向运行HTTP的进程提供一个类似于TCP的套接字,供进程向其中注入报文,安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应的进程。

严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。

服务器设置

要使一网络服务器准备好接受HTTPS连接,管理员必须创建一数字证书,并交由证书颁发机构签名以使浏览器接受。证书颁发机构会验证数字证书持有人和其声明的为同一人。浏览器通常都预装了证书颁发机构的证书,所以他们可以验证该签名。

当私钥失密时

证书可在其过期前被吊销,通常情况是该证书的私钥已经失密。较新的浏览器都实现了在线证书状态协议(OCSP)以排除这种情形:浏览器将网站提供的证书的序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。

加密算法
加密算法一般分为两种,对称加密和非对称加密。所谓对称加密(也叫密钥加密)就是指加密和解密使用的是相同的密钥。而非对称加密(也叫公钥加密)就是指加密和解密使用了不同的密钥,而HTTPS同时使用了对称加密和非对称加密算法。

HTTPS原理

HTTPS工作在客户端和服务器端之间。

验证流程:

  1. 客户端首先会将自己支持的加密算法,打个包告诉服务器端。

  2. 服务器端从客户端发来的加密算法中,选出一组加密算法和HASH算法,并将自己的身份信息以证书的形式发回给客户端。而证书中包含了网站的地址,加密用的公钥,以及证书的颁发机构等;

  3. 客户端收到了服务器发来的数据包后,会做这么几件事情:

    • 验证一下证书是否合法(OCSP在线证书状态检查协议)。一般来说,证书是用来标示一个站点是否合法的标志,如果说该证书由权威的第三方颁发和签名的,则说明证书合法。
    • 如果证书合法或者客户端强制接受和信任了不合法的证书,则客户端就会随机产生一串序列号,使用服务器发来的公钥进行加密。这时候,一条返回的消息就基本就绪。
    • 最后使用服务器挑选的HASH算法,将刚才的消息使用刚才的随机数进行加密,生成相应的消息校验值,与刚才的消息一同发还给服务器。
  4. 服务器接受到客户端发来的消息后,会做这么几件事情:

    • 使用私钥解密上面公钥加密的消息,得到客户端产生的随机序列号。
    • 使用该随机序列号,对该消息进行加密,验证得到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任。
    • 最后,使用该随机序列号,加上上一步中选择的加密算法,加密一段握手消息,发还给客户端,同时HASH值也带上。
  5. 客户端收到服务器端的消息后,接着做这么几件事情:

    • 计算HASH值是否与发回的消息一致
    • 检查消息是否为握手消息
  6. 握手结束后,客户端和服务器端使用握手阶段产生的随机数以及挑选出来的算法进行对称加解密的传输。