一、网络应用程序体系结构、
1、 客户机/服务器体系结构
2、 P2P体系结构:其实在这种体系结构中也有客户机和服务器,只是每个主机既充当了客户机,又充当了服务器的角色。
发起主动连接的是客户机,被动连接的是服务器。
二、套接字
进程是通过称为套接字的软件接口在网络上发送和接受数据。打个比方:进程是一座房子,而套接字就是门。当一个进程向另一个进程发送数据时,它把报文推出门(套接字)。该发送进程认为门到另一侧的门之间有传输的基础设施。进程并不需要关心传输的具体细节,他只需要将数据推出门即可。
套接字是同一台主机内应用层与运输层之间的接口。开发者可以控制套接字在应用程序端的所有东西,但对套接字在运输层端却没有控制能力。但是应用程序可以对也仅限于对运输层的操作有:选择运输层协议,设定运输层参数:最大缓存,最大报文长度。
三、HTTP概况
1、 HTTP是一个无状态协议,即服务器向客户机发送被请求的文件时,并不存储客户机的状态信息。即一个客户机在短短几秒钟时间内多次发送同一个连接请求,服务器会多次发送同一个文件给客户机。
2、 HTTP默认为持久链接。其采用TCP为其服务。
非持久连接:每请求一个连接,服务器响应后,双方便关掉TCP连接。如果再次请求的话,则需要再次进行TCP链接,发生3次握手。
持久连接:请求一个连接后,双方便建立TCP链接,本次请求结束后,并不立即关闭TCP连接,只有当一定的时间到达后,才会关闭。这种方法节省了握手的所耗的时间。
四、报文格式
1、请求报文
//请求行,3个字段:方法(get,post,head,put,delete),URL,HTTP版本
<request line>
<headers> //首部行
<blank line> //附加的回车换行
[<entity-body>] //实体主体
1) get方式:
将参数放在了请求行中的URL中,所以我们平时在浏览器中的地址栏能看见,没有实体主体部分。
2) post方式:
将参数放在实体主体部分。
两者用途的区别:
3、 应答报文
五、用户与服务器的交互:cookie
因为HTTP协议是“无状态”的,即不保存客户机的信息。但是这样会影响到两者的交互,例如网上商城购物,选购了某产品后进行付款时,跳到另一个页面后重新发送HTTP请求,那么服务器就不知道客户机买了什么商品,所以需要一种机制来记录客户的信息,这种机制就称为cookie。
使用方式:当一个客户机向服务器发送HTTP请求时,服务器会生成一个识别码,将其放在数据库里,在给客户机的响应报文中也添加了该识别码,Set-cookie:xxxx;客户机收到此响应报文后,生成一个cookie文件,并在其中添加一行:服务器名:识别码。当这个客户机再次向该服务器发送HTTP请求的时候,会根据cookie文件在请求报文中添加Cookie:xxxx,服务器就可以根据此来识别客户端了。
Cookie另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登陆时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
六、web缓存
web缓存器也叫代理服务器。一般部署在一个机构内部,这样可以加快网络访问的速度。
因为机构内部之间的网速很快,而到外部的网速很慢。我们采用一个缓存器来保持客户机的近期请求的内容,如果有客户机再次请求此内容是,web缓冲器就直接将内容发给客户机。
过程:在一个机构内部,每台客户机先设定web缓存器,每次请求外网的web页面时,都要通过代理服务器。当一个客户机请求的内容没有在web缓存器时。web缓存器便向外网转发该请求,外网给web缓存器响应请求后,web缓存器在将该响应请求转发给客户机的同时,会在缓存器上保留响应报文的一个副本,便于下次有客户机再次请求此资源。
在响应报文的首部行中有一字段last-modified,保存着资源的修改时间。如果客户机下次请求同样的内容,缓存器仅仅是将副本再次传送给客户机,这样便会造成数据的不一致,因为这段时间以来,外网中的内容可能已经发生了改变。所以当客户机向web缓存器请求的时候,缓存器必然会向外网再次发送请求报文,不过如果在缓存中已有副本,则根据last-modified来设置请求报文 if-modified-since字段。外网中的服务器收到请求报文后,根据 if-modified-since来判断是否要向web缓存器再次发送请求内容。web缓存器根据情况向客户机转发新的或自己已有的副本。通过这种方式,就节约了网络带宽,提高了访问的速度。
判断规则:last-modified:2011年9月14日11:04:57是外网服务器中资源的修改时间。 if-modified-since:2011年9月14日11:04:57 是表示请求2011年9月14日11:04:57以来修改的内容,如果该资源在这段时间来没有被修改,则不传送请求资源。
【参考】
1. http://blog.csdn.net/gideal_wang/article/details/4316691HTTP POST GET 本质区别详解
2. http://www.cnblogs.com/wxf0701/archive/2008/08/17/1269798.htmlHttp之Get/Post请求区别