(服务运维)一次了解http和https协议_cookie和seesion

因特网是"Internet”的中文译名,它起源于美国的五角大楼,它的前身是美国国防部高级研究计划局(ARPA)主持研制的ARPAnet。20世纪50年代末,正处于冷战时期。当时美国军方为了自己的计算机网络在受到袭击时,即使部分网络被摧毁,其余部分仍能保持通信联系,便由美国国防部的高级研究计划局(ARPA)建设了一个军用网,叫做"阿帕网”(ARPAnet)。阿帕网于1969年正式启用,当时仅连接了4台计算机,供科学家们进行计算机联网实验用,这就是因特网的前身

Internet的发展引起了商家的极大兴趣。1992年,美国IBM、MCI、MERIT三家公司联合组建了一个高级网络服务公司(SNS),建立了一个新的网络,叫做SNSnet,成为Internet的另一个主干网。它与SNSFnet不同,NSFnet是由国家出资建立的,而SNSnet则是SNS 公司所有,从而使Internet开始走向商业化

在90年代,超文本标识语言(HTML),即一个可以获得因特网的图像信息的超文本因特网协议被采用,使每一个人可以产生自己的图像页面(网址),然后成为一个巨大的虚拟超文本网络的组成部分。这个增强型的因特网又被非正式地称为万维网,与此同时产生了数量庞大的新用户群。于是,许多人用"因特网” 一词指这个网络的物理结构,包括连接所有事物的客户机、服务器和网络;而用"万维网”一词指利用这个网络可以访问的所有网站和信息。

http协议

  • 请求应答模式
  • 灵活可拓展
  • 可靠传输
  • 无状态stateless(用cookie技术解决)
  • http不加密
  • 相关WEB语言html、css、javascript

1、完整请求处理过程

  1. 建立连接
  2. 接收请求
  3. 处理请求
  4. 访问资源
  5. 构建响应报文
  6. 发送响应报文
  7. 记录日志

图示TCP过程

(服务运维)一次了解http和https协议_cookie和seesion_02

http协议分层

(服务运维)一次了解http和https协议_报文格式_03

2、请求信息

请求方式

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理。

(服务运维)一次了解http和https协议_cookie和seesion_04

请求格式

(服务运维)一次了解http和https协议_http和https_05

(服务运维)一次了解http和https协议_http和https_06

请求头解释

(服务运维)一次了解http和https协议_http和https_07

响应格式

(服务运维)一次了解http和https协议_报文格式_08

(服务运维)一次了解http和https协议_http和https_09

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

1)响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:

  • 描述了响应主体MIME类型的Content-Type首部
  • 描述了响应主体长度的Content-Length
  • 实际报文的主体内容

2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径

3)MIME类型: Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来

  • 魔法分类:Apache web服务器可以扫描每个资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配,以决定每个文件的MIME类型。这样做可能比较慢,但很方便,尤其是文件没有标准扩展名时
  • 显式分类:可以对Web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个MIME类型
  • 类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配
  • 置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)"最好


3、cookie和session

session创建、校验、销毁

(服务运维)一次了解http和https协议_cookie和seesion_10

(服务运维)一次了解http和https协议_报文格式_11

cookie和session的相同和不同:

  1. cookie通常是在服务器生成,但也可以在客户端生成,session是在服务器端生成的
  2. session 将数据信息保存在服务器端,可以是内存,文件,数据库等多种形式,cookie 将数据保存在客户端的内存或文件中
  3. 单个cookie保存的数据不能超过4K,每个站点cookie个数有限制,比如IE8为50个、Firefox为50个、Opera为30个;session存储在服务器,没有容量限制
  4. cookie存放在用户本地,可以被轻松访问和修改,安全性不高;session存储于服务器,比较安全
  5. cookie有会话cookie和持久cookie,生命周期为浏览器会话期的会话cookie保存在缓存,关闭浏览器窗口就消失,持久cookie被保存在硬盘,知道超过设定的过期时间;随着服务端session存储压力增大,会根据需要定期清理session数据
  6. session中有众多数据,只将sessionID这一项可以通过cookie发送至客户端进行保留,客户端下次访问时,在请求报文中的cookie会自动携带sessionID,从而和服务器上的的session进行关联

cookie缺点

  1. 使用cookie来传递信息,随着cookie个数的增多和访问量的增加,它占用的网络带宽也很大,试想假如cookie占用200字节,如果一天的PV有几个亿,那么它要占用多少带宽?
  2. cookie并不安全,因为cookie是存放在客户端的,所以这些cookie可以被访问到,设置可以通过插件添加、修改cookie。所以从这个角度来说,我们要使用sesssion,session是将数据保存在服务端的,只是通过cookie传递一个sessionId而已,所以session更适合存储用户隐私和重要的数据

session缺点

  1. 不容易在多台服务器之间共享,可以使用session绑定,session复制,session共享解决
  2. session存放在服务器中,所以session如果太多会非常消耗服务器的性能cookie和session各有优缺点,在大型互联网系统中,单独使用cookie和session都是不可行的

Web访问响应模型(Web I/O)

  • 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
  • 复用I/O结构:启动一个进程,同时响应N个连接请求
  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

4、http协议版本

(服务运维)一次了解http和https协议_cookie和seesion_12

HTTP1.0和1.1的问题

  1. HTTP1.x在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间,特别是在移动端更为突出
  2. HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,无法保证数据的安全性
  3. HTTP1.x在使用时,header里携带的内容过大,增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量
  4. 虽然HTTP1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会
  5. 给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keepalive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间

提高HTTP连接性能

  1. 并行连接:通过多条TCP连接发起并发的HTTP请求
  2. 持久连接:keep-alive,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
  3. 管道化连接:通过共享TCP连接,发起并发的HTTP请求
  4. 复用的连接:交替传送请求和响应报文(实验阶段)

https协议:

  • HTTPS:http over ssl ,实现验证和加密功能
  • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费
  • HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的
  • HTTP和HTTPS使用的是不同的连接方式,端口不同,前者是80,后者是443
  • HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题
  • HTTPS 实现过程降低用户访问速度,但经过合理优化和部署,HTTPS 对速度的影响还是可以接受的

https处理过程

(服务运维)一次了解http和https协议_http和https_13

1. 客户端发送可供选择的加密方式,并向服务器请求证书

2. 服务器端发送证书以及选定的加密方式给客户端

3. 客户端取得证书并进行证书验证,如果信任给其发证书的CA

(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名

(b) 验证证书的内容的合法性:完整性验证

(c) 检查证书的有效期限

(d) 检查证书是否被吊销

(e) 证书中拥有者的名字,与访问的目标主机要一致

4. 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换

5. 服务用此密钥加密用户请求的资源,响应给客户端