reference:https://www.cnblogs.com/edisonchou/p/6013450.html

 

  目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书《HTTP权威指南》与《TCP/IP详解,卷1》,但内容晦涩难懂,学习难度较大。其实,HTTP协议并不复杂,理解起来也不会花费太多学习成本,这本书的出现就及时缓解了该问题。对基础及核心部分的深入学习是成为一名专业技术人员的前提,以不变应万变才是立足之本。此外,这本书也是我的2016年度读书计划中的一本,它和《图解TCP/IP》一起作为计算机网络基础部分为我温故知新了一把,谢谢作者和译者,画了这么多图解让我们理解。

一、HTTP协议初探

  1.1 各种协议与HTTP协议的关系

  1.2 请求处理响应模型

  HTTP协议规定,请求从客户端发出,最后服务端响应应该请求并返回。

  请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

  响应报文:由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

  

  1.3 HTTP是一种无状态协议

  HTTP协议对于发送过的请求或响应都不做持久化处理:协议本身并不保留之前一切的请求或响应报文的信息,这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。

  Cookie根据服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端自动在请求报文中加入Cookie值后发送出去。服务端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

  1.4 告知服务器意图的HTTP方法

  (1)GET:获取资源

  (2)POST:传输实体主体 → POST的主要目的并不是获取响应的主体内容

  (3)PUT:传输文件 → 就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置

但是,鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,所以存在安全性问题,因此一般的Web网站不使用该方法

  (4)HEAD:获得报文首部 → HEAD与GET一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等等。

  (5)DELETE:删除文件 → DELETE与PUT相反,DELETE按请求URI删除指定资源。

但是,HTTP/1.1的DELETE方法本身与PUT方法一样不带验证机制,所以一般的Web网站也不使用DELETE方法。  

  (6)OPTIONS:询问支持的方法 → 查询针对请求URI指定的资源所支持的方法(例如该资源支持GET、POST、PUT等)。

  (7)TRACE:追踪路径 → 让Web服务器端将之前的请求通信环回给客户端的方法。(不常用,容易引发XST攻击)

  (8)CONNECT:要求用隧道协议连接代理 → 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经过网络隧道传输。

CONNECT方法的格式:CONNECT 代理服务器名:端口号 HTTP版本

  1.5 持久连接

  在HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。因此,每次的请求都会造成无谓的TCP连接建立与断开,增加通信量的开销。为了解决这个问题,HTTP/1.1想出了持久连接(也称为HTTP keep-alive),其特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器的负载,也使得HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应的提高了。在HTTP/1.1中,所有的连接默认都是持久连接。  

二、HTTP报文详解

  用于HTTP协议交互的信息就被称为HTTP报文,请求段的叫做请求报文,响应端的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。

  2.1 HTTP报文结构

  (1)HTTP报文大致可以分为报文首部和报文主体两块

  (2)请求报文和响应报文的结构实例

  2.2 部分内容的范围请求

  通常下载一个大文件时如果遇到网络中断的情况,那就必须重头开始,因此为了解决上述问题,就需要一种可恢复的机制。所谓恢复就是指从之前下载的中断处恢复下载。要实现该功能需要制定下载的实体范围,这就叫范围请求(Range Request)。

  对一份10000字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源。执行范围请求时,就会用到Range来指定资源的byte范围。

  2.3 内容协商机制

  内容协商机制就是指在客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会议响应资源的语言、字符集、编码方式等作为判断的基准。

So,有哪些判断的基准呢?

Accept

Accept-Charset

Accept-Encoding

Accept-Language

Content-Language

  2.4 HTTP状态码

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

  (1)2XX 成功 → 表明请求被正常处理了,如200 OK,204 No Content,206 Partial Content

  (2)3XX 重定向 → 表明浏览器需要执行某些特殊的处理以正确处理请求。如301 Moved Permanently(永久移动),302 Found(临时移动),303 See Other(资源的URI已更新,是否能临时按新的URI访问)、304 Not Modified(资源已找到,但未符合条件请求)、307 Temporary Redirect(临时重定向)

  (3)4XX 客户端错误 → 表明客户端是发生错误的原因所在。如400 Bad Request(请求报文中存在语法错误),401 Unauthorized(认证失败或未认证)、403 Forbidden(不允许访问这个资源)、404 Not Found(服务器上没有请求的资源)。

  (4)5XX 服务器错误 → 表明服务器本身发生错误。如500 Internal Server Error(服务器端在执行请求时发生了错误,也可能是Web应用存在的Bug或某些临时的故障),503 Service Unavailable(表明服务器暂时处于超负载或正在停机维护,无法处理请求)。

  2.5 HTTP首部

   HTTP/1.1规范定义了如下47种首部字段:

  (1)通用首部字段

  (2)请求首部字段 

  (3)响应首部字段

  (4)实体首部字段

三、确保Web安全

  3.1 HTTPS

  在HTTP协议中有可能存在信息窃听或者身份伪装等安全问题,即使已经过加密处理的通信,也会被窥视到通信内容。例如:使用一些抓包软件如Packet Capture或Sniffer就可以抓取相同段上的通信。使用HTTPS(HTTP Secure)通信机制就可以有效地防止这些问题。

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

  HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通常情况下,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简而言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP

  SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说,SSL是当今世界上应用最为广泛的网络安全技术。在采用了SSL之后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。

  既然HTTPS安全可靠,那为何所有的Web网站不一直使用HTTPS?

一是因为与纯文本通信相比,加密通信会消耗更多的CPU以及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定会随之减少。

二是购买证书的开销也很大,要进行HTTPS通信,证书是必不可少的,而使用的证书必须要向认证机构(CA)购买。通常,一年的授权费用需要600人民币左右。  

所以,如果是非敏感信息一般都使用HTTP通信,只有在包含个人信息等敏感数据时,才会使用HTTPS加密通信

  3.2 确认访问用户身份的认证

  某些Web页面只想让特定的人浏览,或者干脆本人可见。未达到这个目标,必不可少的就是认证功能。

  HTTP/1.1使用的认证方式如下:

  (1)BASIC认证(基本认证) → 不够灵活,达不到多数Web网站期望的安全性等级(直接发送明文密码BASE64编码),因此它并不常用。

  (2)DIGEST认证(摘要认证) → 采用质询响应方式,相比BASIC认证,密码泄露的可能性就降低了。

  (3)SSL客户端认证 → 借助HTTPS的客户端证书完成认证,凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端。

  (4)FormBase认证(基于表单认证)

通常情况下,一种安全的保存方法是:先利用密码加盐(Salt)的方式增加额外信息,再使用散列(Hash)函数计算出散列值后保存。

四、Web的攻击技术

  4.1 针对Web应用的攻击模式

  (1)主动攻击:攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。最具典型的攻击就是 SQL注入攻击和OS命令注入攻击。

  (2)被动攻击:利用圈套策略执行攻击代码地攻击模式,在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。

  4.2 跨站脚本攻击(XSS)

  跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript脚本进行攻击的一种攻击。

  跨站脚本攻击可以造成以下影响:

  (1)利用虚假输入表单骗取用户个人信息。

  (2)利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。

  (3)显示伪造的文章或者图片。

  4.3 SQL注入攻击

  SQL注入(SQL Injection)是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引起极大地威胁,有时会直接导致个人信息及机密信息的泄露。

  SQL注入攻击有可能造成以下影响:

  (1)非法查看或篡改数据库内的数据。

  (2)规避认证。

  (3)执行和数据库服务器业务关联的程序等。

  4.4 OS命令注入攻击

  OS命令注入攻击是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。

  4.5 HTTP首部注入攻击

  HTTP首部注入攻击是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主题的一种攻击。属于被动攻击模式。

  4.6 因会话管理疏忽引发的安全漏洞

  (1)会话劫持:攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。

  (2)会话固定攻击:强制用户使用攻击者指定的会话ID,属于被动攻击。

  (3)跨站点请求伪造Cross-Site Request Forgeries,CSRF):攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。

  CSRF有可能造成以下影响:

1、利用已通过认证的用户权限更新设定信息等;

2、利用已通过认证的用户权限购买商品;

3、利用已通过认证的用户权限在留言板上发表言论等;

  4.7 DoS攻击

  DoS攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫作服务停止或拒绝服务攻击。主要有以下两种DoS攻击方式:

  (1)集中利用访问请求造成资源过载,资源用尽的同时,实际上也就呈停止状态。

  单纯来讲,就是发送大量的合法请求,服务器很难分辨何为正常请求,何为攻击请求,因此很难防止DoS攻击。多台计算机发起的DoS攻击成为DDoS攻击(Distributed Denial of Service attack),DDoS攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。

  (2)通过攻击安全漏洞使服务停止。

《图解HTTP》读书笔记(转)的更多相关文章

  1. 图解TCP/IP读书笔记(二)

    图解TCP/IP读书笔记(二) 第二章.TCP/IP基础知识 一.TCP/IP出现的背景及其历史 年份 事件 20世纪60年代后半叶 应DoD(美国国防部)要求,美国开始进行通信技术相关的研发 196 ...

  2. 图解TCP/IP读书笔记(一)

    图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...

  3. 图解TCP/IP读书笔记(三)

    第三章.数据链路 数据链路层是计算机网络最基本的内容. 数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范. 一.数据链路相关技术 1.MAC地址 关于MAC地址的几个要点: ①MAC地址长度 ...

  4. # 图解TCP/IP读书笔记(五)

    第五章.IP协议相关技术 IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP是无法实现通信的,因此还有需要作为为IP的辅助的各种协议支持. 协议 作用 特点 DNS(Domain Name ...

  5. 图解TCP/IP读书笔记(四)

    第四章.IP协议 IP(Internet Protocol,网际协议),作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机.因此,IP能够让世界上任何两台计算机之间进行通信. ...

  6. TCP/IP读书笔记(4) IPv4和IPv6 路由选择

    TCP/IP读书笔记(4) IPv4和IPv6 路由选择 网络层是位于链路层之上,TCP/IP模型中网络层的核心协议是IP协议(Internet protocol). 目前主流的IP协议是IPv4(I ...

  7. 《图解TCP/IP》笔记

    OSI参考模型 协议分层 为什么需要分层? 简化网络协议. 每一层只需要衔接上下层的服务. 利于模块化开发. 解耦. 分层的问题 过分模块化.提高数据处理的开销. OSI参考模型 作用及意义 将复杂的 ...

  8. 《图解tcp/ip》读书笔记(二)

    <图解tcp/ip>读书笔记(二) 本周主要阅读的是本书的第三章--数据链路. 当然了,从某些角度讲,我认为这一章就是计算机网络的最基本的内容之一.整章讲述了数据链路层的作用和相关技术,主 ...

  9. 读书笔记——《图解TCP/IP》(1/4)

    读书笔记——<图解TCP/IP>(1/4) 经典摘抄 第一章 网络基础知识 1.独立模式:计算机未连接到网络,各自独立使用的方式. 2.广域网 WAN 局域网 LAN 城域网 MAN 3. ...

  10. 读书笔记——《图解TCP/IP》(4/4)

    经典摘抄 第八章 应用层协议概要 1.应用协议是为了实现某种应用而设计和创造的协议. 2.TCP/IP的应用层包含了管理通信连接的会话层功能.转换数据格式的表示层功能,还包括与对端主机交互的应用层功能 ...

随机推荐

  1. Linq to XML 增删改查

    Linq to XML同样是对原C#访问XML文件的方法的封装,简化了用xpath进行xml的查询以及增加,修改,删除xml元素的操作.C#访问XML文件的常用类:XmlDocument,XmlEle ...

  2. 20 Interesting WPF Projects on CodePlex

    20 Interesting WPF Projects on CodePlex (Some for Silverlight too) Pete Brown - 22 November 2010   I ...

  3. android--------实现Activity和Fragment通信的面向对象的万能接口

    前言 开发一个app时,常用Activity和Fragment,由于操作方便Fragment越来越受欢迎,这样就避免不了Activity和Fragment.Fragment和Fragment之间的通信 ...

  4. vue的优点

    vue-router 单页面 虚拟DOM https://www.cnblogs.com/oldboyooxx/p/9186482.html

  5. find xss

    from :http://blog.sina.com.cn/s/blog_68d342d90100nh7b.html 什么是XSS跨站攻击: http://baike.baidu.com/view/5 ...

  6. Ubuntu深度学习环境搭建 tensorflow+pytorch

    目前电脑配置:Ubuntu 16.04 + GTX1080显卡 配置深度学习环境,利用清华源安装一个miniconda环境是非常好的选择.尤其是今天发现conda install -c menpo o ...

  7. canvas移动端兼容性问题总结

    项目简介:在网页利用canvas在图片中动态绘制文字,合成一张图片,并导出 遇到的问题: 1.在移动端canvas drawImage()方法图片无法绘制出来,只显示文字 原因:图片未加载就进行绘制, ...

  8. python 小练习 5

    Py从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992, 这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和 ...

  9. Maximum sub array

    Here I post a way to solve maximum sub array problem: The problem described like this: here is an ar ...

  10. Git:创建远程仓库并推送内容到远程库

    1.添加远程仓库 1.1点击该按钮创建一个新仓库 2.推送到远程仓库 2.1根据GitHub的提示,在本地的learngit仓库下运行命令git remote add origin https://g ...