HTTP学习

HTTP:Hypertext Transfer Protocol(超文本传输/转移协议)

一.网络基础

TCP/IP

是互联网相关的各类协议族的总称,HTTP是属于其内部的一个子集。!协议族按照层次分为:

应用层:决定了向用户提供应用服务时通信活动,eg:HTTP,FTP,DNS

传输层:处于网络连接中两台计算机之间的数据传输,有TCP和UDP

网络层:处理网络上流动的数据包(网络传输的最小数据单位),规定了通过怎么的传输路线到达对方计算机并把数据包传送给对方。

数据链路层:处理链接网络的硬件部分。包括控制操作系统,驱动,网卡,光纤等物理可见部分

发送顺序:

与HTTP密切相关的协议:

TCP:提供可靠的字节流服务(为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理),采用三次握手策略:

          1.发送端发送一个带SYN的数据包给对方    

          2.接收端回传一个带SYN/ACK标志的数据包以示传达确认消息

          3.发送端在回传一个带ACK标识的数据包,代表握手结束

IP:要将各种数据包传送给对方,其中两个重要条件就是IP地址和MAC地址。过程:根据IP地址,用APR(一种用以解析地址的协议)反查出对应的MAC地址,利用MAC进行通信

          IP地址:指明节点被分配到的地址,可以和MAC地址进行配对,可变         

          MAC地址:网卡所属的固定地址,基本不变

DNS:提供域名到IP地址之间的解析服务

URI和URL:

URI:统一资源标识符:标识某一互联网资源

        URI格式:  

                服务器地址可以是DNS可解析的名称,或者192.168.1.1这类IPv4地址,或者

                [0:0:0:0:0:0:0:1]这种用[]的IPv6地址名

URL:统一资源定位符(URI子集):标识资源的地点

二.简单的HTTP

报文:

请求报文:

请求方法、请求URI、协议版本     //起始行

可选的请求首部字段     //可分为请求首部字段、通用首部字段、实体首部字段,Cookie等为未定义首部

//空行分隔

内容实体

响应报文:

协议版本、状态码和原因短语    //起始行

可选的请求首部字段       //可分为响应首部字段、通用首部字段、实体首部字段

//空行分隔

资源实体的主体

报文主体和实体主体的差异:

报文主体:HTTP通信中的基本单位,由8位组字节流组成

实体主体:作为请求或响应的有效载荷数据被传输

报文主体用于传输实体主体,所以通常,报文主体等于实体主体。主要当传输中进行编码操作(为了提升传输速率),实体主体的内容发生变化,两者才会产生差异。

多部份对象集合:

HTTP协议中也采用了多部份对象集合,发送的一份报文主体可能含有多类型实体,通常是在图片或文件等上传时使用。使用多部份对象集合时,首部字段需加上Content-type

multiparty/form-data:web表单文件上传时使用

mmultiparty/byteranges:包含了多个范围的内容时使用

获取部分内容的范围请求:

使得能从下载中断处恢复下载,要实现。需要指定下载的非实体范围,用首部字段Range来指定资源的byte范围,eg:Range: byte=5001-1000,12000-

-3000  //一开始到3000         12000-      //12000之后全部

HTTP方法:

GET:获取资源

POST:传输实体主题,主要目的不是为了获取响应的主体内容

PUT:传输文件,但由于HTTP/1.1的PUT自身不带验证机制,存在安全性问题,一般不用,但配合REST架构的可能可以,返回204,已存

HEAD:获得报文首部,不返回主体部分,用于确认URI的有效性及资源更新的日期时间等

DELETE:删除文件,与PUT相反,同无验证机制,返回204,已删

OPTIONS:查询请求指定资源支持的方法,起始行:OPTIONS * HTTP/1.1

TRACE:追踪路径,在Max-Forwards首部字段中填入数值,每经过一个服务器,该数值-1,当到0的时候,停止传输,最后收到请求的服务器返回200 OK的相应,可以可以查询发送出去的请求怎么被加工修改。但可能会引发XST(跨站追踪)攻击。起始行:TRACE / HTTP/1.1

CONNECT:要求用隧道协议连接代理:要求和代理服务器通信时建立隧道,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。起始行:CONNECT 代理服务器名:端口号  HTTP/1.1

状态码:

1xx:信息行状态码

2xx:成功状态码

          200:OK------正常处理了

          204:No Content-----已处理,但响应报文不含实体的主体部分eg:发送请求,204响应则浏览器页面不更新

          206:Partial Content------进行了范围请求,并成功执行,响应报文中含有指定范围的实体内容

3xx:重定向状态码

          301:Moved Permanently------永久性重定向,请求的资源已被分配了新的URI,以后都使用新的URI

          302:Found-----临时性重定向,请求的资源已被分配了新的URI,希望用户本次能用新的URI,但以后还可能会变

          303:See Other------请求的资源存在另一个URI,与302有着相同功能,但303明确表示客户端应采用GET获取资源

          301和 302标准是禁止将POST改为GET,但实际当返回301、302、303时,几乎所有浏览器都会把POST改为                   GET,并删除报文内的主体,再次发送。

          304:Not Modified------发送附带条件的请求时,允许访问,但未能满足条件的情况,返回不包含任何主体部分

          307:Temporary Redirect------临时重定向,与302含义相同,但不会将POST变成GET

4xx:客户端错误状态码

          400:Bad Request------请求报文中存在语法错位

          401:Unauthorized------需认证或认证失败

          403:Forbidden------被拒绝,可能因为访问权限等原因

          404:Not Found------无法找到请求资源,也可以在服务器拒绝请求且不想说明理由时使用

5xx:服务器错误状态码

          500:Internal Server Error------服务器在执行请求时发生了错误

          503:Service Unavailable------服务器暂时处于超负载或正在停机维护,如果确定状况所需时间,最好写入                          RetryAfterf返回给客户端

首部字段:

通用首部字段:

          Cache-Control:控制缓存行为,指令的参数可选,“,”来分隔

                  

                   

          Connection:

                     控制不再转发给代理的首部字段:写哪个首部字段,哪个就会被删除,请求再转发

                     管理持久连接:默认为Keep-Alive,还有close

          Date:表明创建HTTP报文的日期和时间

          Pragma:HTTP/1.1之前版本的历史遗留字段,仅用于客户端请求,值为no-cache,要求所有的中间服务器不返回                                       缓存文件

          Trailer:事先说明再报文主体后记录了哪些首部字段

          Transfer-Encoding:规定了传输报文主体时采用的编码方式

          Upgrade:弄个与检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全

                           不同的通信协议。使用这个字段时,还需要Connection:Upgrade

          Via:追踪客户端和服务器之间的传输路径(代理或网关会Via附加该服务器信息),还可避免请求回环的发生

          Warning:告知用户一些与缓存相关的问题的警告。格式如下:

                    Warning:[警告码][警告的主机:端口号]"[警告内容]"([日期时间])

          部分警告码如下,还可能追加:

请求首部字段:

          Accept:通知服务器,用户代理能处理的媒体类型及媒体类型的相对优先级。使用q=来额外表示权重值,用分号分                                      隔,默认为1

          Accept-Charset:通知服务器用户代理支持的字符集及相对优先顺序,优先同上

          Accept-Encoding:告知服务器用户支持的内容编码及相对优先顺序,优先同上,也可以用*指定任意编码格式

          Accept-Language:用户能够处理的自然语言集(中文或英文等)及优先级,优先同上

          Authorization:认证

          Expect:期望出现某种特定行为,当服务器无法理解客户端期望时,返回417Expection Failed

          From:告知服务器使用用户代理的用户的电子邮件地址,目的是为了显示搜索引擎等用户代理的负责人的电子邮

                       件联系方式。使用代理时,尽可能使用From字段,但有些也会把邮件地址记录再User-Agent

          Host:必写,告知服务器,请求的资源所处的互联网主机名和端口号

          If-xxxx之类的字段,都可成为条件请求,服务器接收到后,只有判断指定条件为真才会执行请求

          If-Match:匹配服务器匹配资源所用的实体标记(ETag)值,这时的服务器无法使用弱ETag值,一致才执行请求,

                           反之,返回412Precondition Failed。使用*则任意匹配

          If-Modefied-Since:指定日期时间后,资源发生了更新,服务器会接受请求,反之返回304 Not Modefied

          If-None-Match:与ETag不一致时

          If-Range:若和ETag值或更新的日期时间一致,作为范围i请求处理,反之返回全体资源。

          If-Unmodified-Since:指定日期之后未更新才能处理请求

          Max-Forwards:通过TRACE或OPTIONS方法,发送包含该字段的请求时,该字段以十进制整数形式指定可经过的

                                    服务器最大数,每经过一个,Max-Forwards -1,为0时不再转发,返回响应

          Proxy-Authorization:类似与服务器之间的认证,这是与代理之间的认证。

          Range:指定获取资源的范围,

          Referer:告知服务器请求的原始资源的URI,一般会发,直接在地址栏写URI的时候也可以不发

          TE:能够处理响应的传输编码方式及相对优先级,类似于Accept-Encoding,但用于传输编码

          User-Agent:传达浏览器种类,也可能添加爬虫作者的电子邮件和代理服务器的名称

响应首部字段:

          Accept-Ranges:bytes代表可处理范围请求,none反之

          Age:告知客户端,源服务器在多久前创建了响应,单位为秒。若为缓存服务器,则是缓存后的

                    响应再次发起认证到认证完成的时间,代理创建响应时必须加上该字段

          ETag:告知客户端实体表示,资源更新,ETag值更新。强ETag值是无论多小改变都会变化,若ETag

                      只有资源发生根本改变才会变,这时,会在值的开始处加W/

          Location:将响应接收方引导至某个与请求URI位置不同的资源,会配合3xx进行重定向

          Proxy-Authenticate:会把代理服务器要求的认证信息发送给客户端

          Retry-After:告知客户端多久后再次发送请求

          Server:服务器上安装的HTTP服务器应用程序的信息

          Vary:当代理服务器接受到带有Vary字段指定获取资源的请求时,如果Accept-Language

                    字段值相同, 那么直接从缓存返回响应,反之则从源服务器获取资源后擦能作为响应返回

          WWW-Authenticate:用于HTTP访问认证,告知客户端认证方案和带参数提示的质询

实体首部字段:

          Allow:通知客户端能够支持Request-URI指定资源的所有HTTP方法。eg:只能用GET方法

          Content-Encoding:服务器对实体的主体部分选用的内容编码方式。内容编码指的是在不丢失实体信息的前提下

                                           所进行的压缩。

          Content-Language:实体主体使用的自然语言(中文或英文等语言)

          Content-Length:实体主体部分的大小。进行内容编码传输是,不能使用该字段

          Content-Location:报文主体返回资源对应的URI。使用场景:返回的页面内容与实际请求对象不同

          Content-MD5:客户端会对接收的报文主体执行相同的MD5算法,然后与该字段值比较

          Content-Range:告知客户端返回的实体的哪个部分符合范围请求,eg:bytes 50001-10000/10000。表示

                                      以字节为单位,当前发送部分及整个实体的大小

          Content-Type:实体主体内对象的媒体类型。

          Expires:将资源失效时期告知客户端。

          Last-Modefied:资源最终修改的时间

其他首部字段

          为Cookie服务的首部字段:

                    Set-Cookie:服务器准备开始管理客户端状态时,会事先告知各种信息。

                   

                    Cookie:告知服务器,客户端想要获得HTTP状态管理支持

          其他常用首部字段:

                    X-Frame-Options:属于响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示问题

                                                  主要是为了防止点击劫持攻击。有两个值DENY(拒绝)和SAMEORIGIN(仅同源域名下)

                    X-XSS-Protection:属于响应首部,针对跨站脚本攻击的一种策略,用于控制浏览器XSS防护开关,值为0/1

                    DNT:属于请求首部,表示拒绝被精准广告追踪的一种方式。值为0/1

                    P3P:属于响应首部,利用P3P(在线隐私偏好平台),可以在Web网站上的个人隐私变成仅供程序理解的

                              形式,以达到保护用户隐私的目的。步骤为创建P3P-->创建P3P隐私对照文件,保存命名在

                              /w3c/p3p.xml-->在P3P隐私种新建Compact policies,输出到HTTP响应种

状态管理:

HTTP是无状态协议,所以引入Cookie技术。Cookie通过在请求和响应报文中写入Cookie信息来控制客户端状态。过程如下:

1.请求无Cookie信息的时候,服务端生成Cookie,放进相应报文的Set-Cookie首部字段信息中

2.客户端保存Cookie,下次再往该服务器发送请求的时候,会自动在请求报文中加入Cookie值后发出去

3.服务端发现又Cookie,对比服务器上的记录,最后得到之前的状态信息

其他:

与HTTP协作的Web服务器

1.一台Web服务器可搭建多个独立域名的Web网站:利用虚拟主机,因为请求的时候,域名通过DNS映射到IP地址,所以请求发送到服务器,是以IP地址形式访问。为了收到请求的时候分清是哪个网站,请求必须在Host首部内完整指定主机名或域名的URI。

2.一台服务器可以作为通信路径上的中转服务器提升效率:

      代理:a.中间人,一种有转发功能的应用程序。

                 b.可以利用缓存减少网络宽带的流量,组织内部针对特定网站的放问控制,以获取访问日志为主要目的等等。

                 c.每次通过代理转发时,需要附加Via首部字段以标记经过的主机信息。

                 d.代理主要根据是否使用缓存和是否会修改报文分类:缓存代理、透明代理

      网关:工作机制和代理相似,但提供非HTTP协议服务。

                 利用网关可以提高通信的安全性。因为可以在客户端与网关之间的通信线路上加密以保证。

                 比如:连数据库,支付网关

      隧道:相隔甚远的客户端和服务器之间的中转,以保持双方通信连接,不会做任何处理。

确保Web安全的HTTPS

1.HTTP的缺点:

      a.通信使用明文,内容可能会被窃听:

            TCP/IP的工作机制决定通信内容在所有的通信线路上都有可能遭遇窥视,即使加密,也能看到加密后的

            目前可以通过

                  <1>通信加密:SSL(安全套接层)或TLS(安全层传输协议)的组合使用来加密HTTP的通信内容,与SSL组合使用

                  的HTTP为HTTPS

                  <2>内容加密:客户端对HTTP报文进行加密处理再发送,但内容仍有被篡改的风险

      b.不验证通信方身份,可能遭遇伪装

            虽然HTTP无法确定通信方,但SSL可以,它还提供了一种被称为证书的手段。证书由第三方机构颁布,用于证明

            服务器和客户端是实际存在的。

      c.无法验证报文的完整性,可能已遭篡改

            请求或响应的传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击

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

      HTTPS不是应用层的一种新协议,至少HTTP通信接口部分用SSL/TLS,即先和SSL通信,再由SSL和TCP通信

      涉及到私钥公钥等证书

      使用HTTPS因为必须SSL通信以及加密等,会大量消耗CPU和内存等资源,一般回避HTTP慢2-100倍。所以一般只有

      关键信息才加密处理,以及证书需要购买

认证

1.BASIC认证:是从HTTP/1.0就定义的认证方式,是Web服务器与通信客户端之间的认证方式。不加密,且一般浏览器无法实现认证注销操作。步骤:

      a.当请求的资源需要BASIC认证是,服务器会随401返回带WWW-Authenticate字段的响应

      b.客户端收到,将ID和密码(两者:连接)组成字符串,Base64编码之后写入Authorization发送请求

          当用户代理为浏览器时,输入ID和密码即可,浏览器会自动完成转换工作

2.DIGEST认证:基于BASIC,a步骤的时候会发送一个质询码(nonce,随机数)。b步骤的时候Authorization必须包含username,realm,nonce,uri和response的字段信息。虽然可以防止密码被窃听,但无法方式用户伪装。

3.SSL认证:双认证:证书+密码或其他

4.基于表单认证

追加协议

SPDY:介于HTTP和SSL中间,是HTTP协议获得以下功能:

      1.多路复用流:单以的TCP连接,可以无限制处理多个HTTP请求

      2.赋予请求优先级

      3.压缩HTTP首部

      4.推送功能:支持服务器主动向客户端推送数据

      5.服务器提示功能:主动提示客户端请求所需的资源

WebSocket:建立在HTTP基础上,连接发起方仍是客户端。但一旦连接,可以任意发报文

      1.推送功能

      2.减少通信量:一直保持连接状态,且WebSocket首部信息很小

Web攻击技术

1.针对Web应用的攻击:

      主动攻击:通过直接访问Web应用,把攻击代码传入,代表有SQL注入攻击和OS命令注入攻击

      被动攻击:诱使用户触发已设置好的陷阱,陷阱会启动发送嵌入攻击代码的HTTP请求,代表有跨站脚本攻击和跨站点

                        请求伪造

2.因输出值转义不完全引发的安全漏洞

3.设置或涉及上的缺陷引发的安全漏洞

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值