http总体理解

1 HTTP概述

 Web浏览器,服务器,和相关web程序都是通过HTTP相互通信的,HTTP可以从遍布全世界的web服务器上将各种信息迅速,便捷,准确的搬移到人们桌面上的浏览器。
 在我们日常生活中最常见的上网浏览网页,很多时候输入一个网址进入这个页面,而这个简单的操作,完成客户端与服务器的交互过程就是一个典型的HTTP协议的应用过程。
 HTTP(超文本传输协议)采用可靠的数据传输协议,因此即使数据在地球的另一端,它也能确保数据安全可靠传输。Web服务器使用HTTP协议,也叫做HTTP服务器,存储因特网中的信息,当HTTP客户端发送请求时,会给客户提供数据。
 这里的超文本指的是包含有超链接和多媒体标记的文本,最常见的超文本格式是HTML(超文本标记语言),HTML是为了发送web上的超文本而开发的,几乎所有的web页面都是由HTML而构建的,是一种文档系统,可将文档中任意位置的信息和其他信息(文本或图片等)建立关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。我们把出现的HTML文档内的这些特殊字符串叫做HTML标签。由HTML构成的文档经过浏览器的解析,渲染后,呈现出来的结果就是web页面。上面HTML文档内被<>包围的文字就是标签。在标签的作用下,文档就会改变样式,或插入图片、链接。
 HTTP协议属于TCP/IP协议族内部的一个子集。

1.1与HTTP密不可分的3个协议

 之前提到在建立TCP/IP协议需要知道IP地址,那么我们不可能把IP地址一大串的数据记住,我们更方便的是使用域名,所以,需要负责解析域名的DNS服务,他提供域名到IP地址之间的解析服务。
 TCP协议:处于传输层,提供可靠的字节流服务。指的是为方便传输,将大块数据分割成报文段为单位的数据包进行管理,而可靠的传输指的是能把数据准确传输给对方。
 IP协议:处于网络层,将各种数据包传送给对方。需要IP地址和MAC地址。IP地址指明了节点被分配的地址,MAC地址是指网卡所属的固定地址。Ip地址与MAC地址进行配对。
 IP间的通信依赖于MAC地址。在网络不是在同一局域网的情况下,通信会通过多台计算机和网络设备中转才能连接给对方,中转时会利用下一台中转设备的MAC地址搜索下一个中转目标。这时会用到ARP协议。根据IP地址反查对应的MAC地址。

2 HTTP报文

  用于HTTP协议交互的信息被称为HTTP报文,是发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。客户端的HTTP报文叫做请求报文,服务器端的报文叫做响应报文。请求报文会像web服务器请求一个动作,响应报文会将请求的结果返回给客户端,HTTP报文本身是由多行数据构成的字符串文本。
(1)HTTP报文的结构
(2)URL
(3) Cookie技术
(4)返回结果的HTTP状态码

2.1 HTTP报文结构

在这里插入图片描述
 请求行:包含用于请求的方法,请求URI和HTTP版本。
 状态行:包括表明响应结果的状态码,原因短语和HTTP版本。
 首部字段:包含表示请求和响应的各种条件和属性的各种首部。
 方法是客户端希望服务器对资源执行的动作。GET方法和HEAD方法都被认为是安全的。
 GET方法是最常见的方法,通常用于请求服务器发送某个资源。HTTP/1.1要求实现此方法。
 HEAD 方法与GET方法的行为很类似,但服务器在响应中只返回首部,不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检测。使用HEAD,可以:
(1)在不获取资源的情况下了解资源的情况(比如:判断其类型)
(2)通过查看响应中的状态码,看看某个对象是否存在
(3)通过查看首部,测试资源是否被修改
 PUT方法的语义就是让服务器用请求的主体部分来创建一个所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用这个主题来替代它。
 POST方法用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单上填好的数据会被送给服务器,然后由服务器将其发送给想去的地方。
此外,还有TRACE,OPTIONS,DELETE方法。

2.2 URI(统一资源标识符)

 每个web服务器资源都有一个名字,这样客户端就可以说明他们感兴趣的资源是什么。服务器资源名被统称为统一资源标识符,URI就像因特网上的邮政网址一样,在全世界范围内唯一标识并定为信息资源。
 相比URI,我们更熟悉URL(统一资源定位符),URL就是使用web浏览器等访问web页面时需要输入的网址。
URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见,URL是URI的子集,还包括URN。
 URN(统一资源名):URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。URN目前仍处于试验阶段,还未大范围使用。为了更有效的工作,URN需要一个支撑架构来解析资源的位置。
 目前主要应用的是URL,URL是人们对HTTP和其他协议的常用访问点:一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报文来获取人们所期望的报文。
在这里插入图片描述
如果想获取一个网址(URL),会把URL分成以下三个部分。
(1)URL的第一部分是URL方案。方案可以告诉web客户端怎样访问资源。在这个例子中,使用的是HTTP协议。(当然也可以采用其他协议,比如更安全的HTTPS)
(2)URL的第二部分指的是服务器的位置。这部分告知web客户端资源位于何处。
(3)URL的第三部分是资源路径。路径说明了请求的是服务器上的那个特定的本地资源。
 URL提供了一种统一的资源命名方式。大多数URL都具有相同的格式:方案://“服务器位置/路径”结构。因此,对网络上的每个资源以及获取这些资源的每种方式来说,命名资源的方法都只有一种,这样不管是谁都可以用名字来找到这个资源。
 URL方案:实际上是规定如何访问指定资源的标识符,它会告诉负责解析URL的应用程序应该使用什么协议。方案组件必须以一个字母开始,有第一个”:”符号与URL其他部分分隔。方案名与大小写无关。
 主机与端口:要想在因特网上找到资源,应用程序要知道是哪台机器装载了资源,以及在哪台机器上的什么地方可以找到能找到目标资源进行访问的服务器。 URL的主机与端口提供这两组信息。主机组件标识了因特网上能够访问资源的宿主机器。可以用主机名或IP地址表示主机名。可以指向同一主机.

2.3 Cookie技术

 HTTP是不保存状态的协议,即无状态协议。HTTP协议本身不对请求和响应之间的通信状态进行保存。使用HTTP协议,每当有新的请求发送时,就会有对应新响应产生。协议本身并不保存之前一切的请求或响应报文的信息。这是为了更快的处理大量事务,确保协议的可伸展性。可是,随着web的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录淘宝,即使他跳转到其它网页,也需要继续保存登录状态。针对这个实例,网站为了掌握谁发的请求,需要保存用户的状态。
 HTTP/1.1虽然是无状态的协议,但为了实现期望的保存状态功能,引入了Cookie技术,而有了cookie技术,就可以管理状态了。
 Cookie是识别当前用户,实现持久会话的最好方式。最初由网景公司开发的,现在所有主要的浏览器都支持它。Cookie就像服务器给用户贴的“嗨,我叫”的贴纸一样,这个web站点就可以读取那个服务器贴在用户身上的所有贴纸。
 Cookie技术通过在请求和响应报文中写入cookie信息来控制客户端信息。Cookie会根据从服务器端发送的报文响应内的一个叫做Set-Cookie的首部字段信息,通知客户端保存cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入cookie值后发送过去。
 服务器在发现客户端发送过来的cookie后,会去检查究竟从哪个客户端发送的请求,然后对比服务器上的记录,最后得到之前的状态。

2.4 状态码

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

3 HTTP的安全

  在人们利用HTTP在web上处理一些重要事情的时候,比如银行业务,就需要强有力的安全机制。而HTTP在给我们带来便捷的时候,本身也具有很多不足。
比如:
 通信使用明文(不加密),内容可能被监听
 不验证通信方的身份,因此有可能遭遇伪装
 无法证明报文的完整性,所以有可能已遭篡改
 由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即HTTP报文使用明文方式发送。
 所以存在以下隐患:
 无法确认请求发送至目标的web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的web服务器。
 无法确定响应返回到客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
 无法确认正在通信的对方是否具备访问权限。因为某些web服务器上保存着重要的信息,只想发给特定用户通信的权限。
 无法判断请求是来自何方、出自谁手。
即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(拒绝服务攻击)

3.1 HTTPS

 为了有效防止这些弊端,有必要使用HTTPS(HTTP+加密+认证+完整性保护=HTTPS。
 我们浏览器上登陆页面和购物结算界面等会发现基本上都是使用HTTPS通信。即是https://,而不是http://,另外,当浏览器访问HTTPS通信有效的web网站时,浏览器的地址栏会出现一个带锁的标记。对 HTTPS的显示随浏览器的不同而有所改变。
 HTTPS是身披SSL(安全套接层)外壳的HTTP。
 HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议代替而已。
 通常,HTTP直接与TCP通信,当使用SSL时,则演变为先和SSL通信,再有SSL直接与TCP通信,采用SSL后,HTTP就具有加密,证书和完整性保护的特点。

4 基于HTTP的功能追加协议

4.1 HTTP瓶颈

  虽然HTTP协议既简单又简捷。在建立HTTP标准规范时,制定者主要想把HTTP当作传输HTML文档的协议,但随着时代的发展,其功能使用上捉襟见肘的疲态已经凸显,web的用途更具多样性,比如演化为在线购物网站,QQ等,而这些网站所追求的功能可通过web应用和脚本程序实现。即使这些功能已经满足要求,在性能上却未必最优,这是因为HTTP协议的限制以及自身性能的限制。

4.1 消除HTTP瓶颈的技术

  HTTP功能上的不足通过创建一套全新的协议来弥补。可是目前基于HTTP的web浏览器的使用环境已遍布全球,因此无法完全抛弃HTTP。有一些新协议的规则是基于HTTP的,并在此基础上添加了新的功能。
  SPDY和仍在开发中的 WebSocket 技术通信可以提升 Web 的浏览速度。 SPDY在 TCP/IP 的应用层与运输层之间新加会话层。WebSocket 技术主要是在 HTTP 连接建立之后,需要完成一次“握 手” 的步骤,实现 WebSocket (全双工)通信,成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数据 帧,而采用 WebSocket 独立的数据帧。
  HTTP/2.0在2014年11月实现标准化,目标是改善用户在使用web时的速度体验。但目前主流的HTTP版本仍然是HTTP/1.1,自1999年发布后在未对其改定,而SPDY等技术的出现,很难断言HTTP/1.1还适合当下的web协议。

5 参考目录

图解HTTP
HTTP权威指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值