http 相关内容

超文本传输​​协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。尽管通常基于 TCP/IP 层,但它可以在任何可靠的传输层上使用,也就是说,该协议不会像 UDP 那样静默的丢失消息。RUDP——作为 UDP 的可靠化升级版本——是一种合适的替代选择。 http处于TCP/IP五层模型的应用层,五层分别为物理层(网线之类的)、数据链路层(网桥、交换机)、网络层(寻址,路由器)、传输层(TCP/UDP)、应用层(http、ftp、smb、smtp)

http/1

早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascript,来丰富我们的页面展示,当 ajax 的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于HTTP 协议的。同样到了移动互联网时代,我们页面可以跑在手机端浏览器里面,但是和 PC 相比,手机端的网络情况更加复杂,这使得我们开始了不得不对 HTTP 进行深入理解并不断优化过程中

http/2

我觉得http2主要优点

  • 实现了多路复用,解决了http1.x的队头阻塞,但是限制于tcp队头阻塞,处理不掉tcp队头阻塞
  • 实现了一个域名一个TCP连接
  • 新的二进制格式(Binary Format),http1本质是基于文本格式传输的,http2传输的是二进制,可以做到乱序传输
  • 头部压缩,只做差量更新请求头,减少请求头造成的带宽消耗和资源消耗
  • 实现了server-push,部分文档上也有对http1.1的描述,也具有该功能 我认为没什么使用场景,除非95%左右概率必定在下个资源请求会请求到

https

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面【百度百科】

HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。

localhost 自签名证书

生成自签名证书源文档地址open in new window

目的:如果您正在开发 Web 应用程序,那么您可能需要运行 Apache 或 Nginx 等本地 Web 服务器并在浏览器中通过 http://localhost:8000/ 访问它。但是,浏览器在 HTTP 与 HTTPS 页面上的行为方式略有不同。主要区别是:在 HTTPS 页面上,从 HTTP 链接加载 JavaScript 的请求都会被阻断。因此,若您在本地使用 HTTP 开发,您添加的脚本可能能在本地开发环境正常工作,但是将在部署至 HTTPS 站点时出现问题。若要发现此类问题,您可能需要在本地 Web 服务器配置 HTTPS。 但是,您不希望始终看到证书错误警告。那么如何在访问本地网页版本时让浏览器显示那个绿色锁标志呢?

最佳选择是:生成您自己的证书(自签名的或由本地根证书签名),并且可以在您的操作系统的受信证书存储中信任它。然后在本地网页服务器中使用该证书。请参阅下文了解详情。

生成自签名字证书

任何人都可以在没有 CA 帮助的情况下制作自己的证书。唯一的区别是您自己制作的证书不会被其他任何人信任。当然如果用于本地开发,那没什么关系。

为 localhost 生成私钥和自签名证书的最简单方法是使用以下 openssl 命令:

openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

解读参数的文档如下如何创建自签名SSL证书open in new window

注意:

  • 自签名SSL证书是由创建它的人而不是受信任的证书颁发机构签名的证书。自签名证书可以与受信任的CA签名SSL证书具有相同的加密级别。

  • 被任何浏览器识别为有效的自签名证书。如果您使用的是自签名证书,则网络浏览器将向访问者显示警告,提示该网站证书无法验证。

  • 自签名证书主要用于测试目的或内部使用。您不应该在暴露于Internet的生产系统中使用自签名证书。

  • 在原生应用下应该禁止在与web程序通信时候采用https证书与本地通信,举例个场景

    原生应用作为一个web服务,web程序通常采用https,如果我们常规来说,我们https会阻止http链接的请求,但是对于浏览器来说,他们信任http:127.0.0.1,因为此地址是环回地址,流量不会流出计算机外部,可以直接在https网址下向http://127.0.0.1主机下所有端口进行请求(除非浏览器强硬设置了CSP),当然也不排除后续可能移除该信任机制,所以在原生应用发布的时候应该采用http://127.0.0.1:8000,而不是修改本地hosts文件改http:127.0.0.1指向https://example.com,这会导致一种情况,在你的原生应用中不得不将证书文件被一并放入,一旦被别有用心的获取到,他们可以采用攻击者可以对DNS查询进行中间人攻击(MitM),并注入指向不同IP地址的响应。比如原本指向的是你的ip,然后被指向了别的ip,模拟返回一些错误数据可能会导致系统出现危机,此外CA机构发现你的CA私钥被泄漏,该证书可能会被吊销。

系统信任自签证书

Mac端:

  • 用浏览器打开需要信任的自签名https网站此时访问链接出现 此连接非私人连接
  • 点击左上角输入框左侧的红色三角感叹号, 再点击证书无效,然后看到一个证书的图,拖拽它到桌面,然后双击生成的.cer后缀的文件,然后会打开MacosX的钥匙串访问,在系统->证书中看到你刚刚打开的证书,然后右键查看详情,点击信任栏即可进行设置信任的范围和协议 自签证书
  • 然后再刷新浏览器网页,即可看到一个正常,没有红色感叹号的域名。
Last Updated: