计算机网络 part3 HTTP&HTTPS

一、HTTP

references:
HTTP

【HTTP协议】---HTTP协议详解

1、概述、特点

HTTP(超文本传输协议)是一种规定了浏览器和万维网服务器通信规则的协议。客户端和服务端的指定接口(默认80)建立TCP连接,然后进行请求、响应和数据交换。
HTTP通常使用有两个版本。HTTP1.0使用非持续连接(短连接),每次连接只处理一个请求,服务端收到客户请求并收到应答后就断开连接(WWW服务器面对大量用户,只能提供有限连接,不让一个连接处与等待状态)。HTTP1.1开始使用持续连接(长连接),一个TCP连接可以传输多个对象。

特点:

  1. 简单快捷:客户端向服务器请求服务时,只要传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器规模小,所以通信较快。
  2. 灵活:能传输任意类型的数据对象,正在传输的内容类型用Content-Type标记。
  3. 无连接:每次连接只能处理一次请求。优点是节省传输时间,实现简单。如果Connection是close则是短连接,每次只能处理一个请求;Connection是keep-alive则是长连接,一次连接能处理多个请求,可以通过timeout断开。
  4. 无状态:无状态指协议对于事务处理没有记忆能力。所以有了Cookie和Session。
  5. 支持C/S模式。

2、工作原理

  1. 客户端连接到Web服务器:客户端和Web服务器的80端口建立TCP套接字连接。
  2. 发送HTTP请求:客户端向服务器发送请求报文。
  3. 服务器接收请求报文并返回HTTP响应:Web服务器解析请求,定位请求资源,然后将资源复本写入TCP套接字发回。
  4. 释放TCP连接。
  5. 客户端浏览器解析HTML内容。

3、请求

格式:请求行、请求头部、空行、请求数据(主体)
请求行:包括请求类型、请求资源、使用的HTTP版本。
请求头部:服务端要使用的其他附加信息(host指出请求的目的地)。
空行:必须有一个空行。
请求数据:数据。

4、响应

格式:状态行、消息报头、空行、响应正文
状态行:包括HTTP版本、状态码、状态消息
消息报头:客户端要使用的附加信息(编码类型等)。
空行:必须有空行。
响应正文:HTML,返回给客户端的文本信息。

5、状态码

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 //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

6、GET请求和POST请求

  1. GET请求可以被缓存,POST不行。
  2. GET请求会保存在浏览器历史记录中,POST不会。
  3. GET请求的数据放在URL后,以?分割URL和数据,参数用&相连(例如http://weibo.com/signup/signup.php?inviteCode=2388493434)因此绝不能用 GET请求传输敏感数据;POST请求数据写在HTTP的主体中,所以POST比GET略安全一点点。
  4. GET请求的长度有限制(因为浏览器对URL长度有限制),POST的数据放在请求的主体中,理论上没限制,实际上服务器可能会限制。

7、Cookie和Session

HTTP用的是无状态的连接,所以需要Cookie和Session来保存一些信息。
当服务器接收到Cookie后,会根据Cookie中的SessionID来找这个客户的Session,如果没有就会生成一个新的SessionID发给客户端。
根本区别:Cookie保存在客户端,Session保存在服务器。
其他区别:

  1. Cookie保存在客户端,可以使用Cookie欺骗,相对不安全。Session保存在服务器,相对安全。
  2. Session可以设置超时时间,超过一定时间后失效,避免长期占用服务器内存。
  3. 单个Cookie的大小有限制(4KB)。
  4. 客户端每次都会把Cookie发送到服务端,所以服务端直到Cookie,但是客户端不知道Session。

二、HTTPS

references:HTTPS详解

HTTP协议中的内容都是明文,HTTPS是将他们加密,S指SSL/TLS协议。
HTTP的三个不安全:

  1. 窃听风险
  2. 篡改风险:攻击者篡改内容,但是双方都不知道。
  3. 冒充风险:中间人攻击,攻击者在链路上伪装自己,与通讯双方分别建立联系,并交换其所收到的数据。

使用非对称加密+对称加密解决,在TCP和HTTP之间新增了一个TLS/SSL加密层。

1、一些概念

  1. 数字证书:是由权威的数字证书认证机构(CA)颁发的证书,提供公钥和私钥,CA机构和浏览器、操作系统厂家合作,将公钥内置在浏览器、操作系统中,以保证公钥的安全。
  2. 数字签名:为了防止信息来自中间人,发送者会把发送的信息进行摘要(摘要算法),这个摘要就是数字签名。当客户端收到后,对信息重新进行摘要,对比数字签名是否一致就可以知道是否被篡改、来自中间人等等(中间人无法获得私钥)。
  3. 摘要算法:类似哈希,将消息经过算法变为固定长度的串,称为摘要。
  4. 对称加密:使用同一个密钥进行加密解密,速度快。AES。
  5. 非对称加密:私钥加密只能公钥解密,公钥加密只能私钥解密。私钥在服务器手中。RSA,基于大整数因子分解。

2、HTTPS的SSL/TLS握手过程

  1. 客户端发起HTTP请求:客户端告知自己支持的加密算法、摘要算法、安全层协议版本、随机数random-Secret-C。
  2. 服务端配置:服务端要有一套数字证书,以获得一对公钥和私钥。
  3. 服务端返回协商结果:包括使用的加密算法、摘要算法、协议版本、随机数random-Secret-S和证书(公钥)。
  4. 客户端验证证书:验证证书是否信任、有没有过期等。取出摘要,验证内容是否被篡改。获得公钥。证书没问题,生成一个随机数pre-Master-Secret,用公钥加密。
  5. 传送加密信息:把加密后的随机数发给服务端。
  6. 服务端解析:服务端用私钥打开后,用random-Secret-C、random-Secret-S、pre-Master-Secret生成最终的对称加密的私钥Master-Secret。以后就都用对称加密的私钥进行加密解密了。
  7. 验证加密结果:服务端用Master-Secret加密一段握手信息发送给客户端,客户端验证完毕则握手结束。

Q:为什么用3个随机数而不是只用第3个?
A:为了使每次的私钥生成都是随机数,如果不随机可能会被猜出来。

三、HTTP和HTTPS对比

区别:

  1. HTTP是以明文方式传输数据的,HTTPS是经过SSLTLS加密的,更安全。
  2. HTTP默认端口80,HTTPS默认端口443。
  3. HTTPS在建立TCP连接后还要协商对称加密的密钥。
  4. HTTPS需要服务端申请证书,客户端安装对应的根证书(通过根证书表示对改证书信任)。

HTTPS优点:

  1. 安全性更高,防止数据被窃听、篡改。
  2. HTTPS可以认证(SSL证书)用户和服务器,确保数据发送到正确的地方。

HTTPS缺点:

  1. 进行HTTP会话之前,进行SSL/TLS握手 ,时延增加。
  2. 成本高。购买证书需要钱,而且有些证书不安全;加密计算也需要耗费时间。
原文地址:https://www.cnblogs.com/KirinSB/p/12673847.html