HTTP: HyperText Transfer Protocal,超文本传输协议/超文本转移协议。Web是创建在HTTP协议上通讯的。javascript
HTTP于1990年问世,那时候HTTP并无做为正式的标准被创建,被称为HTTP/0.9
HTTP正式做为标准被公布是在1996年5月,版本被命名为HTTP/1.0,该协议至今仍被普遍用在服务器端。
HTTP/1.1于1997年1月公布,是目前主流的HTTP协议版本。
HTTP/2.0正在制定中。java
一般使用的网络(包括互联网)是在TCP/IP协议族的基础上运做的。而HTTP属于它内部的一个子集。咱们能够把TCP/IP当作是互联网相关协议的总称。web
TCP/IP协议族按层次分别为如下4层:
应用层:决定了向用户提供应用服务时的通讯活动,该层包括FTP、DNS、HTTP。
传输层:对上层应用层,提供处于网络链接中的两台计算机之间的数据传输,该层包括TCP、UDP。
网络层:用来处理在网络上流动的数据包,该层规定了经过怎样的路径达到对方计算机并把数据包传送给对方。
数据链路层:用来处理链接网络的硬件部分,如:网卡、光纤。shell
TCP/IP通讯传输流(http举例)
(客户端)HTTP客户端-->TCP-->IP-->网络 --|--网络-->IP-->TCP-->HTTP服务器(服务器)
发送端每经过一层则增长首部(header),接收端每经过一层则删除首部。这种方法称为封装。数据库
负责传输的 IP 协议
在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议。ARP 是一种用以解析地址的协议,根据通讯方的 IP 地址就能够反查出对应的 MAC 地址。数组
确保可靠性的 TCP 协议
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略。浏览器
DNS服务是和 HTTP 协议同样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。缓存
按流程顺序分别为:
DNS服务:把用户输入的域名解析为IP地址
HTTP协议:生成针对目标web服务器的HTTP请求报文
TCP协议:为了方便通讯将HTTP请求报文分割成报文段,把每一个报文段可靠的传给对方
IP协议:搜索对方的地址,一边中转一边传送
TCP协议:从对方那里接收报文段并按序号从组请求报文
HTTP协议:对web服务器请求的内容的处理安全
URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。URL 是 URI 的子集。
区别就是 URI 定义资源,而 URL 不单定义这个资源,还定义了如何找到这个资源(既访问资源的方式)。服务器
请求报文是由请求方法、请求URI、协议版本、可选的请求头部字段和内容实体构成的。
响应报文基本上是由协议版本、状态码、用以解释状态码的缘由短语、可选的响应首部字段及实体主体构成。
HTTP协议自身不对请求和响应之间的通讯状态进行保存。
HTTP协议使用URI定位互联网上的资源。
方法 | 说明 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 得到报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议链接代理 |
LINK | 创建和资源之间的联系 |
UNLINK | 断开链接关系 |
向请求URI指定的资源发送请求报文时,采用成为方法的命令。
持久链接的好处在于减小了TCP链接的重复创建和断开所形成的额外开销,减轻服务器端荷载。在HTTP/1.1中全部链接默认都是持久链接。持久链接使得多数请求以管线化方式发送,即能同时并行发送多个请求。
Ccookie技术是经过在请求和响应报文中写入cookie信息来控制客户端的状态。Cookie会根据从服务器发送的响应报文内的一个叫作Set-Cookie的首部字段信息,通知客户端保存cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端接收到客户端发送过来的Cookie后,会去检查到底是从哪个客户端发来的链接请求,而后对比服务器上的记录,最后获得以前的状态信息。
HTTP报文大体可分为报文首部和报文主体两块,二者有最初出现的空行来划分,一般并不必定要有报文主体。
请求行:包含用于请求的方法,请求URI和HTTP版本
状态行:包含响应结果的状态码,缘由短语和HTTP版本
首部字段:包含表示请求和响应的各类条件和属性的各种首部,通常分别为:通用首部、请求首部、响应首部和实体首部。
其余:包含HTTP的RFC里未定义的首部(Cookie等)
经常使用的内容编码方式有如下几种:
gzip(GNU zip)
compress(UNIX系统的标准压缩)
deflate(zlib)
identity(不进行编码)
HTTP协议中也采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。多部分对象集合的每一个部分类型中,均可以含有首部字段。
执行范围请求时,会用到首部字段Range来指定资源的byte范围。针对范围请求,响应会返回状态码为206 Partial Content的响应报文。
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,而后提供给客户端最适合的资源。内容协商会以响应资源的语言、字符集、编码方式等做为判断的基准。如首部字段中的Accept、Accept-Charset、Accept-Enoding、Accept-Language、Content-Language。
状态码 | 类别 | 含义 | |
---|---|---|---|
1XX | informational(信息性状态码) | 接收的请求正在处理 | |
2XX | Success(成功状态码) | 请求正常处理完毕 | |
3XX | Redirection(重定向状态码) | 须要进行附加操做已完成请求 | |
4XX | Client Error(客户端错误状态码) | 服务器没法处理请求 | |
5XX | Server Error(服务器端错误状态码) | 服务器处理请求出错 | |
2XX | 成功 | ||
200 | OK | 表示从客户端发来的请求在服务器端被正常处理 | |
204 | No Content | 表示服务器接收的请求已成功处理,但返回的响应报文中不容许返回任何实体的主体部分 | |
206 | Partial Content | 表示客户端进行了范围请求,服务器成功执行了这部分GET请求 | |
3XX | 重定向 | ||
304 | Not Modified | 表示客户端发送附带条件的GET请求时,其访问的资源(自上次访问以来或者根据请求的条件)未变化 | |
4XX | 客户端错误 | ||
401 | Bad Request | 表示报文中存在语法错误 | |
403 | Forbidden | 表示对请求资源的访问被服务器拒绝了 | |
404 | Not Found | 表示服务器上没法找到请求的资源 | |
5XX | 服务器错误 | ||
501 | Internet Sever Error | 表示服务器端在执行请求时发生了错误 | |
503 | Service Unavailable | 表示服务器暂时处于超负荷或正在停机维护,现没法处理请求 |
HTTP / 1.1 规范容许一台 HTTP 服务器搭建多个 Web 站点。这是利用虚拟主机的功能。
在互联网上,域名经过 DNS 服务映射到 IP 地址以后访问目标网站。可见,当请求发送到服务器时,已是以 IP 地址形式访问了。因此,当一台托管了两个域名的服务器接收到请求时就须要弄清楚究竟要访问哪一个域名。
在相同的 IP 地址下,因为虚拟主机能够寄存多个不一样主机名和域名的 Web 网站,所以在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。
代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。代理服务器的基本行为接收客户端发送的请求后转发给其余服务器,代理不改变请求URI,转发时须要附加Via首部字段已标记出通过的主机信息。
使用代理服务器的理由:利用缓存技术(代理缓存)减小网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。
代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另外一种是是否会修改报文:
缓存代理:代理转发响应时,缓存代理会预先将资源的副本(缓存)保存在代理服务器上
透明代理:转发请求或响应时,不对报文作任何加工的代理类型被称为透明代理。反之,对 报文内容进行加工的代理被成为非透明代理。
网关
网关是转发其余服务器通讯数据的服务器,接收从客户端发送来的请求时,它就像本身拥有资源的源服务器同样对请求进行处理。有时客户端可能都不会察觉,本身的通讯目标是一个网关。
网关的工做机制和代理十分类似。而网关能使通讯线路上的服务器提供非 HTTP 协议服务。
隧道
隧道是在相隔甚远的客户端和服务器二者之间进行中转,并保持双方通讯链接的应用程序。
隧道自己不会去解析 HTTP 请求。请求保持原样中转给以后的服务器。隧道会在通讯双方断开链接时结束。
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减小对源服务器的访问,节省通讯流量和时间。
缓存服务器是代理服务器的一种。当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本。
缓存服务器的优点在于利用缓存可避免屡次从源服务器转发资源。所以客户端可就近从缓存服务器上获取资源,而源服务器也没必要屡次处理相同的请求了。
缓存的有效期限
对于缓存服务器和客户端浏览器,当断定缓存过时或客户端要求,会向源服务器确认资源的有效性。若失效,浏览器会再次请求新资源。
客户端的缓存
缓存不只能够存在于缓存服务器内,还能够存在客户端浏览器中。以 Internet Explorer 程序为例,把客户端缓存称为临时网络文件。
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
4种HTTP首部字段类型
通用首部字段、请求首部字段、响应首部字段、实体首部字段。
通讯使用明文(不加密),内容可能会被窃听
不验证通讯方的身份,所以有可能遭遇假装
没法证实报文的完整性,因此有可能已遭篡改
HTTPS是身披SSL外壳的HTTP。一般,HTTP直接和TCP通讯。当使用 SSL 时,则演变成先和 SSL 通讯,再由 SSL 和 TCP 通讯了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的HTTP。
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。SSL是独立于HTTP的协议,因此不光是 HTTP 协议,其余运行在应用层的 SMTP 和Telnet等协议都可配合 SSL协议使用。能够说SSL是当今世界上应用最为普遍的网络安全技术。
SSL 采用一种叫作公开密钥加密的加密处理方式。HTTPS 采用混合加密机制。
计算机自己没法断定坐在显示器前的使用者的身份。进一步说,也没法确认网络的那头究竟有谁。为了确认是否真的具备访问系统的权限,须要核对信息:
密码:只有本人才会知道的字符串信息。
动态令牌:仅限本人持有的设备内显示的一次性密码。
数字证书:仅限本人(终端)持有的信息。
生物认证:指纹和虹膜等本人的生理信息。
IC卡等:仅限本人持有的信息。
HTTP/1.1使用的认证方式:
BASIC认证
DIGEST认证(摘要认证)
SSL客户端认证
FormBase认证(基于表单认证)
基于表单认证
Session管理及Cookie状态管理:
步骤1:客户端把用户ID和密码等登陆信息放入报文的实体部分,一般是以POST方法把请求发送给服务器。而这时,会使用HTTPS通讯来进行HTML表单画面和用户输入数据的发送。
步骤2:服务器会发放用以识别用户的Session ID。经过验证从客户端发送过来的登陆信息进行身份认证,而后把用户的认证状态与Session ID绑定后记录在服务器端。
步骤3:客户端接收到从服务器端发来的Session ID后,会将其做为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,因此Session ID也随之发送到服务器。服务器端能够经过验证接收到的Session ID识别用户和其认证状态。
HTTP的瓶颈:
使用HTTP协议探知服务器内容是否更新,就须要频繁的从客户端到服务器端进行确认,若是服务器上没有内容更新,此时就会产生徒劳的通讯。主要的缺点有:
一条链接上只能发送一个请求
请求只能从客户端开始。客户端不能够接收除响应意外的命令。
请求/响应首部未经压缩就发送。首部信息越多延时越大。
发送冗长的首部。每次相互发送相同首部形成的浪费较多。
可任意选择数据压缩格式。非强制压缩发送。
SPDY的设计与功能
SPDY没有彻底改写HTTP协议,而是在TCP/IP之间应用层和传输层之间经过新加入会话的形式运做,同时考虑安全性问题,SPDY规定通讯中使用SSL。
SPDY会以会话层加入,控制对数据的流动,可是仍是采用HTTP创建通讯链接。所以可照常使用HTTP的GET和PSOT等方法、Cookie以及HTTP报文等。
websocket与web浏览器与web服务器之间全双工通讯标准。一旦web浏览器和web服务器之间创建这种联系,以后全部的通讯都依靠这个专用的协议进行。通讯过程当中能够相互发送JSON、XML、HTML或者图片等任意格式的数据。
为了发送Web上的超文本而开发的标记语言。超文本是一种文档系统,可将文档中任意位置的信息与其余信息创建关联,即超连接文本。标记语言是指经过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。咱们把出如今HTML文档内的这种特殊字符串叫作HTML标签(tag)
指使用客户端脚本语言将静态的HTML内容变成动态的技术的总称。动态HTML是经过调用客户端脚本javascript,实现对HTML的web页面的动态改造。利用DOM可指定欲发生动态变化的HTML元素。
指经过web功能提供的应用程序,如购物网站、搜索引擎等。其中由程序建立的内容称之为动态内容,而事先准备好的内容称之为静态内容。web内容则做用于动态内容之上。
XML(extensible Markup Language,可扩展标记语言)是一种可按应用目标进行扩展的通用标记语言。旨在经过使用xml,使得互联网数据共享变得容易。XML和HTML都是从标准通用标记语言SGML简化而成
RSS(简易信息聚合)和Atom都是发布新闻博客日志等更新信息文档格式的总称。二者都用到了XML
JSON是一种以javascript的对象表示法为基础的轻量级数据标记语言,可以处理的数据类型有false/null/true/对象/数组/数字/字符串,这7种类型。
在客户端便可篡改请求
在WEB应用中从浏览器接收到的HTTP请求的所有内容均可以在客户端自由的变动、篡改。所以web引用可能接收到与预期数据不相同的内容;在HTTP请求报文内加载攻击代码就能对web应用发起对web应用的攻击。
攻击模式分类
主动攻击(active attack)主要是攻击者经过直接访问web应用把攻击代码传入的攻击模式。因为该模式是针对服务器上的资源进行攻击,所以攻击者须要可以访问那些资源,主动攻击模式中具备表明性的有SQL注入攻击和OS命令注入攻击。
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程当中,攻击者不直接对目标web应用访问发起攻击。
实施web应用对策大体能够分为如下两种:客户端验证、web应用端(服务器端)的验证。
跨站脚本攻击
跨站脚本攻击(XSS)是指经过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击。动态建立的HTML部分可能有隐藏的漏洞,这样攻击者编写脚本陷阱,用户在本身浏览器上运行时,一不当心就会受到被动攻击。
对用户Cookie的窃取攻击
经过js脚本窃取Cookie信息
SQL注入攻击
SQL注入是指针对Web应用使用的数据库,经过运行非法的SQL而产生的攻击。该安全隐患可能会致使我的信息及机密信息的泄露。因为We应用一般会使用到数据库,若是在调用数据库语句方式存在疏漏,就有可能被执行恶意注入。
OS命令注入攻击
OS命令注释系统是指经过web应用执行非法的操做系统命令达到攻击的目的。能够从wen应用中经过shell来调用操做系统命令,假若调用shell时存在疏漏就能够执行插入的非法OS命令,经过os注入攻击能够执行os上安装着的各类程序。
HTTP首部注入攻击
HTTP首部注入攻击是指攻击者经过响应首部字段内插入换行,添加任意响应首部或主体的一种攻击,属于被动式攻击。向首部主体添加内容的攻击方式称为HTTP响应截断攻击
HTTP响应截断攻击
HTTP响应截断攻击是HTTP首部注入攻击的一种,攻击顺序相同可是要将%0D%0A%0D%0A并排插入字符串后发送,利用这两个连续换行就能够作出HTTTP首部与主体分割所需的空行了,这样就能显示伪造的主体,达到攻击的目的。这样的攻击称做HTTP响应截断攻击。
邮件首部注入攻击
是指web应用中的邮件发送功能。攻击者经过向邮件首部To或者Subject内任意添加非法内容发起的攻击。
目录遍历攻击
对本无心公开的文件目录,经过非法截断其目录路径后,达成访问目的的一种攻击方式。这种攻击又称路径遍历攻击
远程文件包含漏洞
指当部分脚本内容须要从其余文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取后,就能够运行任意脚本的一种攻击方式。(主要是PHP存在的安全漏洞)
主要是错误设置web服务器或者是由设计上的一些问题引发的安全漏洞。主要包括下面3个方面
强制浏览
强制浏览安全漏洞是指,从安置在web服务器的公开目录下的文件中,浏览那些本来非自愿公开的文件。强制浏览能够形成诸如泄露顾客的我的信息等重要情报、泄露本来须要具备访问权限的用户才能够查阅的信息内容、泄露未链接到外界的文件
不正确的错误消息处理
指web应用的错误当心包含对攻击者有用的信息,包括Web应用抛出的错误消息、数据库等系统抛出的错误消息
开放重定向
指对任意URL做重定向跳转的功能。
会话管理是用来管理用户状态的必备功能,可是若是在会话管理上有所疏忽,就会致使用户的认证状态被窃取等后果。
会话劫持
经过某种非法手段得到用户的ID,并不是法使用此会话ID假装成用户,达到攻击的目的。
会话固定攻击
对以窃取目标会话ID为主动攻击手段劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话ID,属于被动攻击
跨站点请求伪造
指攻击者经过设置好的陷阱,强制对已完成认证的用户进行非预期的我的信息或者设定信息等某些状态更新,属于被动攻击
密码破解攻击点击劫持:指利用透明按钮或者连接作成陷阱,覆盖在Web页面之上,又称页面假装。dos攻击:是一种让运行中的服务呈现中止状态的攻击,又称服务器中止攻击或拒绝服务攻击。Dos攻击对象不只限于Web网站还包括网络设备及服务器。主要有两种方式DoS:集中利用访问请求形成资源过载,资源用尽的同时实际服务也就呈现中止状态;经过攻击安全漏洞使服务中止。后门程序:指开发设置的隐藏入口。