图解HTTP

这里写图片描述

在以后的读书应该也会每次把我读的书封面带上去吧,因为重名的书应还是有些吧


之前看过到关于HTTP的两本书籍,但是也都一直都是看到过,为什么先选择这本书看,因为一直都比较喜欢看图灵出版的。一本是《HTTP 权威指 南》;另一本是《TCP/IP 详解,卷 1》

像这种通过发送请求获取服务器资源的 Web 浏览器等,都可称为客户端(client)。
这里写图片描述

为了理解HTTP,有必要事先了解一下TCP/IP协议?

原来通常所使用的网络(包括互联网)都是在TCP/IP协议族的基础 上运作的,而HTTP只是它内部的一个子集

这里写图片描述

:TCP/IP 是互联网相关的各类协议族的总称

TCP/IP 协议族按层次分别分 为以下 4 层:应用层、传输层、网络层和数据链路层。

应用层: 决定了向用户提供应用服务时通信的活动。
DNS( Domain Name System)服务是和HTTP协议一样的位于应用层的协议,它提供域名到IP地址之间的解析服务

  • 所以为了解决访问问题,DNS服务应运而生了,DNS提供通过域名查找IP,或者是向逆向从IP地址中反查域名的服务
  • 大家可以看下一幅图
    这里写图片描述
  • 然后看一下这张图
    其中这个网友写的对DNS的理解我还觉得比较好,大家可以点击这里看看
    这里写图片描述
    这里就提到了客户端和服务器之间的访问的中间转换

简单的HTTP协议

  • HTTP协议规定,请求从客户端发出,最后服务器响应请求并返回,换句话说,肯定是先从客户端开始建立通信,服务端在没有接受到请求之前是不会发送请求的。(这其实和最开始接触Java的时候,servlet编程的时候也有过这样的印象)

HTTP是一种无状态协议,怎么说呢,好像就是自身不具备保存之前发送过的请求或是相应的功能

于是乎随着网络的发展,人们的需求,为了保存用户状态?自然就引入了Cookie技术了

put 文件传输
这里写图片描述


持久连接

  • 特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态

这样会使网络使用效率更高

  • 优势:
    • 因为每次建立连接的时候都要经过三次握手等操作,就好像过河一样,如果拥有一条一直可以使用连接的话,只需要进行一次连接即可,这样就省去了我们每次连接的时间。(如果大家进行过java等服务器开发的话,类似于有一个热部署的问题,其实是差不多的道理,我只是顺道想起了)
    • 因为TCP连接慢启动的特性,每次建立连接的时候,就没有之前使用过的连接快(这里我指新连接的速度等)
    • 每一个连接对于服务器来说都是一种负担,在不影响功能和性能等诸如一切条件的前提下能少开的话就可以少开。节约资源(逃

对了,在HTTP/1.1中,所有的连接默认都是持久连接的

那么问题来了,是否能能同时进行并发送多个请求,而不需要一个接一个地等待响应?

所以管线化就来了 %……&

持久连接使得多数请求以管线化(pipelining)方式发送成为可能,从前发送请求后需要等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求
这里写图片描述


Cookie状态管理

  1. HTTP是无状态协议的,它不对之前发生过的请求和响应的状态进行管理,也就是说,无法根据之前的状态进行本次的请求处理

  2. 无状态协议当然也有它的优点。由于不必保存状态,自然 可减少服务器的 CPU 及内存资源的消耗。从另一侧面来说,也正是 因为 HTTP 协议本身是非常简单的,所以才会被应用在各种场景里。

引入Cookie技术?

  • 如果让服务器管理全部客户端状态则会成为负担
  • 保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入 了 Cookie 技术(之前我只是单纯的以为)
  • Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态。

HTTP状态码

  • HTTP 状态码
    • 负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作。
    • 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结 果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出 现了错误。

关于代理:
缓存代理:代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本 (缓存)保存在代理服务器上。

当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获 取资源,而是将之前缓存的资源作为响应返回。

透明代理;转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理 (Transparent Proxy)。反之,对报文内容进行加工的代理被称为非 透明代理。

HTTP首部

HTTP 首部字段是构成 HTTP 报文的要素之一。在客户端与服务器之 间以 HTTP 协议进行通信的过程中,无论是请求还是响应都会使用首 部字段,它能起到传递额外重要信息的作用。


Cookie
我只是突然觉得看图灵出版的书就像看小时候的图画书一样

Set-Cookie

有很多属性

  • expires属性:Cookie 的 expires 属性指定浏览器可发送 Cookie 的有效期(不是还有一个属性也是可以设置Cookie的有效期的嘛)
  • secure属性:Cookie 的 secure 属性用于限制 Web 页面仅在 HTTPS 安全连接时,才 可以发送 Cookie。
  • HttpOnly 属性:Cookie 的 HttpOnly 属性是 Cookie 的扩展功能,它使 JavaScript 脚本 无法获得 Cookie。其主要目的为防止跨站脚本攻击(Cross-site scripting,XSS)对 Cookie 的信息窃取。 (其实Cookie还是可怕,或许有人就把你的信息给窃取了呢)

确保Web安全的HTTPS

  1. HTTP+加密+认证+完整性保护=HTTPS

    • 如果在HTTP协议通信过程中未使用经加密的明文,比如在Web页面中输入了信用卡号,如果这条通信线路遭到窃听,那么信用卡号就暴露了。另外,对于HTTP来说,服务器好,客户端也好,都是没有办法确认通信方的,因为很有可能并不是和原本预想的通信方在实际通信。并且还需要考虑到接受到的报文在通信途中已经遭到了篡改这一可能。

    • 所以使用了HTTPS?

    i. 是de,这就是为什么我们仔细网站地址栏的时候出现了https而不是http,而且还带有一把锁。这是为什么?
    ii.HTTPS是身披SSL外壳的HTTP,通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简而言之,HTTPS其实就是身披SSL协议的HTTP。
    iii.SSL采用的是一中叫做公开密匙加密的加密方式处理。你会发现,近代的加密方法中的加密算法是公开的,而密匙确实保密的,通过这种方式得到保持加密的方法得安全性。因为加密和解密都会得到密匙,没有密匙就无法对密码进行解密,反过来说,任何人只要持有密匙就能解密了。

这里写图片描述
上面这个问题问的好

  • 密钥发送问题
    i.使用两把密匙的公开密匙加密
    公开密钥加密方式很好地解决了共享密钥加密的困难。
    公开密钥加密使用一对非对称的密钥。一把叫做私有密钥 (private key),另一把叫做公开密钥(public key)。顾名思 义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发 布,任何人都可以获得。
    使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进 行加密处理,对方收到被加密的信息后,再使用自己的私有密钥 进行解密。利用这种方式,不需要发送用来解密的私有密钥,也 不必担心密钥被攻击者窃听而盗走。
    另外,要想根据密文和公开密钥,恢复到信息原文是异常困难 的,因为解密过程就是在对离散对数进行求值,这并非轻而易举 就能办到。退一步讲,如果能对一个非常大的整数做到快速地因 式分解,那么密码破解还是存在希望的。但就目前的技术来看是 不太现实的。(其实密码以及安全这块儿还是很有趣的,当你发现加密解密之间的关系。就好像你攻我守,不断加强,或许有那么一次,你就坚不可摧)

  • HPPTS的安全通信机制
    :HTTPS 比 HTTP 要慢 2 到 100 倍 SSL 的慢分两种。一种是指通信慢。另一种是指由于大量消耗 CPU 及内存等资源,导致处理速度变慢。 和使用 HTTP 相比,网络负载可能会变慢 2 到 100 倍。除去和 TCP 连接、发送 HTTP 请求 • 响应以外,还必须进行 SSL 通信, 因此整体上处理通信量不可避免会增加。
    另一点是 SSL 必须进行加密处理。在服务器和客户端都需要进行 加密和解密的运算处理。因此从结果上讲,比起 HTTP 会更多地 消耗服务器和客户端的硬件资源,导致负载增强。
    针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL 加速器这种(专用服务器)硬件来改善该问题。该硬件为 SSL 通信专用硬件,相对软件来讲,能够提高数倍 SSL 的计算速 度。仅在 SSL 处理时发挥 SSL 加速器的功效,以分担负载。

为什么不一直使用 HTTPS 既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?
其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗相当多的资源,平 摊到一台计算机上时,能够处理的请求数量必定也会随之减少。

利用浏览器进行全双工通信的WebSocket

利用Ajax和Comet技术进行通信可以提升Web的浏览速度,但问题在与通信若使用HTTP协议,就无法彻底解决瓶颈的问题,WebStocket网络技术正是为解决这些问题而实现了一套新的

期盼已久的 HTTP/2.0

HTTP/2.0 的特点 HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。由于基本上 都会先通过 HTTP/1.1 与 TCP 连接,现在我们以下面的这些协议为基 础,探讨一下它们的实现方法。

  • SPDY
  • HTTP Speed + Mobility
  • Network-Friendly HTTP Upgrade

  • HTTP Speed + Mobility 由微软公司起草,是用于改善并提高移动端 通信时的通信速度和性能的标准。它建立在 Google 公司提出的 SPDY 与 WebSocket 的基础之上。

安全

因会话管理疏忽引发的安全漏洞
会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会 话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。

具备认证功能的 Web 应用,使用会话 ID 的会话管理机制,作为管理 认证状态的主流方式。会话 ID 中记录客户端的 Cookie 等信息,服务 器端将会话 ID 与认证状态进行一对一匹配管理。

几种攻击者可获得会话 ID 的途径。

  • 通过非正规的生成方法推测会话 ID
  • 通过窃听或 XSS 攻击盗取会话 ID
  • 通过会话固定攻击(Session Fixation)强行获取会话 ID

攻击者在得知该 Web 网站存在可跨站攻击(XSS)的安全漏洞 后,就设置好用 JavaScript 脚本调用 document.cookie 以窃取 Cookie 信息的陷阱,一旦用户踏入陷阱(访问了该脚本),攻击 者就能获取含有会话 ID 的 Cookie。 攻击者拿到用户的会话 ID 后,往自己的浏览器的 Cookie 中设置 该会话 ID,即可伪装成会话 ID 遭窃的用户,访问 Web 网站了。

密码破解

  • 穷举法
  • 字典破解

Dos攻击

主要有一下两者Dos攻击方式

  • 集中利用访问请求造成资源过载,资源用尽的同时,实际上
    235
    服务也就呈停止状态。
  • 通过攻击安全漏洞使服务停止。

粗略看完,http这块对于网络传输诸如此类的接触还是可以多看看,了解一下原理。这本书还行,以后还会再回过头细读一次的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值