LeavingMe.net

有意思的题目2

2011-02-24 17:01:00

HTTP状态码

http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

CDN

http://zh.wikipedia.org/wiki/CDN

内容分发网络是一种透过互联网互相连接的电脑网络系统,提供高效能、可扩展性、及低成本的网络将内容传递给使用者。

TCP协议是面向连接的,而HTTP是无状态的,面向连接和无状态怎么感觉好像有点矛盾呢?

不矛盾,一个是面向链接的,一个是无连接的。面向链接的可靠些,无连接的就不那么可靠。主要是因为这两个协议所处的层不一样。互联网的设计者认为,用户层应是简单的,直接的。所以无连接的设计能够简化设备的成本,利于互联网的开放式发展。网络的各个接入点和SP他们因为要处理来自用户的数据,所以将复杂的设备和可靠的协议放在这里。也是合乎情理的。

你玩网络游戏连接时一直存在的,下线了就马上断开了。 但http因为最开始设计的时候,为了读网页用,网页取到了你可能花个10分钟来读它,所以这10分钟连接是没有必要的,所以马上就断开了(节省服务器端资源)。所以用户是否还在浏览它的网页服务端不知道,因此就出现了cookie,session这类东西来弥补 为什么不用udp,首先用udp是为了提高效率,但是tcp已经很高效了,没必要用udp,而且udp容易出错(比方说你下载一个驱动,但是如果数据是坏的有可能损坏你的系统)

TCP的面向连接是传输层的,而HTTP的无状态则是应用层的 传统TCP应用主要面向专用系统,这种环境中客户端的数目是有限的,意味者服务器最多开几十个服务进程修行了,而客户端与服务器需要连续地交换数据,频繁地连接和断开对两端都难以接受 HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,如果按照上面的方式则需要在服务器端开的进程和句柄数目都是不可接受的,象paranoid945所说的,大部分通道实际上会很空闲、无端占用资源。因此HTTP的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。 UDP尽管不象TCP那样占用资源,但它不保证数据的完整性、有序性,想像如果服务器返回的HTML错序了或者丢失一部分你将看到什么效果;并且UDP没有流量控制,而互联网的传输质量又不是很好,服务器随便仍出一大堆UDP包可能导致网络风暴,这是相当危险的。

Session 和 Cookie

http://zh.wikipedia.org/wiki/Cookie

Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,我们会在下面的实验中见到它的实际样子。

这个唯一的SessionID是有很大的实际意义的。当一个用户提交了表单时,浏览器会将用户的SessionID自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionID所对应的用户。试想,如果没有SessionID,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。当然,SessionID还有很多其他的作用,我们会在后面提及到。

comments powered by Disqus