《图解HTTP》读感

  • 前言
  • 一、HTTP各版本
  • 二、URL、URI
  • 三、HTTP存在的问题
  • 四、对称加密和非对称加密
  • 五、数字证书
  • 六、SSL握手过程

前言

如果有一定的计算机网络基础,这本书读起来会比较快,下文是我个人的一些收获和补充,之前博文里写过的内容这里不赘述。

一、HTTP各版本

  1. HTTP/0.9于90年问世,是HTTP协议的最初版本,请求方式只支持GET,并且只能请求HTML格式的资源。
  2. HTTP/1.0在96年公布,至今还被广泛使用着。新增了POST和HEAD请求方式。任何格式的内容都可以发送,包括图像、视频、二进制文件等。HTTP/1.0是短连接的,每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接。但是网页的内容越来越丰富,需要加载的资源越来越多,多次请求都重新建立TCP连接的成本比较高。为了解决这个问题,有些浏览器在请求时,用了一个非标准的Connection:keep-alive字段,要求服务器不要关闭TCP连接,服务器的响应也要包含这个字段。
  3. HTTP/1.1在97年公布,是目前主流的HTTP版本。新增了一些请求方法,引入了长连接,引入了管道机制,在同一个TCP连接里,客户端可以同时发生多个请求。
  4. HTTP/2.0的目标是改善用户的速度体验。它使用了多路复用的技术。在一个TCP连接里,客户端和服务端都可以同时发送多个请求或响应。增加了服务器推送,服务器可以对一个客户端的请求,发起多个响应,可以推送额外的资源,这样可以减少请求的次数。HTTP/2.0客户端和服务端都要维护一个首部字段表,记录见过的首部字段,如果下次发送报文首部没有变化就不发送首部,如果变化只发送变化了的那部分并且更新表,减少了重复发送。

二、URL、URI

URI是统一资源标识符,用来标识互联网某一资源,URL是统一资源定位符,URL是URI的一种(子集),具有标识功能的同时可以获取资源路径。

三、HTTP存在的问题

  1. 通信使用未加密的明文,内容容易被窃听
  2. 不验证对方身份,可能出现伪装
  3. 无法验证报文完整性,报文可能被篡改

解决方法:
使用HTTPS,在HTTP和TCP之间加一层SSL安全协议(HTTPS使用了SSL和TLS两个协议,有时候统一叫做SSL协议)。SSL协议具有加密、证书、完整性保护的功能。

报文采用对称加密,对称加密的密钥采用非对称加密
通过数字证书验证对方身份
通过消息摘要验证报文完整性

四、对称加密和非对称加密

对称加密:
对称加密指加密和解密使用相同密钥的加密算法。大多数的对称算法中,加密密钥和解密密钥是相同的。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。

非对称加密:

非对称加密算法中加密、解密的密钥不同,发送方使用接收方公开的公钥加密,接收方使用自己的私钥解密,除了接收方,其他人根据接收方的公钥计算出他的私钥是不可行的,通常非对称加密算法的设计建立在数学难题上。

SSL利用两者的优势,通信的报文用对称加密,为了防止对称加密密钥在传输过程中被窃听,采用非对称加密算法对对称加密密钥进行处理。

五、数字证书

只有加密算法还不够,因为服务器可能是别人伪装的,SSL使用数字证书验证对方的身份

六、SSL握手过程

  1. 客户端发送client_hello报文,服务端回应server_hello报文。
    作用是:双方协商SSL协议的版本、加密算法、密钥长度
  2. 服务端发送certificate报文,报文里包括服务端的公钥证书
  3. 服务端发送server_hello_done报文给客户端,hello消息阶段就此结束
  4. 客户端检查服务器证书的合法性,然后发送client_key_exchange报文,报文通过服务端的密钥进行加密,报文内容是之后会用到的对称加密的密钥
  5. 客户端继续发送change_cipher_spec报文,作用是提示服务器之后的消息使用对称加密密钥加密。
  6. 客户端再发送一个finished报文,报文利用协商好的加密算法、对称密钥进行加密和摘要计算(MAC计算,保证报文完整性),会包含连接开始到现在全部报文的校验值
  7. 如果服务端可以正确解密客户端发来的finished报文,服务端就也发送change_cipher_spec报文和finished报文给客户端,SSL握手完成。之后就可以进行HTTP请求了。

《图解HTTP》读感相关推荐

  1. 《程序员修炼之道》读感

    利用春节假期的机会看了两遍<程序员修炼之道>,其实书中说的大多是浅显易懂的道理,但是多年的工作感受,多个项目的经历让我对这些道理有了更深的理解. "我的源码让猫吃了", ...

  2. 读《程序员修炼之道——从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)

    花了几天时间略读完了<程序员修炼之道--从小工到专家>(The Pragmatic Programmer: From Journeyman to Master).总体感觉就像是一位多年开发 ...

  3. 读不完《程序员修炼之道》,至少可以读完这70条

    文章目录 推荐一.领悟程序员的哲学 推荐二.再次阅读,感受颇多 推荐三.一切阅读都是误读 推荐四.程序员升级必备 推荐五.程序员心底的小声音 推荐六.专业人士对<程序员修炼之道>的赞誉 T ...

  4. 《程序员修炼之道:从小工到专家》六千字读后总结

    <程序员修炼之道:从小工到专家>六千字读后总结 读完这本书,其实花的时间并不多,因为我自己有些基本的认知.这里主要是记录了一下当时的思考和总结,仅是我个人思考与经验. 这本书和极客时间的& ...

  5. 曳光弹 曳光代码 原型制作 读《读程序员修炼之道》

    最近读书<程序员修炼之道:从小工到专家>,看书到第2章 注重实效的途径中,从第10小节曳光弹,到11小节 原型与便笺这两节,相对于整本书中一直都比较顺畅的理解,相对而言这一节可以说是翻译的 ...

  6. 读《程序员修炼之道》

    不能记住过去的人,被判重复过去. --<程序员修炼之道> 这句引言,一直被我用作座右铭,当在书中读到这句的时候,感触颇深,也是我打算开始写博客记录生活的开始.跟这本书的机缘巧合,来自于之前 ...

  7. [拇指飞动]读《程序员修炼之道:从小工到专家》

    在很多Must Read推荐书目中,<The.Pragmatic.Programmer_From.Journeyman.to.Master[1999][CHS][PDF]>(<程序员 ...

  8. 《Ruby程序员修炼之道》(第2版)目录—导读

    版权 Ruby程序员修炼之道(第2版) • 著 [美] David A. Black 译 钟凤鸣 陈雪静 责任编辑 杨海玲 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 ...

  9. 做靠谱的程序员--《程序员修炼之道》读书报告

    这两天花了点时间把<程序员修炼之道>这本书读了,本来估计要一周时间才能读完,读了才发现作者绝对是人才啊,书写的生动有趣,一口气就读完了.随便摘录一下. 1.做一个靠谱的程序员,纯粹的程序员 ...

  10. 《程序员修炼之道(第2版)》!屹立20年王者归来!

    推荐语:收到博文视点的新书<程序员修炼之道(第2版),反复拜读,确实非常全面,涵盖编程,并发,架构,程序员个人修炼,团队,项目等方面 标题已经完全代表博文菌想说的话了! <程序员修炼之道( ...

最新文章

  1. matlab中rat=1函数,matlab中的format rat是什么意思
  2. 随机查询N条记录MySQL、SQLServer、Oracle、postgreSQL
  3. Windows上安装Apache
  4. 【CF582E】Boolean Function 树形DP+FWT
  5. 神策数据全面支持苹果 ASA,全域归因方案再升级
  6. hot编码 字符one_Python机器学习:特征编码的两种方式
  7. BZOJ3589 动态树(树链剖分+容斥原理)
  8. HttpContext 来源(System.Web.HttpContext.Current值为null的问题)
  9. Linux errno 列表
  10. C++类指针类型的成员变量的浅复制与深复制
  11. Dubbo+Zookeeper 基础讲解
  12. 如果找活跃IP段!抓肉鸡必须的!
  13. idea创建项目异常导致项目创建失败
  14. [转] ThreeJS中,那些会让阴影失效的操作
  15. 【QT数字图像处理】(三)QSlider滑块学习
  16. Ajax请求传递中文参数
  17. 学习笔记-零基础学习人工智能(0)
  18. 欧姆龙NX1P2编程学习(1)-编写功能块注意事项
  19. 【*◆Win8用户名微软ID和管理员账户详解*◆】
  20. linux修改文件夹的访问权限,linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组...

热门文章

  1. 您的企业适合导入APS系统吗?跟着小编来了解一下吧(上)
  2. 【DLL动态链接库】解决自己编写的程序在别人的电脑上无法运行的问题
  3. 蝉联AI专业全球冠军!清华力压CMU再夺CSRankings高校AI排行王座
  4. MATLAB--向量操作(1.3)
  5. java面向对象--继承与多态
  6. 第三方分享和登录时assets目录下ShareSDK.xml
  7. crypto-初识RSA(xctf)
  8. 原型(prototype)
  9. java反射一篇搞定
  10. ARM单片机上的C语言库<setjmp.h>的使用