HTTP协议

HTTP协议介绍

HTTP协议,即超文本传输协议,是一组规范,用来规范Web的请求,发送和获取,Web是建立在HTTP协议上的通信。

对于网络的体系结构,主要有国际标准化的OSI和TCP/IP协议簇,而现在被广泛使用的是TCP/IP协议,TCP/IP协议分析4层,即应用层,传输层,网络层,链路层。在应用层支持的协议有:FTP,ARP,HTTP等。传输层的协议有TCP,UDP,网络层的协议有IP,对于信息在不同的节点上传输,为了高效且方便,则大家都统一遵守TCP/IP协议,数据的传输是从发起请求的应用层-传输层-网络层-链路层,到接收数据的链路层-网络层-传输层-应用层。因此可知,HTTP协议是建立在TCP协议之上,当使用HTTP协议进行请求时,都会先建立TCP连接,进行三次握手,之所以使用TCP,是因为TCP是一个安全,可靠的传输层协议,它可以保证数据完整的传输到接收方。

HTTP协议是一个无状态协议,即不会保存每次请求和响应之间的通信状态,每次请求都是一个新的请求,都需要建立一个新的连接(后期有所改进),这样做是为了可以快速处理大量的事务。当然因为后期的需求,需要保存连接之间的信息,引入了Cookie技术。

HTTP方法

⑴GET方法,用于获取URI指定的资源,即经过服务器解析后返回的资源。

⑵POST方法,用来传输实体的主体,GET和POST的功能相似,但POST的主要目的并不是获取响应的主体内容。

⑶PUT方法,用来传输文件,需要在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置,但是由于HTTP/1.1 PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,所以一般在网站不适用该方法; 

⑷HEAD方法:用于获取URI指定的资源,和GET方法相似,只不过不返回报文主体部分;

⑸DELETE方法:用于删除文件,按请求的URI删除指定的资源;

⑹OPTIONS方法:用来查询针对请求URI指定的资源支持的方法;

⑺TRACE方法:用来确认连接过程中发生的一系列操作,即让Web服务器将之前的请求通信返回给客户端的方法;

⑻CONNECT方法:用来在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL和TLS协议。

HTTP协议变动

在HTTP协议的初始版本中,没进行一次HTTP通信都要断开TCP连接,当请求的资源中含有多个资源时,则需要建立多个TCP连接,会增加服务器的负担,因此,在HTTP/1.1和部分HTTP/1.0中,想出了持久连接(HTTP keep-alive),即不会在每次请求相应后立即断开TCP连接,而是存在一段时间,HTTP/1.1中所有的连接默认是持久连接,在HTTP/1.0中并没有标准化。

持久连接使得多数请求以管线化方法发送,即可以并行发送多个请求,而不需要一个接一个地等待相应。

Cookie

因为HTTP协议是无状态的协议,它不会去保存请求和响应之间的信息,如有需要记录客户端的信息,则没有办吧,因此引入Cookie。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。当第一次发送请求给服务器的时候,是没有Cookie信息的,服务器端发送的响应报文内有一个Set-Cookie的首字段信息,会通知客户端保存Cookie,在下次客户端访问服务器的时候,客户端会自动在请求报文中加入Cookie值发送出去,服务器端然后发现Cookie,和服务器上的记录进行对比,最后得到之前的状态信息。注意Cookie信息保存在客户端,可以通过浏览器设置来进行清除。

HTTP报文

HTTP报文根据请求和发送分为,请求报文和响应报文。报文的构成有报文首部和报文主体,通常,不一定有报文主体。报文首部包括请求行/状态行,首部字段。HTTP有内部编码功能,即对实体内容进行编码,并保持实体信息原样压缩,可以保证高效的传输,同时客户端对内容实体进行解码。

HTTP报文中可以包含多个对象,发送的报文主体内可含有多类型实体,eg:multipart/form-data,multipart/byteranges。注意在报文中使用多部分对象集合时,需要再首部字段里加上Content-type。

HTTP状态码

状态码是客户端发送请求给服务器时,服务器处理请求的结果的描述。常见状态码:

200:表示客户端发送的请求被服务器端正常的处理了;

204:表示客户端发送的请求已经被服务器端成功处理,但在返回的响应报文中不含实体的主体部分;

206:表示客户端发送了范围请求,服务器已经成功的执行了这部分请求;

301:永久性重定向,表示请求的资源已经被分配了新的URI;

302:临时性重定向,表示请求的资源已经被分配了新的URI,和301的区别是,这个变更是临时的,有可能还会发生变化;

303:表示客户端请求的资源存在着另一个URI,应使用GET方法定向获取请求的资源;

304:表示客户端发送请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况下;

400:表示客户端发送的请求报文中存在语法错误;

401:表示客户端发送的请求需有通过HTTP认证的认证信息,当浏览器初次接受到该状态码,会弹出认证用的对话窗口;

403:表示客户端发送的请求被服务器拒绝了,服务器端不一定给出拒绝的详细理由,可以通过在实体的主体部分对原因进行描述,这样客户端就可以看到;

404:表示客户端的发送的请求资源不存在;

500:表示服务器端处理发送的请求时出错;

503:表示服务器暂时处于超负荷或者正在停机维护中,现在无法处理请求;

安全的HTTPS

为什么引入HTTPS,主要是HTTP协议使用时存在隐患,虽然HTTP协议是建立在TCP协议上,TCP协议是一个安全可靠的协议,它的安全可靠是连接的建立,以及保证数据流安全可靠的传输到接收方,并可以进行差错检验和流量控制等,并不会保证数据不会被窥视。HTTP协议有以下几个缺点:

⑴HTTP协议本身不具备加密功能,即不能对通信整体进行加密,所以HTTP使用明文的方式进行发送。

⑵HTTP协议不验证通信方的身份,因此有可能被第三方冒充。

⑶无法证明报文的完整性,报文有可能被篡改。

针对第一种情况:可以进行加密处理,有两种方式:

一种是对通信加密,HTTP协议没有加密机制,但可以通过和SSL(安全套接层)或TLS(安全传输层协议)的组合使用,加密HTTP的通信内容,用SSL建立的安全通信后,就可以在这条线路上进行HTTP通信了;

第二种是对通信内容的加密,即对通信的报文进行加密,但是仍然有可能被篡改。

针对第二种情况:可以使用证书处理:

因为HTTP协议,不存在对方身份的确认步骤,因此,对于任何一个请求,服务器都会进行响应,因此会存在很多不安全的操作,例如冒名服务器给客户端发送信息。SSL不仅提供加密处理,还提供证书,可用于确认通信双方。证书是由值得信赖的第三方机构颁发的,用来证明通信双方式实际存在的,其次由于证书的伪造是异常困难。因此只要持有证书,就可以确定双方的身份。

针对第三种情况:即无法保证信息的准确性,可以使用特定的算法

因为HTTP协议无法保证信息报文的完整性,因此传输的内容有可能被第三方篡改,即在传输的过程中,遭攻击者拦击并篡改内容的攻击称为中间人攻击,可以使用MD5,SHA-1等算法对传输内容进行检验,但是有可能md5也被修改,因此并会不会保证百分之百的安全。

因此HTTPS是在SSL协议外壳的HTTP,HTTPS并非一个新的协议,而是用SSL和TLS协议替代而已。因此使用HTTPS时,会先和SSL通信,SSL和TCP通信。HTTPS采用对称加密和费对称加密的混合加密机制。HTTPS的缺点也有,即使用SSL时,会影响速度,其次SSL会消耗更多CPU以及内存的资源,正因为如此,因此有些Web网站一直使用HTTP协议。

 

 

内容参考《图解HTTP》  如有问题,敬请指出,谢谢。