HTTP协议简介
Hyper Text Transter Protocol
什么是超文本(HyperText)?
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML.
什么是URL?
URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档.URL由协议、主机和端口(默认为80)以及文件名三部分构成。
如:
http:/www.qq.com:80/mews/indexhtml
协议//主机供口(80)/文件名及月路答
什么是超文本传输协议HTTP?
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机览器)的应用层协议,以实现超链接的功能。
HTTP工作原理
请求/响应交互模型
在用户点击URL为http://www.qq.com/index.html的链接后,浏览器和Web服务器执行以下动作:
①浏览器分析超链接中的URL
②浏览器向DNS请求解析www.qq.com的IP地址
③DNS将解析出的IP地址222.246.129.80返回浏览器
④浏览器与服务器建立TCP连接(80端口)
⑤浏览器请求文档:GET/index.html
⑥服务器给出响应,将文档index.html发送给浏览器
⑦释放TCP连接
8浏览器显示index.html中的内容
HTTP的连接方式和无状态性客户机
·非持久性连接
即浏览器每请求一个Web文档,就创建一个新的连接,当文档传输完毕后,连接就立刻被释放。
1.HTTP1.0、HTTPO.9采用此连接方式。
2.对于请求的Web页中包含多个其他文档对象(如图像、声音、视频等)的链接的情况,由于请求每个链接对应的文档都要创建新连接,效率低下。
·持久性连接
即在一个连接中,可以进行多次文档的请求和响应。服务器在发送完响应后,并不立即释放连接,浏览器可以使用该连接继续请求其他文档。连接保持的时间可以由双方进行协商。
·无状态性
是指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知道这个客户曾经访问过。HTTP的无状态性简化了服务器的设计,使其更容易支持大量并发的HTTP请求。
访问网站分析
第一步: 浏览器分析超链接中的URL
第二步:DNS请求
PC向DNS服务器222.246.129.80发出DNS QUERY请求,请求www.qq.com的A记录
第四步:www.qq.com 服务器回应HTTP/1.1200OK,返回主页数据包
第五步:完成数据交互过程,四次挥手断开连接
HTTP请求方法
请求报文中的方法
方法(Method)是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:
请求行:
①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。
③是协议名称及版本号。
请求头:
④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
与缓存相关的规则信息,均包含在header中
请求体:
⑤是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
HTTP响应
响应行:
①报文协议及版本;
②状态码及状态描述;
响应头:
③响应报文头,也是由多个属性组成;
响应体:
④响应报文体,即我们真正要的“干货”
详情请查看 :HTML状态码大全
HTTP头部
首部字段或消息头
HTTP重定向
Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。
Referer字段
Referer:浏览器向WEB服务器表明自己是从哪个网页/URL获得/点击当前请求中的网址/URL。
Session
Session是可以存储针对于某一个用户的浏览器以及通过其当前窗口打开的任何窗口具有针对性的用户信息存储机制。
通常大家认为,只要关闭浏览器,session就消失,其实这是错误的理解。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留。由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间.
(1)第一次访问某个web站点资源时,客户端提交没有带SessionlD的请求(请求报文头没有Cookie头域信息)。
而web服务器会检查是否有SessionID过来,没有则创建SessionlD,并根据web程序自身定义在请求哪个资源时添加属于当前会话的信息(也可为空),这个信息列表以SessionID作为标识。然后将SessionlD返回给客户端(通过响应报文头的Set-Cookie头域)。
(2)客户端再次访问同个web站点时,提交带有SessionlD的请求(通过Cookie头域存储SessionlD)。由服务端判断session是否失效,如果未失效,可查询属于当前会话的信息列表。如果失效,则创建新的session(产生新的SessionlD),而原先的session(包含session带的信息列表)则丢失,无法访问。
HTTP协议的优缺点
优点:简单灵活:由于HTTP协议的简单,使得HTTP服务器程序规模小而简单,与其他协议相比时间开销较小,HTTP通信速度快,可以有效的处理大量请求。支持客户/服务器模式:HTTP协议是基于TCP连接的应用层协议是以客户/服务器模式工作。支持元信息:HTTP对所有事物处理都加了首部,主数据前面加了一块信息称为元信息,人们可以利用元信息进行有条件的请求。无连接性:每次TCP连接只处理一个请求,客户得到服务器的应答后立即断开。无状态性:HTTP是无状态协议,是指对于事物没有记忆能力,服务器根据请求发送数据,发送完数据后,不记录任何信息。无状态使的客户与服务器连接通信运行速度快,服务器应答也快。
缺点:HTTP原本定位在规模不是太大的分布式超媒体信息系统上的,它的设计目标很大程度上是出于寻找能解决问题的、简单实用的方案,而非建立一个精致、完美的协议。况且设计者当时也并未考虑到日后WWW会发展得如此庞大以至于国际互联网络日益拥挤。 HTTP0.9、HTTP1.0则是在原有基础上进行一些修补,其基本的无连接性、无状态性都未改变。但是,随着网络应用的发展,以及网络带宽的日益拥挤,HTTP1.0的缺陷也随之体现出来。 HTTP的无状态性使得客户与服务器交互的许多历史数据不能保留,缺少历史状态数据意味着如果后续处理需要前面的信息,则它必须重传,这样可能会导致每次连接传送的数据量增大,从而造成浪费。HTTP1.0也没有完善地考虑多级传送代理、缓存机制。这可以概括为两个方面: HTTP协议对事务处理、网络贸易、网络安全的支持不足;HTTP协议的运作机制加剧网络传输带宽的不足。
HTTP存在的安全问题
由于HTTP传输数据未加密,数据都是以明文传输,所以在 HTTP 协议下,中间者可以随意嗅探用户搜索内容,窃取隐私甚至篡改网页。因此出现很多安全问题,如CSRF(跨站请求伪造)、Http Heads攻击、(跨站脚本攻击)XSS等等。
CSRF常用特征是欺骗用户浏览器发送HTTP请求到目标站点和涉及到的HTTP请求。不同的HTTP请求方法有不同难易程度的CSRF攻击,浏览器处理不同请求方法的方式不同。
HTTP GET方法进行CSRF攻击,一个简单的包含多个参数的超链接,利用image标签自动加载。
HTTP POST方法对CSRF也有不同难易程度的攻击方法,对于简单的将POST数据编码为查询字符串的方式,使用HTML表单进行CSRF攻击。另一种是利用一个简单的HTML表单发送任意内容,使用ENCTYPE属性可以利用text/plain内容属性区分伪造的请求和合法的请求从而进行攻击。
Http Heads攻击是在HTTP协议的信息首部和信息体中间的空行注入字符完成攻击。这种攻击可以发生在登录时。
XSS攻击是攻击者在网页上发布包含攻击性代码的数据。当浏览者看到此网页时,特定的脚本就会以浏览者用户的身份和权限来执行。通过XSS可以比较容易地修改用户数据、窃取用户信息,以及造成其它类型的攻击。
解决问题的方法
防御跨站请求伪造的攻击:验证HTTP Referer字段,在HTTP头中有一个字段叫Referer[见表3.2],它记录了请求中URL的原始获取值即该HTTP请求的来源地址,验证Referer值可以有效的防止攻击。验证请求中的 token等方式。
HTTP协议首部攻击的预防就是过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF。
另一种最安全的方式就是使用HTTPS协议,在HTTP协议上加了SSL协议依靠证书验证服务器的身份,使访问的信息通过加密而转发。这样大大的增加了安全性,与客户信息的完整性。