Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP原理和SSL原理 #3

Open
zoro-web opened this issue Jul 13, 2017 · 1 comment
Open

HTTP原理和SSL原理 #3

zoro-web opened this issue Jul 13, 2017 · 1 comment

Comments

@zoro-web
Copy link
Owner

zoro-web commented Jul 13, 2017

初衷

  • HTTP协议相关知识也属于前端必备基础知识,是很多公司面试时必问的知识点
  • 虽然平常写业务代码时,接触HTTP和SSL会相对较少一点,但当涉及一些性能优化时,了解下原理有助于从各个出发点去优化性能,提高用户相应速度。

HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

TCP/IP协议

HTTP是基于TCP/IP协议之上的。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议:

1. IP:计算机之间的通信

  • IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP.用来在internet上标识这台计算机。IP 负责在因特网上发送和接收数据包。通过 IP,消息(或者其他数据)被分割为小的独立包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。
  • IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP.

2. TCP : 应用程序之间的通信

  • TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变。TCP在IP地址之上引端口(port),它允许计算机通过网络提供各种服务。一些端口号为不同的服务保留,而且这些端口号是众所周知。
  • 服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流。例如大多数电子邮件通信流出现在端口25上,用于www的HTTP通信流出现在80端口上。
  • 当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信,占用两个计算机之间整个的通信线路。TCP 用于从应用程序到网络的数据传输控制。TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。
  • TCP/IP 就是TCP 和 IP 两个协议在一起协同工作,有上下层次的关系。
  • TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者,传输过程要经IP路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址,然后在它们到达的时候重新组合它们。

TCP/IP协议参考模型

图片名称

HTTP工作原理

一次HTTP操作称为一个事务,其工作整个过程如下:

1. 地址解析

  • 如用客户端浏览器请求这个页面:HTTP原理和SSL原理 #3
  • 从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
  • 协议名:https
  • 主机名:github.com
  • 端口:''
  • 对象路径:/HTTP原理和SSL原理 #3
  • 在这一步,需要域名系统DNS解析域名github.com,得主机的IP地址。

2. 封装HTTP请求数据包

  • 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3. 封装成TCP包,建立TCP连接(TCP的三次握手)

  • 在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层次协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

4. 客户机发送请求命令

  • 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和内容。

5. 服务器响应

  • 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  • 实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6. 服务器关闭TCP连接

  • 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这个请求头Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

SSL工作原理

SSL(Server socket layer) 是一种保证网络两个节点进行安全通信的协议。SSL和TLS建立在TCP/IP协议基础上。建立在SSL上的HTTP协议称为HTTPS,默认端口443。SSL使用加密技术实现会话双方信息的安全传递。

SSL加密类型

有两种基本的加解密算法类型:

1. 对称加密

  • 密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;对称加密主要问题是共享秘钥,即你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。

2. 非对称加密

  • 使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存(一般是服务器保存),另一方任何人都可以获得公共秘钥。

获取证书(经过CA认证过的公钥)有两种方式

1. 从权威机制购买证书。

  • 安全证书由国际权威的证书机构(CA),如VeriSign和Thawte颁发,它们保证了证书的可信性。一个安全证书只对一个IP有效,多个IP必需购买多个证书。

2. 创建自我签名的证书。

  • 如果通信双方只关心数据在网络上的可以安全传输,并不需要对方进行身份验证,这种情况下,可以创建自多签名证书。这证书达不到身份认证的目的,但可以用于加密通信。

SSL握手

SSL 连接总是由客户端启动的。在SSL 会话开始时执行 SSL 握手。此握手产生会话的密码参数。关于如何处理 SSL 握手的简单概述,如下图所示。此示例假设已在 Web 浏览器 和 Web 服务器间建立了 SSL 连接。

图片名称

最后

  • 谢谢观看~
  • 欢迎关注我的github----https://github.com/zoro-web/blog,你的关注是我整理知识的更大动力,我的博客会定期整理发布一些文章。
@Rosen97
Copy link

Rosen97 commented Oct 17, 2018

学习了,fork

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants