HTTP图解
最近读了一本有关HTTP协议的书,是专门针对web开发人员所写的一本书
读了这本书首先感觉学到了不少东西,讲的东西也通俗易懂,当然有些还是读不懂,但可以确定的是,在这本书中我找到了以前学习过程中所遇到的困惑在这里解决了一些,尤其是有关后台开发的那些,废话就不说了,总结一下我对这本书的理解
了解web及网络基础
我们是如何访问一个网页的,地址栏输一些东西,回车就访问到了一个页面,其实在这个过程中正式由于HTTP协议的存在,客户端发送请求,服务器接受请求并响应,而这之中的HTTP是一个比较多的东西,要从他的诞生说起。
为了共享知识,HTTP才诞生了,正是有了HTTP这个东西,我们才能夸空间的获取资源。
web是什么?web是建立在HTTP通信上的,它使用了一中的名为HTTP的传输协议,web是不断成长的,这就涉及到了很久前的浏览器大战,也正是因为这些,web才越来越强。
同事HTTP也是在不断发展,从HTTP1.0到HTTP1.1,再到HTTP2.0,全球基本都在使用这个协议,所以这个不能出错。
HTTP是TCP/IP的一个子集,而TCP/IP又有分层管理,自上到下依次是应用层,传输层,网络层,链路层,服务器与客户端都是遵循这个的,与HTTP相关的协议还有:负责传输的IP协议位于网络层,确保可靠的TCp协议位于传输层,最后还有负责域名解析的DNS服务,他和HTTP协议一样位于应用层,用于解析域名成为IP地址
HTTP协议与以上介绍的各种协议才大致构成了简单的一个客户发请求,服务器收到并响应的大致结构。
有关资源的定位要用到URL与URI,通过特定的格式完成对资源的定位
HTTP协议标准的文档被称为RFC,但并不是所有的应用程序都符合RFC,出去部分例外,大部分还是遵守这个的
简单的HTTP协议
HTTP协议就是为了完成通信,通过请求与响应,请求报文中包含大量信息,由方法,URI,协议版本,请求首部字段和内容实体构成,这些主要是在后边的章节讲解
HTTP是不保存状态的协议,也就是说HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理,协议本身并不保持之前一切的请求或响应报文的信息。于是引入了cookie,后面会讲。
HTTP协议使用URI定位互联网上的资源,正因为URI的特定功能,在互联网上任意资源都可以访问到。
告知服务器意图的HTTP方法有:get获取资源,post传输实体主体,put传输文件,head获得报文首部,delete删除文件,options询问支持的方法,connect要求隧道协议连接代理,使用这些方法可以下达命令。
当文件中包含大量图片,需要保持持久连接以节省通讯量,管线化也使持久连接成为可能,并且管线化比持久连接还要快,文件数量越多,时间差也就越明显。
使用cookie的状态管理,解决了无状态协议,cookie是一种技术该技术在请求与响应中报文中写入cookie信息来控制客户端的状态简单步骤大致为:请求报文(无cookie信息)->响应报文(服务端生成cookie信息) ->响应报文(自动发送保存的cookie信息)。
HTTP报文内的HTTP信息
用于HTTP协议交互的信息成为HTTP报文,请求(响应)报文首部的结构为:请求行,请求(响应)首部字段,通用首部字段实体首部字段,其他,也可以说为:请求行状态行,首部字段。
编码可以提升传输效率,通常报文主体和实体主体相等,只有当传输中进行编码操作是才会使实体首部产生变化从而产生差异,压缩传输的内容编码和分割发送的分块传输编码。
发送多种数据的多部分对象集合,获取部分内容的范围请求,,内容协商返回最合适的内容
返回状态结果的HTTP状态码
以2开头成功
以3开头重定向
以4开头客户端错误
以5开头服务器错误
另外不少返回的状态码都是错误的,只是用户察觉不到例如web应用程序内部发生错误,状态码依然为200ok
与HTTP协作的web服务器
用单台虚拟主机实现多个域名,一台服务器搭建多个web站点,通讯数据转发程序:代理,网关,隧道。
代理服务器的基本行为就是接受客户端发送的请求后转发给其他服务器。分缓存代理和透明代理。
网关和代理的工作机制十分相似,而网关能使通信线路上的服务器提供非HTTP协议。
隧道可以按要求建立起一条与其他的服务器的通信线路,当使用SSL时,隧道根据需要与其他服务器建立通信线路—与其他加密方式通信。通道的设置是为了确保客户机可以安全地与服务器通信
保存资源的缓存用的是缓存服务器,是代理服务器的一种,缓存的有效期限,客户端的缓存
HTTP协议出现之前也有许多协议但基本上不怎么用了
HTTP首部
HTTP报文首部
HTTP请求报文
HTTP响应报文
HTTP首部字段
HTTP首部字段传递重要信息
状态行
响应字段
通用字段
主段字段
HTTP首部字段结构
四种HTTP首部字段类型
请求
响应
通用
主体
HTTP首部字段一览(47中字段)
非HTTP1.1字段(47种意外)
E nd-to-end首部和Hop-by-hop首部
端到端首部
必须保存在由缓存生成的响应中,另外规定他必须被转发
逐跳首部
只对单词转发有效,汇银缓存或代理而不在转发
HTTP/1.1通用首部字段
Cache-Control:操作缓存的工作机制(后面为一系列参数)
指令表
缓存响应指令
缓存请求指令
表示是否能缓存的指令
控制及可执行的对象的指令
指定缓存期限和认证的指令
Cache-Control扩展
connection
控制不在转发给代理的首部字段(即hop-by-hop)
管理持久连接
默认都是持久连接
close关闭
data
创建日期和时间
pragma
Trailer
Transfer-Encodeing
Upgrade
Via
Waring
请求首部字段
讲了19个
响应首部字段
讲了9个
实体首部字段
讲了10个
为cookie服务的首部字段
cookie
set-Cookie
其他首部字段
可自行扩展(非标准)
常用四个
X-Fram-Options
X-XSS-Protection
DNT
P3P
确保web安全的HTTPS
HTTP的缺点:
通讯明文可能会被窃听,所以有了加密处理防止被窃听(SSL),内容加密和通信加密,SSL与HTTP的组合叫作HTTPS,
不验证通信方的身份就很可能遭遇伪装,这样一来任意人都可以发送请求,可以通过查明对手的证书来验证身份,证书由第三方发布
无法证明报文完整性,可能已遭篡改,接受到的内容可能有误,如何防止篡改呢?散敛值校验法以及确认文件的电子签名方法
HTTP+加密+认证+完整性保护=HTTPS
HTTPS是身披SSL外壳的HTTP
相互的公开密钥的公开加密技术,对称加密(共享秘钥加密)和非对称加密(公开秘钥加密),SSL用的就是非对称加密,即一把公钥一把私钥,公钥可以随便发布,私钥一定不能泄露。对称加密即一把钥匙
HTTPS通常使用混合加密机制,虽然公开加密更安全但处理速度较慢,而共享加密则不是这样,所以充分利用两者的各自优势,交换秘钥环节使用公开密钥,通信是采用共享秘钥。
证明公开秘钥的正确性的证书,依赖于第三方机构,还有可证明组织性真实性的EV SSL证书,其证书是基于国际标准的认证颁发的,严格规定了对运营组织的是否真实的确认方针。
用于确认客户端的客户端证书,认证机构信誉第一,由自认证机构颁发的证书称为自签名证书,中级认证机构的证书可能变成自认证证书
HTTPS的安全通讯机制,即通讯步骤,略
HTTPS使用SSL和TLS这两个协议SSL的慢分两种:通信慢和由于消耗大量CPU和资源而变慢,和使用HTTP相比,会慢2到100倍,另一点是SSL要进行加密处理,更加消耗服务器和客户端的硬件资源,针对这一问题并没有根本性的解决方案,故非敏感信息使用HTTP,敏感信息使用HTTPS。
确认访问用户身份的认证(认证机制)
BASIC认证,DIGEST认证,SSl客户端认证,基于表单认证(session管理和cookie管理),
基于HTTP功能追加协议
HTTP本身存在诸多不足,功能上的不足可通过创建一套全新的协议来弥补:
消除HTTP瓶颈的SPDY,瓶颈:实时的显示更新的内容,解决办法:ajax解决法comet解决法。
有一个SPDY可以有效地消除HTTP瓶颈,但很多网站的问题并非有HTTP瓶颈所致,所以对提升性能,还应从其他可细研的地方入手。
使用浏览器进行全双工通讯的WbSockt,虽然ajax和comet可以提升web的浏览速度,但问题若在于通信使用HTTP,就无法彻底解决瓶颈,websocket的特点:
推送功能,减少通讯量,握手请求,握手响应,JavaScript还可调用websocket的API
期盼已久的HTTP2.0,这个还不是很懂,但至少现在中国还不会使用HTTP2.0
web服务器管理文件的webDAV,可创建,删除管理,加锁,对内容修改的版本控制等功能。可拓展的HTTP1.1的webDAV,webDAV内新增的方法和状态码。
构建web内容技术
HTML,CSS,动态HTML,DOM
web应用:与web服务器及程序协作的CGI(CGI是指web服务器在接收到客户端发送过来的请求后转发给程序的一组机制),因java而普及的servlet(servlet是一种能在服务器上创建动态内容的程序),servlet使用java语言实现的一个接口,属于面向企业级java的一部分。
数据可发布的格式和语言:可拓展标记语言XML,发布更新信息的RSS/Atom,两者都用到了XML,JavaScript衍生的轻量级易用JSON
web的攻击技术
HTTP不具备必要的安全功能,在客户端可篡改请求,针对web应用的攻击模式有主动攻击和被动攻击,以服务器为攻击目标有主动与被动,,利用用户身份攻击企业内部网络,
因输出值转义不完全引发的漏洞:跨脚本攻击(动态生成HTML出发生),对用户的cookie窃取攻击,SQL注入攻击(数据库管理系统),OS命令注入攻击(通过web命令执行非法的操作系统命令达到攻击的目的),HTTP首部注入攻击(属于被动攻击),邮箱首部注入攻击,目录遍历攻击,远程文件包含漏洞
因设置或设计上的缺陷引发的安全漏洞:强制浏览,不正确的错误消息处理,开放重定向。
因会话管理疏忽引发的安全漏洞:绘画劫持,会话固定攻击,跨站点请求伪造。
其他安全漏洞:密码破解(穷举法,字典法,彩虹表,拿到秘钥,加密算法漏洞),点击劫持(界面伪装),DoS攻击(让运行中的服务停止状态的攻击),后门程序(开发人员设置的隐藏入口。)
赞(´∀`*)
支持markdown?
好像是耶