首页 > 代码库 > http协议也是一个面向连接的协议

http协议也是一个面向连接的协议

本文最初发表于chinaunix.net论坛之帖子《[其他] 您了解HTTP么?http://工作中奇葩HTTP问题经验大征集!》之回复。


差点来晚了,本人谈一下HTTP。

先回答这几个问题:
1、你了解 HTTP 吗?
了解。
2、你认为你真的很了解 HTTP 吗?
起码不是新手
3、你知道 HTTP/1.0 和 HTTP/1.1 的区别吗?
http 1.0 和 1.1的最大区别就是HOST头,这个是用来实现虚\拟\主机的,也就是一个IP上,可以有多个网站,如果你的网站只是设置了通过HOST区分不同的虚拟主机,那么客户端通过IP访问是不行的。当然还有其它区别,keepalive等,这个不用多说。
4、你知道各种 HTTP 返回码的实际意义吗?
这个知道一些,只知道几个重要的就行,别的可以遇到时再查,
比如200成功,300跳转,其中301和302代表永久和临时跳转,在SEO方面很重要
5、你知道各种 Request Header 和 Response Header 里多种字段的含义吗?
请求和相应header,基本上就是几行key-value对,服务器和客户端可以认识其中一些, 也可以不认识
6、你又了解 SPDY 吗?
不了解,好像是某公司组织又新搞的玩意,暂时用不着,学习使用技术的目的是为了生存,我反对为了技术而技术。用的着的时候在查资料也不晚。

其实我想说一点的是,我以前搞.net的,但是很多搞.net的人,别看每天都开发asp.net网站,对http协议和web标准根本一知半解,微软从来不注重这个,微软注重的只是通过不停的升级,套牢开发者和小企业赚钱。所以奉劝各位,如果有任何出路,千万别选择微软平台技术。

说到http,我想起一个重要的问题。很多资料,很多书,很多重要的书,甚至有可能你们这次要发的这本书里,都说到http协议是非连接的,也就是不能保持会话,必须通过cookie来认证用户。
其实这是非常错误的,http协议也是一个面向连接的协议,cookie就是实现会话的机制。
很多人忽视了一点,http协议是一个应用层协议,应用层协议的特点是,对底层的传输网络协议不知晓。
大家都想当然的想到tcp/ip协议,socket等,认为这些协议一旦连上,就可以持续的发送接受数据,好像建立了一层持久连接,但是这怎么可能,只不过是底层的网络链路层、会话层等帮你完成了保持会话的功能,网络又不是电话线,不可能一个连接占据整个线路。
HTTP协议是一个应用层协议,也就是说它可以用任何IPC来传递,比如pipe, socket, sharedmemory, 等等,既然http协议不一定通过socket, tcp/ip等传递,那你还有什么资格说http协议是非连接的呢?
从这一点说,http协议不仅仅是面向连接的,我们通常的socket程序,比如QQ、各种聊天程序,C/S等,试用socket来保持会话,也是错误的,因为你怎么知道我客户端和服务器一定会通过socket连连接呢? 难道我不能自己发明一个协议,难道我不能用管道、共享内存来连接?
socket等,实际上也是文件,上层的通信协议,比如QQ的协议,也应该像http协议一样,自己实现一个会话机制,而不能利用下层的socket来实现会话,因为那样,下层协议就不能对上层协议透明了。
所以,本人想说的是,千万不能再说http是非连接的协议了,它就是一个面向连接的协议。