应用层的HTTP和HTTPS
HTTP
Web 的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心 。HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,他们运行在不同的端系统中,通过交换HTTP报文进行会话,HTTP定义了这些报文的格式以及客户机和服务器是如何进行报文交换的。HTTP使用TCP作为它的支撑运输层协议,一旦客户机发送了一个请求报文,该报文就“脱离客户机控制”并“进入TCP控制”。
客户机/服务器的交互运行于TCP协议之上时,如果每个请求/响应是经一个单独的TCP连接发送,该应用程序被称为使用非持久连接,如果所有的请求和响应经由相同的TCP连接发送,该应用程序被称为使用持久连接;
(1)非持久连接
每次从服务器发送一个对象到应用程序的时候,断开TCP连接,再次传输的时候再次建立连接。
每次传输的时候可以设置浏览器控制并行度,如果并行度设为1,则为串行。
一个小分组从客户机到服务器再回到客户机所花费的时间称为往返时间RTT,粗略的讲总的响应时间就是两个RTT加上服务器传输HTML文件的时间。
(2)持久连接
必须为每一个请求的对象建立和维护一个全新的连接,并且对每个这样的连接,在客户机和服务器都要分配TCP的缓冲区和变量。
HTTP默认使用了流水线方式的持久连接。
服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息,所以说HTTP是一个无状态协议。但同时也带来了一些不便,比如,用户登录到一家购物网站,即使他跳转到该网站的其他页面,也需要能继续保持登录状态,为了实现期望的保持状态功能,于是就引入了Cookie技术。(Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当客户端下次再往服务器端发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检和比对服务器上的记录,最后得到之前的状态信息。)
Cookie技术:
组成部分:
1.在HTTP响应报文中有一个首部行
2.在HTTP请求报文中有一个cookie首部行
3.在用户端系统中保留有一个cookie文件,由用户的浏览器管理
4.在web站点有一个后端数据库
HTTP报文格式:
1.HTTP请求报文
下面是一个典型的HTTP请求报文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection:close
User-agent:Mozilla/4.0
Accept-language:fr
第一行为请求行,包含方法字段(GET,POST,HEAD,PUT,DELETE),URL字段,HTTP协议版本字段
其余行为手首部行,第二行定义目标所在的主机
第三行定义了是否使用是否使用持久连接,要求发送完对象立即关闭连接
第四行定义了向服务器发送请求的浏览器类型
第五行定义了那种语法版本
方法字段解释:GET从服务器请求资源,HEAD只发送请求但是不会返回请求的对象,DELETE删除,PUT也用于应用程序向服务器上传对象
2.HTTP响应报文
HTTP/1.1 200 OK
Connection:close
Date:Thu,03 Jul 2003 12:00:15 GMT
Server:Apache/1.3.0(Unix)
Last-Modified:Sun,6 May 2007 09:23:24
Content-Length:6821
Content-Type:text/html
(data data data data...........)
第一行为状态行,其余为首部行,然后是实体主体,状态行指示服务器使用的协议是HTTP1.1,服务器状态码为200,状态为OK
第二行为告诉报文发送后关闭了该TCP连接
第三行服务器产生并发送该响应报文的日期和时间,不是对象创建或者最后修改的时间,而是服务器查到这个对象并发送相应报文的时间
第四行为使用的web服务器信息
第五行为对象创建和最后修改的时间
第六行为发送对象的字节数
第七行为指示实体主体的对象是HTML文本
HTTP中GET和POST请求的区别
一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。
HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。
根据HTTP规范,POST可能会修改服务器上的资源的请求。比如****的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。
GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
Web缓存
Web缓存器也叫代理服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝。Web缓存器可以大大减少对客户机请求的响应时间,可以大大减少一个机构内部与因特网接入链路的通信量;
条件GET方法允许缓存器证实它的对象是最新的,方法GET方法有两个组成条件
1.请求报文中使用GET方法;
2.请求报文包含一个If-modified-since:首部行
HTTPS
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
(1)HTTPS的工作原理
客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
客户端的浏览器根据双方同意的安全等级,建立会话**,然后利用网站的公钥将会话**加密,并传送给网站。
Web服务器利用自己的私钥解密出会话**。
Web服务器利用会话**加密与客户端之间的通信。
(2)HTTPS协议的主要作用:
建立一个信息安全通道,来保证数据传输的安全, 确认网站的真实性。
HTTP与HTTPS的区别
1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4. http的连接很简单,是无状态的;HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。