HTTP和HTTPS

HTTP协议的特点

  1. HTTP允许传输任意类型的数据。
  2. 无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话和下一次会话之间没有联系。
  3. 支持客户端/服务器模式

HTTP报文格式

  1. HTTP请求由请求行、请求头、请求体组成。
  • 请求行:包括请求方法,访问的资源URL,使用的HTTP版本。GETPOST是最常见的HTTP方法,除此之外还包括DELETE、HEAD、OPTIONS、PUT、TRACE
  • 请求头:格式为属性名:属性值,服务端根据请求头获取客户端的信息,主要有cookie、host、connection、accept-language、accept-encoding、user-agent
  • 请求体:用户的请求数据如用户名、密码等。
序号 方法 描述
1 GET 发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。另外get支持快取、缓存、可保留书签等。
2 POST 和get一样很常见,向服务器提交资源让服务器处理,比如提交表单、上传文件等,可能导致建立新的资源或者对原有资源的修改。提交的资源放在请求体中。不支持快取。
3 HEAD 本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检查网页是否被串改或更新,获取头信息等,特别适用在有限的速度和带宽下。
4 PUT 和post类似,html表单不支持,发送资源给服务器,并存储在服务器指定位置,要求客户端事先知道该位置;比如post是在一个集合上(/province),而put是具体某一个资源上(/province/123)。所以put是安全的,无论请求多少次,都是在123上更改,而post可能请求几次创建了几次资源。
5 DELETE 请求服务器删除某资源。和put都具有破坏性,可能被防火墙拦截。如果是https协议,则无需担心。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。
7 OPTIONS 获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息。

请求报文示例:

POST /xxx HTTP/1.1 请求行
Accept:image/gif.image/jpeg, 请求头部
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

username=dabin 请求体
  1. HTTP响应由状态行、响应头、响应体组成。
  • 状态行:协议版本、状态码及状态描述。
  • 响应头:响应头字段主要有connection、content-type、content-encoding、content-length、set-cookie、Last-Modified,、Cache-Control、Expires
  • 响应体:服务器返回给客户端的内容。

响应报文示例

HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112

<html>
    <body>响应体</body>
</html>

HTTP状态码

POST和GET的区别

  • GET请求参数通过URL传递,POST的参数放在请求体中。
  • GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把请求头和请求体一并发送出去;而对于POST,浏览器先发送请求头,服务器响应100 continue,浏览器再发送请求体。
  • GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
  • GET请求只能进行URL编码,而POST支持多种编码方式(json、xml)。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST没有。
  • GET请求比POST更不安全,因为参数直接暴露在URL中,所以不能用来传递敏感信息。

HTTP长连接和短连接

HTTP1.0默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

HTTP1.1起,默认使用长连接。要使用长连接,客户端和服务器的HTTP首部的Connection都要设置为keep-alive,才能支持长连接。

HTTP长连接,指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。

HTTP1.0和HTTP1.1的区别

  1. 缓存处理。在HTTP1.0中主要使用header里的if-Modified-Since来作为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略。
  2. 带宽优化及网络连接的使用。HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,但服务器却将整个对象送过来了,并且不支持断点续传功能。HTTP1.1则在请求头引入range头域,它允许只请求资源的某个部分,即返回码是206,这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  3. 错误通知的管理。在HTTP1.1中新增了24个错误状态响应吗。
  4. Host头处理。在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因为,请求信息的中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且他们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400)。
  5. 长连接,HTTP1.1 支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

HTTP1.1和HTTP2.0的区别

  1. 新的二进制格式:HTTP1.1基于文本格式传输数据;HTTP2.0采用二进制格式传输数据,解析更高效。
  2. 多路复用:在一个连接里,允许同时发送多个请求或响应,并且这些请求或响应能够并行的传输而不被阻塞,避免HTTP1.1出现的“队头阻塞”问题。
  3. 头部压缩:HTTP1.1的header带有大量信息,而且每次都要重复发送;HTTP2.0把header从数据中分离,并封装成头帧和数据帧,使用特定算法压缩头帧,有效减少header信息大小。并且HTTP2.0在客户端和服务端记录了之前发送的键值对,对于相同的数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。
  4. 服务端推送:HTTP2.0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。

HTTPS和HTTP的区别

  1. HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密传输协议。
  2. HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443。
  3. HTTPS协议需要到CA机构申请证书,需要一定费用。
  4. HTTP运行在TCP协议上;HTTPS运行在SSL协议上,SSL运行在TCP协议上。

HTTPS原理

对称加密和非对称加密

  • 对称加密:客户端和服务端采用相同的密钥进行加密。

    	encrypt(明文,秘钥) = 密文
        decrypt(密文,秘钥) = 明文
    
  • 非对称加密:客户端通过公钥加密,服务端通过私钥解密。(或者客户端通过私钥加密,服务端通过公钥解密)

客户端如何验证证书有效?

  1. 从服务端获取证书,得到证书内容、证书签名算法和数字签名。
  2. 用CA机构的公钥对数字签名解密(由于是浏览器信任的机构,所以浏览器会保存它的公钥)
  3. 用证书里的签名算法对证书内容进行hash运算
  4. 比较解密后的数字签名和对证书内容做hash运算后得到的哈希值,相等则表明证书可信。

验证证书是否有效使用的是非对称加密,数据传输过程中使用对称加密。

posted @ 2021-10-14 16:46  Cherish486  阅读(114)  评论(0编辑  收藏  举报