Friday, April 27, 2007

著名黑客组织

先介绍零三年之前的组织。
  安全焦点
  http://www.xfocus.net/
  1999年8月26日由 xundi创立,创始人还有quack和casper。后来stardust,isno,glacier,alert7,benjurry, blackhole,eyas,flashsky,funnywei,refdom,tombkeeper,watercloud,wollf等人也加入了近来。站点主页风格一向是很简单。而该组织目前已经成为国内最权威的信息安全站点,也是最接近世界的一个国内组织。
  目前国内一些技术性比较强的文章都由作者亲自提交到该网站,而国内一些知名的技术属一属二的高手都会去这里的论坛。讨论技术的氛围还可以。而且一些网络安全公司也关注这里的论坛。现在流行的著名扫描工具x-scan的作者就是该组织的成员。
  从2002年开始,每年都举办一次信息安全峰会,吸引了国内外众多知名网络安全专家关注参加。会议涉及众多领域,备受关注。创造了良好的学术交流氛围。在此祝愿这个组织越走越好。
  
  中国红客联盟(以解散)
  http://www.cnhonker.com/
  借这个机会要说明一下,只有这个红客联盟才配的上是真正的红客联盟,并不是因为他申请了什么专利,而是在大家的眼中,只有他才只真正的红客联盟。
  这个组织是由lion在2000年12月组建的。曾再2001年带领众多会员参与中美黑客大战,而名震“江湖”。不过这个时代早已逝去,激情的往事也跟着逝去,留给人们的只有回忆。在2005年的最后一天,lion在主页上宣布正式解散。或许很多人难以理解吧。不过这也自有人家的道理。现在外面有N个红盟,我不屑于去关注他们。在此祝福lion,bkbll等人。对sharpwinner我就懒的说什么了。
  
  中国鹰派
  http://www.chinawill.com/
  与红客联盟一样,都是2000年末创立,并且在2001年参与了中美黑客大战。站长万涛也是早期的绿色兵团成员。并且也参与了在2000年前的几次网络战争。至尽这个组织依然没有倒下。近几年中并没有什么大的事件发生。所以很多人对他都已经没有了什么印象。希望他们越走越好。
  
  邪恶八进制
  http://www.eviloctal.com/
  2002年由冰血封情创立,当时是以小组模式运营的,而发展到现在已经成为一个30多人的信息安全团队。主页做的很简单,但论坛内容非常丰富,涉及领域众多,在下经常去那里下载学术资料,论坛管理的是我所见过的论坛中最好的。而且讨论氛围也很不错。鄙人与那里的几个核心成员有所接触,都是比较热心的,而且技术都是比较强的。祝愿这个组织越办越好。我对这个团队的发展充满期望。
  
  幻影旅团
  http://www.ph4nt0m.org/
  2001年创立,发展到现在组织成员已经达到20人,近期组织推出了WIKI平台(http://www.secwiki.com),内容涉及无线网络,病毒与反病毒,以及黑客技术等众多领域。所有的朋友都可以到那里去涂鸦。2002年开放了论坛,目前论坛的技术讨论氛围还是可以的,而且热心人也是很多的。相信这个组织也能走下去。
  
  白细胞(whitecell)
  http://www.whitecell.org/
  2001年创立的一个纯技术交流站点。当时核心成员有sinister,无花果等人,都是国内著名的高手。在2002年后就关闭了,而最近它由回来了。主页与论坛依然都很简单。希望这次回归会带给大家新的气象。
  
  中华安全网
  http://www.safechina.net/
  2001年4月创立,经过了几次改版后,队伍也发展的比较大,我所熟悉的有yellow,Phoenix等人。到现在,这个网站还在改版中,不过论坛依然开放,在这里还是有讨论空间的。组织内的人技术也都是不错的。希望这次改版后会有大的变化:)。
  
  第八军团
  2000年左右由陈三公子组织成立,后经过多次改版。成为了一个VIP制的站点,资源收集量还是不错的。鄙人经常去那里找代理服务器,更新的速度还是可以的。论坛里讨论气氛不是很热烈。希望今后发展的会更好。
  
  
  
  来说说这两年成立的黑客组织
  BCT
  http://www.cnbct.org/
  2004年底成立的一个专门挖掘脚本漏洞的组织。已经发展了一年了。在下与H4K_B4N,fpx到是有些接触。感觉这个组织是不错的,虽然没有做什么影响力大的事情,但是这种默默研究技术的精神还是值得发扬的,与那些招摇的比,要好多了。网站上收集了一些漏洞资料,这点到是做的比较好。希望继续努力,发展的越来越好。
  
  火狐技术联盟
  http://www.wrsky.com/
  2004年建立的一个组织,致力于破解软件的组织。对于他们组织现在很有争议,也曾经一度遭受到猛烈的拒绝服务攻击,造成网站瘫痪长大数月,到现在是一个论坛系统。对于这个组织,到目前为止还是有争议。希望能早日平息。
  
  黑客技术
  http://www.hackart.org/
  2003年成立的组织,之前使用的是乔客的整站程序,后来就关闭了。也是最近重开的站点,使用的是论坛系统,在下与那里的版主风般的男人和 Jambalaya 是好朋友。他们的技术还是不错的。现在论坛人气虽然不怎么高,但显然是老站重开,知道的人还不多,希望日后可以恢复元气,继续发展下去。
  
  
  国内三大商业黑客站点。
  黑客基地
  http://www.hackbase.com/
  2003年成立。站长龙哥。
  
  黑鹰基地
  http://www.3800cc.com/
  由米特创立的商业黑客站点。
  
  华夏黑客同盟
  http://www.77169.com/
  2004年由怪狗创立的站点。
  
  其实黑客组织多的数不胜数,我也只是举几个著名的而已。
  下面来说说人物吧,现在的黑客越来越多,我重点介绍那些专著于系统与漏洞的高手,当然他们对入侵也是有所造诣的。注意,这并不是排名,不是第一个就是最厉害,而最后一个是这里面技术最差的,如果这样想就错了。
  因为有时候想着费劲所以就进入一下牛人的BLOG以及一些论坛去看,这样就可以容易记起来,知道写谁。
  先从这里找http://www.0x557.org/~kkqq/ 然后在从安全焦点的文章和论坛里还有绿盟去找。
  
  
  alert7
  QQ:415451
  email:alert7@xfocus.org
  http://blog.xfocus.net/index.php?blogId=12
  安全焦点核心成员,曾经在补天的。精通linux操作系统,对于linux下的漏洞很有研究。
  
  baozi(fatb)
  QQ:48448355
  http://blog.xfocus.net/index.php?blogId=3
  对windows与linux下的入侵很精通。
  
  CoolQ
  QQ:49462335
  http://coolq.blogdriver.com/coolq/index.html
  email:qufuping@ercist.iscas.ac.cn
  我也是在安全焦点05年的峰会上认识的他,是中科院软件研究所的学生,对于linux非常有研究。在最后一期的Phrack杂志上有他的文章《Hacking Grub for fun and profit》也是在这期杂志中发表文章的三位中国人之一。另外著作还有《ways to hide files in ext2/3 filesystem》
  
  bkbll(dumplogin)
  email:bkbll@cnhonker.com
  http://blog.0x557.org/dumplogin/
  原中国红客联盟核心成员,与lion曾经一起参加过中美黑客大战。对windows与linux都很有研究。著作有《POSIX子系统权限提升漏洞的分析》
  
  flashsky
  QQ:16202253
  email:flashsky@xfocus.org
  http://www.qjclub.net/blog/user1/497/index.html
  安全焦点核心成员。精通windows操作系统上的缓冲区溢出,当年就是他一连公布了微软的N个漏洞,微软就此还谴责过安全焦点。现就职于启明星辰。
  
  Flier Lu
  email:flier@nsfocus.com
  http://flier_lu.blogcn.com/
  绿盟的高手,精通windows操作系统内核,著作有《MS.Net CLR扩展PE结构分》《自动验证 Windows NT 系统服务描述表》《CLR 中代码访问安全检测实现原理》等等。
  
  funnywei
  QQ:25044885
  email:funnywei@xfocus.org
  http://blog.xfocus.net/index.php?blogId=28
  安全焦点核心成员,熟悉windows操作系统。著作有《WindowsXpSp2溢出保护》
  
  glacier
  QQ:1937435
  email:glacier@xfocus.org
  http://blog.xfocus.net/index.php?blogId=15
  安全焦点核心成员,精通windows编程,网络编程,delphi等等。是冰河木马以及著名扫描软件x-scan的作者。
  
  icbm
  email:icbm@0x557.org
  http://blog.0x557.org/icbm/
  精通linux操作系统内核以及漏洞。就职于启明星辰。翻译过文章《Building ptrace injecting shellcodes》是《浅析Linux内核漏洞》的作者。
  
  killer
  QQ:6362602
  email:killer@xfocus.org
  http://blog.xfocus.net/index.php?blogId=2
  安全焦点灌水区版主。精通逆向工程,程序破解。
  
  pjf
  QQ:85863144
  http://pjf.blogcn.com/
  著名的检测工具icesword(冰刃)的作者。很多程序员以及编写rootkit的高手以绕过它的检测工具为目标。熟悉windows操作系统内核。
  
  refdom
  email:refdom@xfocus.org
  http://blog.xfocus.net/index.php?blogId=11
  安全焦点核心成员,《反垃圾邮件技术解析》的作者。似乎曾经是红客联盟的人。
  
  stardust
  QQ:6269692
  email:stardust@xfocus.org
  http://blog.xfocus.net/index.php?blogId=7
  安全焦点核心成员。熟悉linux,精通IDS。著作有《从漏洞及攻击分析到NIDS规则设计》《Bro NIDS的规则》《Snort 2.x数据区搜索规则选项的改进》《Bro NIDS的安装与配置》
  
  sunwear
  QQ:47347
  email:shellcoder@163.com
  http://blog.csdn.net/sunwear/
  邪恶八进制核心成员。精通windows操作系统内核。著作有《利用NTLDR进入RING0的方法及MGF病毒技术分析笔记》《浅析本机API》《智能ABC输入法溢出分析》
  
  swan
  email:swan@xfocus.org
  http://blog.0x557.org/swan/
  对缓冲区溢出漏洞很有研究。最近的ms05051 Microsoft Windows DTC 漏洞的exploit作者就是他。
  
  tombkeeper
  QQ:644909
  http://blog.xfocus.net/index.php?blogId=9
  安全焦点核心成员。精通windows操作系统内核。著作有〈用Bochs调试NTLDR〉〈修改Windows SMB相关服务的默认端口〉等等。在焦点峰会上见到过他,很帅。
  
  watercloud
  http://blog.xfocus.net/index.php?blogId=6
  安全焦点核心成员。精通windows,linux操作系统。著作有〈手工打造微型Win32可执行文件〉〈溢出利用程序和编程语言大杂烩〉〈RSA算法基础->实践〉
  
  zwell
  email:suei8423@163.com
  http://blog.donews.com/zwell
  NB联盟核心成员。精通windows操作系统,著作有〈安全稳定的实现进线程监控〉〈一种新的穿透防火墙的数据传输技术〉
  
  zzzevazzz
  QQ:49322630
  http://zzzevazzz.bokee.com/index.html
  幻影旅团核心成员。原灰色轨迹的人。精通windows操作系统内核。著作有〈Do All in Cmd Shell〉〈无驱动执行ring0代码〉等等。
  
  小榕
  http://www.netxeyes.org
  流光,乱刀,溺雪及命令行SQL注入工具的作者。中国第二代黑客。
  
  lion
  QQ:21509
  email:lion@cnhonker.com
  http://www.cnhonker.com
  原中国红客联盟站长,对缓冲区溢出很有研究。精通linux.windows.
  
  isno
  QQ:1070681
  email:isno@xfocus.org
  安全焦点核心成员,精通缓冲区溢出漏洞。webdav溢出程序的作者。写过IDQ,IDA漏洞溢出的分析等等。
  
  sinister
  QQ:3350124
  email:sinister@whitecell.org
  白细胞成员。精通windows内核,AIX。著作有〈NT 内核的进程调度分析笔记〉〈NT 下动态切换进程分析笔记〉〈AIX 内核的虚拟文件系统框架〉〈AIX 内核的文件操作流程〉
  
  袁哥
  email:yuange@nsfocus.com
  现就职于中联绿盟公司。精通windows操作系统内核以及漏洞利用。
  
  warning3
  email:warning3@nsfocus.com
  msn:warning3@hotmail.com
  精通linux unix内核及漏洞。现就职于中联绿盟公司。著作有〈Heap/BSS 溢出机理分析〉
  
  SoBeIt
  QQ:27324838
  email:kinvis@hotmail.com
  精通windows编程以及系统内核还有溢出。著作有《Windows内核调试器原理浅析》,《挂钩Windows API》等等翻译过《在NT系列操作系统里让自己“消失”》
  
  xhacker
  QQ:66680800
  精通渗透入侵以及脚本入侵。著作有〈详述虚拟网站的权限突破及防范〉,〈如何利用黑客技术跟踪并分析一名目标人物〉
  
  eyas
  QQ:320236
  email:eyas@xfocus.org
  安全焦点核心成员,熟悉windows操作系统,windows编程。著作有《NT平台拨号连接密码恢复原理》,《WS_FTP FTPD STAT命令远程溢出分析》
  
  孤独剑客
  QQ:5385757
  email:Janker@Hackbase.Com
  Http://Www.Janker.Org
  精通编程。以及入侵技术。winshell的作者。中国第二代黑客。
  
  sunx
  QQ:239670
  http://www.sunx.org
  对溢出有研究,写过IDA漏洞和printer漏洞的溢出程序。精通汇编。著作很多。
  
  analysist
  QQ:20116789
  精通数据库与脚本入侵。早年对跨站脚本以及很多脚本漏洞很有研究。著作有《跨站脚本执行漏洞详解》,《BBS2000和BBS3000所存在的安全隐患》
  
  Frankie
  http://cnns.net
  精通windows操作系统,与linux。中国第一代黑客。
  
  rootshell(fzk)
  QQ:1734398
  http://www.ns-one.com
  精通windows操作系统,熟悉缓冲区溢出漏洞。老一代的黑客。著作有〈最近发现的一个Distributed File System服务远程溢出问题〉。
  
  PP
  QQ:82928
  精通windows操作系统。名言:如果想飞得高,就该把地平线忘掉。
  
  tianxing
  OICQ:911189
  网站:http://www.tianxing.org/
  精通windows操作系统与漏洞利用。RPC漏洞利用程序以及网络刺客,网络卫兵的作者。
  
  grip2
  QQ:1007270
  精通linux操作系统。著作有〈一个Linux病毒原型分析〉
  
  san
  QQ:56941
  精通windows操作系统以及linux。而且对windows CE很有研究。phrack最后一期的杂志中,刊登过他的文章。
  
  hume
  QQ:8709369
  精通汇编以及windows操作系统。著作有《SEH in ASM 的研究》
  
  backend
  email:backend@antionline.org
  精通linux操作系统。翻译过很多文章,是绿盟的高手。不过已经几年没见在网络上游走了。到是现实中偶尔看到他。
  
  Adam
  QQ:15898
  email:adam@nsfocus.com
  绿盟的高手,windows安全版版主。精通windows操作系统。
  
  ipxodi
  QQ:16175535
  email:ipxodi@nsfocus.com
  很长时间没看见他了。精通windows操作系统以及缓冲区溢出。著作有〈window系统下的堆栈溢出〉〈Windows 2000缓冲区溢出入门〉。这些文章都是造福了很多后辈的。
  
  zer9
  QQ:573369
  email:zer9@21cn.com
  也是很长时间没见到了。早期写过不少文章和工具。也是老一辈的革命家。
  
  whg
  QQ:312016
  email:whg0001@163.com
  http://WWW.CNASM.COM
  不知道算不算白细胞的成员,呵呵。病毒高手。精通汇编。写过不少软件,例如lan下sniff QQ的工具以及sniff工具等等,可以到他的主页上去看。
  
  lg_wu
  email:lgwu2000@sina.com
  在绿盟论坛和安全焦点都见过,对linux精通的很。技术不一般的说。
  
  wowocock
  QQ:37803144
  精通windows操作系统内核,汇编。在驱动开发网以及cvc 轻描淡写见过,技术不一般。著作很多,但是见到的很少。不知道为什么这么好的文章没人转!
  
  baiyuanfan
  QQ:51449276
  这小子在峰会上给我的印象很深。在技术上很下工夫。对windows也算有研究了。著作当然是byshell了。
  
  vxk
  QQ:355852911
  汇编技术很硬,精通windows内核。经常在cvc论坛看到他。
  
  冰血封情
  QQ:124839278
  邪恶八进制的创始人。中国第四代黑客。感觉这个人很不错。对他的组织比较认可。技术上面还可以。
  
  Polymorphours(shadow3)
  QQ:120974745
  白细胞成员。以前叫shadow3.好象换名字了。熟悉windows操作系统,以及缓冲区溢出。著作有〈MS05-010许可证记录服务漏洞允许执行代码的分析〉〈Media Player 8.0 vulnerability〉等等。
  
  e4gle
  QQ:1949479
  白细胞成员。老一代的黑客。精通linux系统内核以及病毒技术,缓冲区溢出。著作有〈程序攻击原理〉〈Unix系统病毒概述〉〈高级缓冲溢出的使用〉
  
  bingle
  QQ:45671342
  很早就认识的一个兄弟了。著作不少,很多都很实用。
  
  wollf
  QQ:228095
  glacier的老婆。一定不能让他知道我是谁,要不我就死定了。她是黑客 ;) 美女黑客!
  
  goodwell
  中国早期著名黑客组织-绿色兵团 创始人之一。
  
  yellow
  QQ:12398890
  中华安全网核心成员。熟悉缓冲区溢出与windows编程。
  
  江海客
  QQ:741534
  曾经参加某个会议的时候见过他,聊的还可以,后来在焦点峰会时又碰了面。此人是反病毒方面的高手。
  
  icmb
  启明星辰linux方面的高手。对于漏洞方面很有研究。不带眼睛更漂亮……

Sunday, April 15, 2007

李小平:多添二胎孩子对中国有经济意义吗


李小平:多添二胎孩子对中国有经济意义吗
http://www.sina.com.cn 2007年04月06日 08:55 新浪财经

  
李小平:多添二胎孩子对中国有经济意义吗

李小平新浪专栏周。(图片来源:新浪财经)
点击此处查看全部财经新闻图片

  李小平,中国社会科学院人口研究所副研究员。1982年于北京大学经济系学习,获学士学位; 1984-88年于美国俄亥俄州立大学社会学系和经济系学习,获经济学硕士学位;1988-2002年于中国社会科学院人口研究所从事人口与经济理论与政策研究。主要从事人口经济问题的研究,内容主要包括:生育经济学理论、人口与生育政策、老龄人口与老龄化问题、劳动力市场、产权问题及国企改革、政治理论与政治体制改革等。

  4月2日-4月8日,新浪财经把一周的时间留给李小平。----编者按

多添二胎孩子对中国有经济意义吗 4月6日 星期五

李小平/文

《某些农家》

两亩薄田四口家,两季收成尚可嘉。
无奈他处少进项,愁到中年添白发。

《七色花》

几番梦游澳美加,一路摘采七色花。
心满意足归故里,吹求锦绣大中华。

  《论文摘要》

  笔者于2002年在全国第八次人口科学研讨会上提出了中国人口数量的两个百年目标,即100年将中国人口降到8-10亿;200年后降到3-5亿。这样的人口数量目标受到有些学者的反对。

  本论文的目的之一,就是力图进一步论证,1) 在现有人口数量基础上的新增人口对中国人均收入的增长没有任何意义;2) 从今起100年内所有二胎孩子对中国人均收入的增长只有负面意义。以这两个结论为依据,本文继续明确主张中国应坚持以下的人口发展战略:1) 调动一切可能有效的手段尽最大努力控制人口的增长以便加速实现人口零增长的进程;2)在实现人口零增长之后,应实行减少人口总量的人口发展战略;3) 长远的人口数量控制目标应大致定为:1) 在2100年将人口总量降到8-10亿,力求8亿;2) 在2200年将人口降到3-5亿,力求3亿。

  本文提出这两个百年目标的现实用意,就是希望党和政府以及全体人口学者应本着为子孙后代高度负责的精神,以高瞻远瞩的境界,继续探求进一步挖掘生育控制潜能的政策措施。

  为实现这两个百年人口数量目标,总和生育率就需要降低到并长期保持在1.5以下。因此,本文坚决主张现有生育政策应长期不变,绝对不应该在胎次指标上放宽二胎。同时,本文还主张,在进一步严控计划外生育的基础上,还应尽量采取有效的激励措施来减少计划内二胎和三胎生育。本文认为,以1.0为底线,在人口降到5亿之前,未来总和生育率越低越好。

  本文还将批驳以下人口问题上的见解:1) 普遍放开二胎是实现人口数量与结构最佳结合的良策; 2) 过度老龄化将使养老负担不堪重负;3) 国家间文明的冲突和延续中国文明要求中国不能减少人口总量;4)重建强有力的家庭结构才能确保家庭养老这种珍贵文化传统的传承;5)一个出现大面积独生子女家庭的社会实际上是为自己未来的发展预留了隐患;6)从人口安全发展的角度出发,如果继续在‘少生就是一切’ 的思路下鼓励农村独生子女现象无疑会使人口的风险运行雪上加霜。

  本文将论证,从人口经济学和福利经济学的分析看,从资本有机构成发展趋势的潜能看,从现代社会以国家和公民间的权力义务关系取代家庭成员之间血缘关系之保障纽带的必然趋势看,从一胎化完全可以建立在国家、社会和独生子女家庭三者同时受益的潜能和笔者的实证研究结论看,以上所有结论都是没有根基的,是根本站不住脚的。

  本文的最终结论是,以对独生子女家庭实行有效的社会保障为主要手段来尽量扩大一胎家庭的比例,是未来百年中国人口战略和生育政策的最佳抉择。

  根据人口与经济发展潜在关系的分析,笔者于2002年在第八次全国人口科学讨论会上提出了两个百年人口目标,即在100年后将中国人口降到8- 10亿并力争更低,200年后降到3-5亿,从而根本解决中国人口过多与人均资源长期紧张的问题。为此,就应将总和生育率降到1.5以下的水平并长期保持下去。这两个人口目标和相关的总和生育率目标受到了有些学者的反对。理由主要有二,一是认为这将会使人口过分老化而导致社会养老负担过重甚至不堪重负;二是认为因独生子有死亡风险而不应扩大独生子女家庭的比例,并据此而主张放宽或放开二胎的生育政策。我认为,第一个理由是根本站不住脚的;第二个理由也不足以成为否定现行生育政策和反对力争进一步减少二胎生育的充分依据。

  目前,关于今后生育政策的意见分歧有三,一是主张放宽或放开二胎生育,二是主张现保持行生育政策不变,三是主张在现行政策基础上尽量采取措施减少二胎生育。笔者持有第三种主张,认为这是加速缓解中国社会、经济、环境等问题并进而造福于子孙后代的最重要的政策取向。

  1.人口总量的进一步增长没有任何经济意义。

  从表1中可以看到,世界上除中国以外的五个疆域大国,其人口都不足中国的零头,其中两个国家尚且不足中国零头的零头。而这些国家除了俄罗斯由于人口的负增长而略感忧虑外,其他国家没有一个具有迫切增加人口的欲求。从人均收入看,这些国家全部高于中国。这至少可以表明,人多未必力量大,反而倒导致过不好。虽然也有一些中小国家人口密度较高并且人均收入也很可观,但从今后发展的角度看,大国之间人口与人均收入的比较,对中国无疑更具有参考和借鉴意义。鉴于中国在目前生育政策下的总和生育率水平仍将在今后一段时期导致中国人口的继续增长,那么,除非论证人口的继续增长有助于人均收入的提高,否则,提出放宽现行生育胎次政策无疑就是没有人口经济学依据的。而如果承认在现有基础上人口总量的任何增长必然会相对降低人均收入的提高速度,那么,主张放宽和放开二胎生育,究竟又是为了什么?

  关于迄今为止对各国已往人口数量与人均收入关系的见解,目前有四种观点,一种认为人口增长对人均收入水平增长的作用是不确定的,另有一种认为是中性的,还有一种人认为具有促进作用,再有一种则认为大多数国家的人口数量早已超出适度人口规模,从而阻碍了人均收入水平的提高。从各国已发生的事实看,以上每种观点似乎都可以找到它的依据。但回到中国的现实来,回到从今天起向前发展的立足点来,一个必须面对的最基本的问题是,从现在起,到底中国现有人口总量的进一步增长将会有助于还是将会阻碍人均收入的提高速度。

  如果主张放宽和放开二胎的学者认为,谁也无法令人确信地证明,中国现有人口总量的进一步增长对人均收入的确切影响,那么,也就等于承认,自己所主张的放宽和放开二胎的主张并没有建立在具有充分的经济分析的基础上。如果是这样,也就等于承认,其新的政策主张并没有充分的人口经济学依据。那么,其提出放宽或放开二胎的主张就需要从其他角度提供依据。

  我对中国今后人口总量与人均收入增长的关系的见解很明确,即,在现有人口总量基础上的任何人口增长都将阻碍人均收入的增长速度。这个论证可以搞的很具体和很复杂,但在各种具体分析基础上我所选择的直接论证方式却很简单:在不足3亿人口的美国已经创造出了远高于中国的国民生产总值和数倍于中国的人均收入的事实面前,我找不到任何依据或因素来论证中国需要通过增加人口来加速人均收入水平的提高。从而我的结论就是,在现有人口总量基础上的人口增长没有任何经济意义。根据这一结论,我认为合理的逻辑结论就是,中国应该尽量加速人口零增长的进程。鉴于目前生育水平仍在导致人口总量的增长,从而我在生育政策上的主张就是保持现行生育政策不变,并力争尽量减少计划内二胎生育。。

  针对有些人口学者反对以减少人口总量为目标的主张,我们不妨来看一看农民和高中学生们在人口数量问题上的观点(表2)。

  从表1中可以看出,绝大多数调查对象都认为未来人口比现在少一些为好,而相对知识丰富信息灵通的高中生们则对减少人口总量具有相对更强烈的愿望。此外,笔者在农村调查期间,还曾询问一些被调查对象:如果你们村的人口明天按随机性(笔者解释了随机性的意思)有90%明天飞到了其他星球上去,你认为剩下的人们生活改善的情况会怎样?大多数人认为那就太好了,也有人认为剩下的太少了。但两者都认为日子肯定会更好过,且改善速度会十分惊人。那些不赞成飞走90%的人,也都一概认为如果飞走50%,无论从什么意义上说,都是大好事。

  当大多数农村育龄夫妇、普通农民、高中生都意识到了减少人口对自己和中国将是一件好事的背景下,主张人口总量不应减少的学者应有必要重检验自己的见解和政策主张了。

  2.人均福利的改善要求加速减少人口总量

  调研所显示的大多数人主张减少人口总量这样一个事实表明,不仅在现有人口数量基础上的任何人口增长没有任何经济意义,而且,就未来人口总量与人均福利改善的关系看,事实上存在着人均收入与人口总量之间的负相关关系,即人口总量的减少会加速人均收入水平的提高。因此,以人均收入水平和福利改善为目标的发展战略就客观上要求尽量加速减少人口总量。

  2.1人均意识与人均资源劣势要求减少人口总量

  通过中美两国人口数量和人均资源的对比,降低人口数量的必要性这一点应该是不难理解的。大致相同的疆域,美国只有2.8亿人口,中国则比美国多出10亿,人口对资源环境的压力就可想而知了。别的不说,仅就水资源一项而言,中国目前就已面临着严重的短缺,国民收入的相当一部分,不得不用于水资源的开发与调配。许多有识之士因此一再强调,要特别呼吁和警醒国人从水资源短缺的角度来强化对进一步控制人口增长和加速人口负增长进程之重大意义的认识。今年 3月10日,在中央人口资源环境工作座谈会上的讲话中,胡锦涛同志也特别强调了这一点:“水资源供需矛盾十分尖锐,已成为影响经济社会发展和人民生活的一个突出制约因素”。

  据此,我希望所有反对减少人口总量与主张放宽二胎生育的学者,有必要认真面对中国的水资源短缺困境、地下水位不断下降和海水倒灌的困扰、许多江河严重污染的状况,以及荒漠化继续扩展的态势、物种不断减少的趋势、沙尘暴肆虐的烦恼、不可再生能源加速消耗的趋势、温室效应的加剧等种种困扰中国生态环境和经济发展的障碍问题。而且,还必须强烈意识到,即便按目前严格的生育控制措施,中国近些年每年仍将增加近800-1000人口,相当于1949年建国时的人口以近2%的速度增长,更相当于美国2.8亿人口按2.9-3.6%的速度增长,而这样的增长速度和增长量足以成为令美国朝野人士极度恐慌的数字。

  所有反对减少人口总量与主张放宽二胎生育的学者,不妨再认真比较一下中国、美国、澳大利亚、印度这四个国家的国土、耕地比重以及人均耕地占有量(表3)。

  从这一比较可以看出,中国由于人均土地占有量相对太低,且复种指数又低于印度,使得由于自然气候变动所可能导致的人均占有粮食不足的风险甚至远大于印度,反应了中国人口过多造成了相对较低的人口安全系数。另外,还应看到,中国1996-2002年人口增长了6000多万,而耕地则减少了6164 万亩,且人增地减的趋势仍将持续几十年。这一趋势使得粮食供给将长期成为国人不得不忧虑的问题。至于中国是世界上13个人均水资源最短缺的国家、人均水资源占有量只有世界水平的四分之一这样严峻状况的数字,所有主张放开二胎的学者们难道竟然不知晓吗?上海音乐学院的一位先生多次给我来信,表达了他对水资源短缺的高度忧患意识,并由此坚决反对放宽现行生育政策。这里不妨摘录一段,让读者体会一下一个普通公民对人口与环境的忧患意识:“说坚持一胎会加重老龄化问题,但和扩大二胎导致没有水来供养庞大人口而导致的生存危机相比,两害相权取其轻,究竟该取哪个呢?应该是很容易懂的事情。作为人口专家,却不知道人口是要靠粮、棉、油等等才能生存的,而所有这一切都需要靠耗费大量的水才能生长出来。他们作为人口专家却丝毫不知道中国的水资源能够供养多少人口。目前已是处处生态危机,再增加人口就要生态灭绝了”。

  2.2资本有机构成提高的潜能要求减少劳动力供给总量

  在总结了古典经济学关于机器与劳动替代关系之见解的基础上,马克思的资本有机构成学说阐明了,在工业社会,机器生产力的不断提高会日益排挤劳动力,在农业生产领域尤其如此。而就中国的情况看,我们现在是用几亿农业劳动力耕种着比美国几百万农业劳动力所耕种的还要少的土地。而中国农民家庭不要说用美国农业的器械化水平来武装,就是按东北农场人均耕作的土地数量来配置土地,那么大部分农民就将失去土地依托而成为无业人口。因而,中国农业机械化之所以难以普及,关键就是人地之间的紧张矛盾。不妨想象一下,如果将中国的13亿人口和美国的2.8亿人口对换一下,美国的现代农业将会变成一个什么样的状况,由此也就不难明白中国人口过多对农民收入水平提高的阻碍作用了。困扰三农问题之根本解决的最根本的因素就是人口过多。如果中国9亿农民有8亿飞到美国去,还会有三农问题吗?据此,我认为,那些认为不应以减少人口数量为目标,并主张以放宽和放开二胎来达到所谓人口数量和结构最佳结合的学者(李建新, 2002),有必要论证,一个使农业劳动力以传统的方法平均耕种着几亩或十几亩土地来平均养活着两个老人的国家,比之于用当今美国家庭农场的机械装备耕种着数百至数千亩土地来平均养活着四个老人的国家,更有助于所供养之老年人的生活保障。而我则认为,只要人口仍然是13-15亿,前者就是难以避免的结局;反之,如果人口降到3-5亿,后者就是必然的结果。即便将所有科技发展前景对农业劳动力需求和改善环境能力的局部正面影响因素充分考虑进去,也远远的无法抵消技术进步对农村人力之替代效果的力度。因此,我认为主张放开二胎的学者,无论如何也无法论证,百年之后一个仍旧是13-15亿人口的中国会比一个5- 8亿人口的中国具有更好的生活质量和生态环境。

  其实,对大多数发展中国家来说,不仅农业领域,在工业领域,资本有机构成的提高同样会不断形成用更少的劳动力生产更多产品的趋势。美国制造业劳动力目前只占全部就业者的百分之十多一点,但所创造的产值却远大于中国制造业用十多倍劳动力所创造的产值。而就整个国家看,美国用2.8亿人口创造的国民生产总值也远高于中国13亿人的创造,人多何益?如果不能否定中国未来用100年的时间完全可以在各个领域达到美国目前的机械化和自动化水平的话,那么,力图用所谓人口过分老化为担忧来在普遍放开二胎基础寻求所谓数量与结构最佳结合的主张,就是根本没有根基的。从财富增长的意义上来说,劳动力过剩的本质含义就是过多的劳动力对财富增长没有任何意义。那么,在资本有机构成提高的巨大潜力因劳动力过剩而无法挖掘的情况下,不断制造一个进一步过剩的人口规模,对老年人福利提高的意义又究竟何在呢?

  至于以所谓“文明的冲突”为依据来来论证所谓的“那种盲目追求减少中国人口数量的目标(如果以其人之道还之,我倒认为这类学者其实是在盲目地主张不应减少人口数量),既忽略了中国人口规模在世界人口中的比重减少所带来的不确定后果,更没有看到在追求减少数量过程中人口结构迅速变化对中国文明自身兴衰的冲击,对世界文明和平进步的不利影响”(李建新,2004),则无疑于危言耸听的无稽之谈。照这种“理论”,美国、俄罗斯、加拿大、澳大利亚这些人口不足中国零头甚至零头之零头的国家,岂不是更要因为人口相对太少和比重过小而拼命担忧所谓的不确定的后果了吗?这些国家是否要立志将自己的人口达到中国的水平,才能防止其过少的人口可能带来的不确定后果呢?才能防止对本国文明自身兴衰的冲击和对世界文明和平进步的不利影响呢?

  不用费心用所谓的人口经济模型分析,仅仅通过中美人口与经济状况的对比,就可以明白,在实现3-5亿人口目标的进程中,不论中国老龄化的程度如何,中国都绝对不会出现劳动力短缺。“劝君莫虑老龄化,劝君多思自动化。手持遥控来种地,如今不复是神话”。在全球化的进程中,发展中国家的现代化,大多是并将继续是以引进原创现代技术进行生产和普及为主。对农业人口占多数的国度,这种现代化进程比之于完全自我内生型的现代化,将具有更迅速地减少劳动力需求的潜能。许多发展中国家甚至一些发达国家的高关税和壁垒政策,大多数在本质上其实都是为了防止本国失业的加剧。这正说明全球化进程所提供的资本有机构成之提高和福利之增进的潜能,要求停止人口增长和早日转入负增长。自动化、流水线、远程遥控、机器手、机器人这些替代人力之技术的不断开发和普及,将使一堆堆廉价的钢铁塑料等原材料点石成金,并将在农业耕种、畜牧业养殖、制造业生产、矿产业采掘、服务业等各个领域进一步替代人力来创造物质财富和提供服务。我们只要想想加拿大和澳大利亚这样疆域广大且只有2-3千万人口的国家,都尚且不欢迎一般性移民,难道我们还有什么理由担心一个3-5亿人口的中国会出现劳动力短缺和文明难以继承不成?

  2.3人均收入水平的加速提高要求缩减人口总量

  一个令我十分不解的现象是,所有因老龄化而顾虑重重并因此而主张放宽或放开二胎生育的学者,竟然没有一个人肯于就一胎化和二胎化之间究竟那个选择在百年之内更有利于人均收入的更快增长进行分析论证。即便我在《人口研究》发表文章明确要求主张放宽和放开二胎的学者对此进行论证之后,那些进一步发文认为不能以降低人口总量为目标或不能以扩大独生子女家庭比例为目标的学者,仍然回避就两者之间将导致的人均收入差异问题进行对比分析,甚至连一个基本的表态都没有。这不能不让我认为,这些学者并没有将自己的政策主张建立在具有人口经济学和福利经济学之分析的基础之上,从而其政策主张近乎于凭感觉而出。还有些学者认为不能仅从经济角度来考虑生育政策和数量控制问题,这就很奇怪了,如果不是人口数量导致了经济问题,那我们又何必讨论人口数量问题和进行生育控制呢?而且,又何以见得从经济角度出发考虑人口数量和政策问题就是“仅”从经济角度考虑问题呢?

  我个人对此问题的判断非常明确,那就是,在100年之内,一胎化相对于二胎化而言,必定会加速人均收入的提高。其依据十分简单:首先,所有二胎孩子在18岁之前基本不成为劳动力,因此不生二胎,就节约了养育二胎的耗费,也就等于提高了人均收入。其次,农业人口和劳动力将长期过剩,因为中国在 100年进程中一步步达到全面按美国农业机械化标准装备将不会有任何问题,从而100年后最多不过需要几百万农业劳动力,也就是农业总人口最多不需超过两千万的水平(请意识到这是具有700万平方公里国土的澳大利亚目前的总人口规模)。因此,少生或不生二胎,农村人均和户均土地规模就会在最近几十年相对放慢减少的速度并在几十年后加快人均和户均占有量增长的速度,并由此而得以加速农村人均收入的提高。第三,如果中国100-200年后仍然保持13-15亿人口,而根据农业机械化发展的潜能来看实际最多不过需要两千万,那就意味着需要将几乎全部中国人口都安排到城镇。而即便美国、俄罗斯、加拿大、澳大利亚这些国家的人口在100-200年后都翻了一倍,也不过分别大约为6亿、3亿、0.7亿、和0.4亿左右,加起来不过10亿左右,然四国的国土面积则为中国的四倍多。那么,从人均资源占有量来分析,100-200年后3-5亿城镇人口的中国与13-15亿城镇人口的中国,哪一个更能够缩小与这四个大国之间人均GDP的差距,还需要进一步的所谓分析论证吗?对一个国家来说,只要人口不增长能使得人均GDP比人口增长情况下多出一元钱,那么,这个国家人口的增长对这个国家和其国民来说,就是没有任何经济意义的。所有主张放宽或放开二胎的人口学者不妨做个常识和良心判断:如果中国建国后人口立即停止增长,那么,相对于今天13亿人口而言,人均GDP究竟哪个会更高?反过来再判断一下:如果100年后人口退回到5亿的水平,那么相对于继续保持13亿而言,究竟届时哪个人口规模下会有更高的人均收入?

  在网上与我辩论关于两个百年人口目标的时候,有人认为不应该减少人口,并表示应该而且可以用数学模型来证明这一结论。我因此希望他做一个来看看,结果对方不了了之。我曾在网上辩论中表示,对于社会科学研究工作者来说,能将复杂问题尽量简单化的,是高手;将复杂问题继续复杂化的,是庸人;将简单问题故意复杂化的,是骗子。对那些主张人口总量不能减少和主张放宽或放开二胎并自认为可以用数理模型来求解最佳人口规模的学者来说,我倒是很希望看看他们到底能以什么样的模型和数据依据来证明100-200年后,一个13-15亿人口的中国会比一个3-5亿人口的中国具有更高的人均GDP和更好的生存环境。

  3.100年内新增二胎孩子对中国没有任何经济意义

  根据中国与美国、巴西、俄罗斯的人口与经济状况比较,我认为至少在50年内,所有新增二胎孩子对中国都没有任何经济意义,也就是说这些新增二胎孩子无疑将阻碍人均收入水平的提高速度。因为即便中国从今日起在50年内完全杜绝了二胎,50年后中国人口也不可能减半,也就是说仍然要高于6亿的水平。而如果与加拿大和澳大利亚进行比较,我认为即便对再下一个50年来说,新增二胎孩子对中国仍然没有经济意义,因为届时中国人口仍然不会低于2亿的水平。而加拿大和澳大利亚估计也就在5000万上下的水平,无论如何也不会超过1亿人口。而就世界头号经济大国美国来说,尼克松早在70年代就表示美国人口太多影响了福利的改善。以《人口炸弹》和《人口爆炸》闻名于世的生物学者伊利奇,除了表示希望各国人口应尽早停止增长以外,也呼吁美国人最好只生育一个孩子以防止人口的进一步增长。

  目前主张放宽或放开二胎的主要论据是防止人口年龄结构过度老龄化。但如果不能论证放宽或放开二胎更有利于人均收入的提高,那么放宽或放开二胎对养老问题的意义又何在?难道通过增加人口总量而使人均收入增长相对放慢所求得的一个相对年轻的人口结构,会更有助于提高老年人的福利保障?

  毫无疑问,就一个国家的人口年龄结构而言,关键的人口经济学意义上的问题是人口老化是否导致了劳动力短缺。如果人口老化并没有导致劳动力短缺,那么,想通过增加生育来缓解人口老化,其结果对老年人来说恰恰是雪上加霜。因为只要人口老化没有导致劳动力短缺,那么通过增加生育来求得人口年龄结构相对年轻化的结果无非是进一步增加剩余劳动力,由此,社会就会在首先付出将新增过剩人口养育新增过剩劳动力的经济代价之后,又不得不以抑制资本有机构成提高的劳动密集型就业政策来付出阻碍劳动生产率提高的代价,也就是阻碍就业者在少生育情况下本可以享有的工资水平的相对加速提高。我国农业土地在村一级实行平均分配政策就是典型的就业吃饭型政策,原因就是农村劳动力大量过剩,在城市无力吸纳的情况下,社会就必须保证农村人口通过人人有土地而有干事进而有饭吃,这无疑表明劳动力过剩情况下社会只能以阻碍农业劳动生产力的提高为代价。

  直接讨论一个国家的人口老化和劳动力供求问题有时候容易使讨论复杂化。为此,我们可以尝试将一个国家的这类人口问题简化成一个企业的问题来讨论。假定有两个一模一样的企业(为了将问题更简单化,我们可以将其视为两个发电厂),这两个一模一样的电厂各自必须背负的人口规模和年龄结构如下(表 4)。

  电厂1假定是一个人口年龄结构动态稳定型和劳动力最优配置型企业,从而,电厂2则必然是一个劳动力过剩企业。因此,尽管其人口年龄结构相对年轻,2.5个劳动力供养一个老人,养老负担远低于电厂1(一个劳动力供养一个老人)。显然,电厂2年轻的年龄结构是以劳动力过剩为代价的,其结果就是一个人的活两个半人来干(可以同时上下班,比如电厂1由4个人负责安全巡逻而电厂2则安排10个人来干。也可以实行减少平均工作日的方法,比如电厂1每人上5 天班,电厂2则每人上两天班)。显然,电厂2改善其人均收入的最好办法就是减少生育,使人口最终达到电厂1的水平。这两个电厂的比较其实大致可以看作中国与美国的类比。如有谁有疑义,则不妨设想如果明天有10亿中国人飞到美国去,美国从此各行各业的劳动生产率将会是一个什么样的情况,特别是美国的土地制度和农业经营模式将会发生什么样的戏剧性变化。

  从这种类比可以认为,对中国这样一个劳动力已经严重过剩的国家,以放宽或放开二胎生育来延缓老龄化,也就是以劳动力进一步过剩为代价来求得一个相对年轻化的人口年龄结构的政策,不但不会为老年人口带来福利水平的提高,而且会使整个国家的人均福利相对降低。根据这个例子和以上关于资本有机构成提高潜能的分析,再加上中美人口与经济状况的对比,我认为完全可以认定,100年内新增二胎孩子对中国没有任何经济意义。

  4.进一步减少二胎生育对策的其他依据及可能性

  4.1二胎孩子的社会成本与家庭收益

  在一定的时期内,如果资本有机构成提高的潜能使得所有新增的二胎孩子没有任何宏观经济意义时,则这些新增二胎孩子一生的消费就是他给这个社会带来的成本。具体到每个人来说,其带给社会的成本自然是不尽相同的。但从平均期望值的角度说,一个期望二胎孩子的平均社会成本可以视作等量于对GDP的人头扣除。

  让我们来算一笔简单的人口经济帐。按目前人均大约GDP1000美元来计算,那么,在人口不增减而GDP按每年2%环比速度增长的情况下,今年一个新增的二胎孩子加上他的后代(假定该二胎孩子和其后代都绝对只生一个孩子),在这个二胎孩子70岁时,其本人和其平摊到的一半后代(三代共1.75 人)在这70年中,就要在名义上占去250万元人民币的GDP,这笔钱,就可以视为今年出生的一个二胎孩子在70年内对其他人口的纯粹“抽税”。

  根据一种估算(曾毅,2004),中国2000年大约生育了702万个二胎孩子。如果假定这些孩子压根没有出生,并且未来70年中国GDP恰好按照2%环比速度增长的话,那就意味着中国在未来70年中由于这一年少生了这702万二胎孩子而减少了17.55万亿的GDP人头扣除。这种减少的扣除就表现为人均GDP相对较快的增长。如果从今起20年内每年少生702万,则未来70年内就等于减少了175.5万亿的人头扣除。平均到现有人口上相当于人均13.5万元。由此可见,如果中国在一代人之间彻底消除了二胎生育,中国人民生活的改善就会大大加速。

  有人可能认为这种计算方法没有将新增二胎孩子创造价值的因素考虑在内,但如果按照这种思维和算帐方法,那也就没有人口和劳动力过剩问题了,因为即便是第十胎孩子,他们长大后不也是自己养活自己吗?那放任随便生育不就得了吗?还搞生育控制干什么呢?其实,道理很简单,虽然这些二胎孩子出生后也会参与劳动就业和获得收入,但从农业角度看,这无非是将本来可以由一个人耕种的土地由两个人来耕种,或者将本可以由机器代替人力来耕种的土地继续交给更多的人来耕种而已。从工业角度看,无非是将2个人的活5个人来干,或将可由机器干的活换成人来干而已。从商业角度看,无非是将一个人所卖出的东西由两个人来卖,用更多的小摊贩替代大型商场和超市而已。不仅如此,过度生育的另一个功能就是将本可以作为森林、草原、湿地、湖泊等创造幽雅生存环境的大自然的天然生态,不断地变成农业耕地,以将本可享有的美学生活和生态环境逐步破坏到生态危机的地步来养活一个低水平生存的庞大人口群而已。

  根据以上计算,可知,如果有一种制度安排使得没有经济意义的所有二胎孩子之一生的社会边际成本均由其父母通过收入储蓄来负担的话,那么,也就没有几个家庭能够养得起第二个孩子,从而也就很少有人会生育二胎孩子了。而在人口和劳动力已经大大过剩的情况下,许多家庭之所以仍然生育二胎,原因乃是因为这个二胎孩子一生的成本大多数都通过各种渠道转嫁给了社会。转嫁渠道包括与他人分享各种本已紧张的自然资源、公共教育经费、就业投资和就业收益、公共医疗、社会保障等等。其中,劳动就业参与是转嫁成本的最主要的方式,其表现就是通过进一步促使劳动力供给过剩而阻碍资本有机构成提高,并由此造成市场工资的相对降低和长期增长缓慢。印度的一项研究表明,1956-84年间印度劳动力增长了一倍,实际工资相对降低了27.6%(Jolly & Torrey ,1993),这就是此前那些生育高胎次孩子的父母给社会造成的外部性成本的一部分。在资本充斥的时代,许多国家之所以强调大力发展劳动密集型产业,原因就是因为劳动力过剩和不断增长,这也就表明新增劳动力抑制了资本密集型产业的发展普及和抑制了市场平均工资提高的潜能之发挥。有学者认为中国由于以往劳动力的增长而形成的年轻型人口结构对中国经济发展来说是一种红利(蔡昉,2004),我认为结论应该是恰恰相反。事实上,如果中国1949年建国后压根没有人口增长,中国人均收入水平肯定会比现在要高的多,也不会存在目前如此困扰的三农问题,从而,建国后人口劳动力的增长不但不是什么红利,而且是抽走了人口不增长情况下5亿人口本应有的红利。如果不能令人信服地论证中国自建国以来在5亿基础上的人口总量的增长相对于保持5亿人口而言确实促进了人均收入的增长,那么,人口红利一说就是没有经济学依据的。与“红利”的见解相反,有学者进行的定量分析结论认为:仅1979-94年间,人口增长率若比实际每降低1 个千分点,人均GDP就可提高0.36-0.59个百分点。此间人口增长了300‰(增量为2.35亿),那么根据这一结果,如果人口在此期间增长为零,人均收入就可相对提高108-177%(胡鞍钢 ,1999)。这一比例显得很高,但若考虑到在资源短缺约束下,许多边际投入的成本上升和产出的边际收益递减性质,这个结论就并没有什么可惊奇的。

  由于可以将大部分边际社会劳动生产率等于零的二胎孩子一生成本的大部分转嫁给社会,那么,对某些生育二孩的家庭,养育二胎孩子就可能具有净收益,这就会促进二孩生育。另一些主要从精神需求上渴求生育二孩的家庭,则由于可以转嫁大部分成本,也就具有了将第二孩子作为耐用消费品来消费的能力,这也会相对增加二孩生育。因此,在新增二胎孩子对经济增长没有任何意义的情况下,相对于只生育一个孩子的家庭而言,生育二胎孩子的家庭等于是用数百万元的社会成本之代价来实现自己对二胎孩子的物质性或精神性需求。

  根据福利经济学原理,如果厂商和个人行为导致了外部成本(如污染),政府就有权进行干预和约束。国家干预生育的依据也正是在于此。至于究竟约束第几胎生育,应取决于一个国家人口过剩的状况和该国政府在不同时期的干预能力。就中国的情况而言,由于劳动力过剩十分严重,从而根据以上的分析,我认为国家干预二胎生育是必要的和正确的。并且,为了全体中国人民的长远利益,应该长期坚持下去,至少应坚持到实现3-5亿的人口目标之时日。

  4.2百姓的生育政策观与生育上的经济帐

  在有些学者力主放宽或放开二胎的背景下,我们不妨看看普通百姓对于生育政策的主张,或许可以从中得到一定的启示。表5中的数据是2002年笔者在农村蹲点入户进行访谈与问卷调查所得到的结果。从中可以看到,在所调查的对象中,只有很少数的人主张放开二胎和放任生育的政策。这个调查并非从调查夫妇本人生育意愿角度出发的,从而并不代表他们自己的生育意愿。正如有人指出的那样,在生育问题上,人们都是希望别人少生而自己按意愿生。这项调查至少表明,不论自己的生育意愿如何,被调查者的大多数对强化人口控制的意义是具有认同的。在河南谭庙村调查时,就有村民忧虑地表示:“人越来越多,地越来越少,地下水位越来越低,将来子孙后代该怎么办啊”!

  在主张放宽二胎生育以求缓解过快老龄化的学者中,没有人将养老负担和养少负担相提并论和进行认真地比较,从而立论的局限性是显然的。事实上,城市由于有养老金制度,养孩子基本上都是“死赔”,从而四二零结构加存钱措施反而更有助于老年福利。在农村,养育第二孩的支出若全部作为商业养老保险存储,老来所能得到的养老金支付也将很可观(当然必须有保值机制),对许多家庭来说恐怕要大于养育二孩情况下第二孩的“反哺”数量。笔者在湖南和河南的入户调查证实,农民对这个道理也是一清二楚的,而且大多数农民还认为,两组收入永远一样的中等家庭,一辈子无孩者如果将相当于有一孩家庭养育孩子的支出全部存起来,老年后的本息要大于有一孩家庭之孩子平均所能提供的供养水平。调查还显示,绝大多数夫妇对于养育孩子的各种负担特别是教育费用之高是非常清楚的,而且在回答“您是否认为养老必须靠男孩不可”这一问题时,鸿源村90个回答者中82个人(91%)、谭庙村40个回答者中35个人(87%)的答案是否定的。这表明,在这两个村并可推及在中国不少农村,相当部分一女孩户之倾向于生育二胎已非提供养老保障的物质支撑所能解释,更多地还是一种精神上的需求,也有一定程度的防范不测风险的需求(如本人残疾等),有些人则强调主要是为了让孩子有个伴。

  该调查中还发现了两个值得认真对待的现象。其一,是有些村镇干部和计划生育专干希望国家干脆采取不论男女都只生一个的政策。原因有二,一是认为允许一女孩户生育二胎对一男孩户不公平;二是当地出现了个别怀男孩的妇女将男孩打掉来求第一胎生个女孩,以便可以按政策再生第二胎。其二,是一些育龄妇女认为一女孩户可生第二胎的政策导致了一定程度的“被迫”生育。即,或者育龄妇女受到丈夫的压力,或者育龄夫妇受到老一辈的压力,或者两代人受到村里舆论的压力(被嘲讽为无能,给了指标都没本事生养),有些人因此认为别人生自己不生搞得自己很没面子。因此,两个村里都有相当一部分育龄夫妇主张不论男女,政策干脆规定都只许生一个。谭庙村一些调查对象的这种政策倾向非常强烈。另外,还有部分育龄夫妇是希望借国家实行普遍一胎政策而摆脱因有选择所难以避免的一种矛盾心态:想生儿子却怕又生女儿(当然,也有一些真正无所谓的。鸿源村甚至还有一女孩户真正想再生一个女孩的),故而担心多生一孩不但没能实现真实意愿,反而又增加了经济负担,因此认为不如从政策上断了念头。

  总之,部分育龄夫妇和干群认为,允许一女孩户生二胎对想生二孩的独子户来说很不公平,而放开二胎又显然不可取,故而主张在农村不如全面实行一胎化。这种背景使得利用政策措施在农村显著扩大独女户家庭比例成为可能。不过就目前情况看,立即在农村要求一胎化恐怕还是不太妥当。而采用奖励和社会保障的办法鼓励自愿地放弃二胎,却不失为一项兼具稳妥性和可行性的措施。

  笔者利用两种方案进行的试点调查显示,用现金奖励或社会保障的方法鼓励放弃计划内二胎生育的对策,对农村独女户家庭具有非常大的吸引力。方案一是纯现金奖励措施,用以了解奖励水平与放弃计划内二胎家庭的比例关系(表6)。结果显示,当奖励分别在3万和5万元时,两个村合起来明确表示愿意放弃二胎的户数分别占总数的38%和57%。

  方案二是一套包括社会保障在内的综合性配套方案,具体内容是:1.现金奖励:2万元,一方绝育后可领取。2.教育特惠和学费减免:1)保送上公立高中或中专,学费全免;2)考入公立大学者,上学期间(包括硕士、博士学习)学费减免50%。3.养老和残疾辅助性保障: 1)老年后经济困难者,国家予以辅助至当地老年人的平均生活水准;2)生活不能自理时,由国家通过集体承办的养老院收养;3)若夫妇之一或独生女残疾,根据残疾情况按年或月发放残疾补助金。4.医疗保险:1)无医疗保险者:自一方绝育起,大病医疗和住院费一次性超过2千元的部分,国家报销70%。;2)自购医疗保险者:自一方绝育起,国家给予保险公司报销额之20%的奖励。5.无后补偿:若独女因故离世且不再生育,则在45岁或绝育后,予以10万元的安慰性补偿。6.税费减免:从女方绝育起,各种税费分别减免20%。7.贷款优惠:国家给予终身5次无息贷款用于家庭多种经营。每次额度不超过5千元。每次期限不超过3年。每次贷款以还清前期贷款为前提。对与方案一中的同样本家庭调查的结果显示,在上述措施下,两个村被调查的一女孩户分别有83.7%和 56.3%表示在此方案下愿意放弃计划内二胎。

  另外对数十位市镇村领导、计生干部和其他群众的旁证调查表明,绝大多数人认为5万元的现金奖励或七项措施的综合方案,都可使全国农村独女家庭一半以上放弃计划内二胎,有些人认为甚至可以达到80%。旁证判断和对育龄夫妇的实际调查结果具有高度的一致性。

  4.3一胎化完全可以实现国与家两利的结果

  铁血宰相俾斯麦有一句名言:一个将来有养老金可领的工人,就不会要求革命了。将这种见解套用到计划生育事业上,就可以认为,如果有一种制度安排使只有一个孩子的家庭老来比有两个孩子的家庭生活的更好,那么,根据对人类行为理性的判断,至少多数家庭就不会非要选择生育两个孩子不可了,没有男孩的家庭也就不会非要男孩不可了。

  有一种主张放宽或放开二胎的依据是出于对独生子女死亡风险的顾虑。认为只有一个孩子的家庭,会面临孩子意外死亡又无法再生育而形成家庭风险,并由此从血缘、亲情、人伦等角度强调“独生子女现象不易盲目鼓励”(这里的“盲目”,也是颇有意思的说法,何以见得鼓励独生子女现象就比放开生育二胎更盲目呢?),并认为,“从人口安全发展的角度出发,重建强有力的家庭结构才能确保家庭养老这种珍贵文化传统的传承”;“一个出现大面积独生子女家庭的社会实际上是为自己未来的发展预留了隐患,如果继续在‘少生就是一切’(这也是颇有意思的说法,鼓励少生就是主张“少生就是一切”吗?那么是否主张放开二胎的主张也应该被称之为“多生就是一切”呢?)的思路下鼓励农村独生子女现象无疑会使人口的风险运行雪上加霜”(穆光宗,2004)。其实,如果没有人口和劳动力过剩问题,即便普遍放开二胎甚至随意生育也根本就不是什么问题。但问题恰恰是,在人口总量问题已经如此深深困扰民生和环境改善的情况下,面对每年近千万数量的巨额人口增长,扩大一胎家庭比例与放开二胎到底那个从总体上更有利于将国家、社会和家庭三者之间的利益更有机地统一起来呢?

  在军事上有时会出现这样的情况,即为了防止整个部队不至于全军覆没,就需要少部分军人做出牺牲,慷慨赴死。不能因为飞机有掉下来的风险就放弃航空业,也没人主张因为游泳可以淹死人就禁止游泳。同理,在人口压力造成如此巨大的社会经济和生态环境问题的状况下,也没有充足的理由以少数家庭的无后风险为由而出台将继续造成更大人口过剩问题的放宽或普遍放开二胎的政策。

  其实,从许多独女户家庭愿意接受社会保障而放弃计划内二胎的意愿已经可以看到,在生育二孩而保持家庭养老与只生一孩而享受全面社会保障之间,多数育龄夫妇将后者看成更有利于自己的选择,而且这些家庭都是只有一个女孩的家庭。那么,在用社会保障鼓励更多家庭只生一个孩子这种既有利于国家、又有利于社会和个人、更有利于子孙后代的政策措施面前,主张扩大或放开二胎难道可以被认为是一个有价值的主张吗?更何况,世界不少发达国家的总和生育率早已降到 1.5以下,有些只有1.1,难道这些国家需要因为独生子女的死亡风险而逼迫大家普遍生育第二个孩子不成(我曾著文表示过,以美、加、澳为标准,世界大多数国家的人口都应该向着至少减半的方向努力)?再者,各个国家都会有一些无孩子家庭,中国“丁克”家庭也呈现增加的趋势,难道这些家庭就必定比有孩子的家庭更不幸?难道他们老年后就必定更加寂寞、凄凉或凄惨?其实,认真琢磨社会现代化进程的含义,就会发现,社会现代化的一个重要标志,就是用国家与个人间的责任义务关系来逐渐取代家庭成员间的责任义务关系,使以血缘为主要纽带来组织经济利益和相互保障关系的农业文明转变为以非血缘关系来组织利益和保障关系的工商业文明。比如,美国就明确规定子女没有赡养老人的义务。读过《红楼梦》的人也许都不难体会以血缘为纽带的人际利益关系是多么的复杂和充满了多少龌龊,这显然也是传统大家庭为什么逐渐被核心小家庭取代的根本原因。以社会化的养老和风险保障逐渐替代家庭成员间的养老和其他风险保障,无疑是人类向着现代的精神文明和生活美学的又一次飞跃。

  至于有些人担心独生子女家庭普遍化会形成对老年人照料的困境问题,我们不妨来看看给我来信的一个非学者的观点:“现在一些人对进一步降低人口增长的担心,其实是属于思想陈旧所致。比如担心老年人缺少人照料,真是笑话。只要经济上去了,何来此担心?只要独生子女有经济实力,给每对老年人请一个保姆,一切都解决了。农村能担当此工作的年青力壮的人多的是,要多少有多少。我父亲生病,我给他请保姆服伺,喂汤送饭、端屎端尿,那真是任劳任怨。干的时间越长,保姆越开心,因为有钱。亲生子女哪做得到这一步?久病床前不缺保姆,只要经济上去了,哪来照顾不了一说呢?时代飞速发展,观念却还是一百年前的,那哪行呢?那怎么会不生出许多庸人自扰、杞人忧天来”?在信的结尾,这位对水资源问题无限忧虑的人士又一次以不无幽默的口吻表达了他的真知灼见:“最可怕的是,杞人只顾忧天,却不注意脚下的土地已经因缺水而变成不长苗不生草的沙漠,肚皮问题都没法解决了,那才是真正要命的”。

  根据以往的研究和以上的分析,就独生子女政策和人口目标以及有关的理论问题,我在此再一次将我的主要结论归纳如下:1)加速老龄化有助于老年保障,因为可以将养育新增过剩人口的资金用于老年人;2)继续推行一胎化不会导致劳动力短缺,因为各种替代人力的机械之生产潜力巨大;3)老龄人口需要供养的比例远小于老年人口的比例,如果不是劳动力过剩,大多数老年人可以工作到70岁;4)四二一结构胜过四二二结构,因为少养一个孩子会减轻许多负担;5) 城镇四二零家庭比重的增加是农民的福音,因为会加速农村剩余劳动力转移的速度;6)性别比问题绝对不成为放弃进一步降低生育率的理由,因为完全可以通过社会保障方式来消除;7)未来100年内,人口减少速度越快,人均收入水平增长越快。总而言之,我坚定地认为,从现在起不论何时人口降到3-5亿,对中国都是绝对的大好事。希望所有主张放开二胎的人口学者能够给予具有人口经济学依据的反驳。

  5.进一步控制二胎生育的对策措施建议

  今年国家已出台了对独生子女家庭和符合计划生育的双女孩户家庭实行养老保障性质的奖励扶助试点措施。本文在此措施的基础上,以减少计划内二胎为重点,提出一些补充性的措施建议。

  5.1一项意义重大和影响深远的政策

  对笔者来说,今年一个十分令人振奋的举措,就是春天到来之际,国务院办公厅发出了《转发国家人口计生委、财政部关于开展对农村部分计划生育家庭实行奖励扶助制度试点工作意见的通知》。《意见》最核心的内容是:在各地现行计划生育奖励优惠政策基础上,开展对农村部分计划生育家庭实行奖励扶助制度试点,对象是农村只有一个子女和符合计划生育政策的两女孩家庭,措施是夫妇年满60岁以后,由中央或地方财政安排专项资金进行奖励扶助。奖励扶助的标准是,符合上述条件的农村计划生育夫妻,按人年均不低于600元的标准发放奖励扶助金,直到亡故为止。已超过60周岁的,以该政策开始执行的实际年龄为起点发放。试点时间确定从2004年开始,选定在四川、云南、甘肃、青海省和重庆市,以及河北、山西、黑龙江、吉林、江西、安徽、河南、湖南、湖北省各1个地 (州、市),贵州省遵义市进行试点。同时鼓励东部省份自费试点,取得经验后逐步在全国推开。这真是“东风送暖入屠苏”,“好雨知时节”。这一奖励扶助试点举措,对于自觉遵守国家计划生育政策的千百万农村家庭以及所有从事人口研究和计划生育事业的工作者来说,无疑于送暖的东风和飘洒的春雨,温暖和滋润着人们的心田。它无疑是中国历史上一项意义十分重大和影响深远的举措,是中国计划生育史册上具有划时代意义的伟大篇章。

  每年600元的标准,大致相当于目前农村人均纯收入的四分之一。考虑到大多数农村老人家中有口粮地和菜园等情况,600元应该说还是比较可观的。如果保持这一标准不变,一对农村夫妇如果平均活到70岁,总共可以领到12000元,如果平均活到80岁,总共可领到24000元。如果这一水平此后按照每年2-4%的速度来提高,那么,对于对目前30岁的育龄夫妇来说,则60岁时(2034年)两人当年可以领到2172-3892元;70岁时 (2044年)可领到2648-5760元,即从60岁到70岁的11年里,可以总共领取到26427-52485元。对于独子家庭和双女户家庭,在给定生育政策和已有鼓励措施下,再加上这一相对比较优厚的奖励扶助金,无疑会有助于进一步减少二胎生育。

  这一措施对允许生育二胎的独女户农村家庭将会平均产生什么样的影响效果?是一个很值得研究且有吸引力的问题。我们先来计算一下这一奖励水平的折现价格。假定采用一次性现金奖励的方法,比如,一次性奖励15000元,则对目前户主为30岁的家庭来说,如果存款利率为2-4%,那么到60岁时本息之合大约为27170-48650元。因此,目前600元的养老奖励金如果今后按2-4%进行年度递增,则这样的养老金水平大致相当于给予30岁的农村符合计划生育家庭15000-16000元的一次性奖励。如果600元水平保持不便,则折现大致将近7000元左右。根据以上的调研结果看,目前这一水平的奖励扶助标准对促进减少计划内二胎的鼓励效果也许还是比较有限的。因此,根据以上关于减少二胎生育对国民福利改进之重大意义的分析,我认为还应该在这一重大措施的基础上,进一步采取一切可能的措施来减少二胎生育。

  5.2进一步减少二胎生育的对策措施

  为了鼓励今后更多的农村家庭只生育一个孩子,我认为,可以在目前奖励扶助的基础上,进一步采取措施,适当地拉开对两女孩户、一男孩户和一女孩户的奖励扶助和社会保障标准,对一男孩户适当给予额外的鼓励,对一女孩户加大奖励和保障措施,以促使更多的农村家庭放弃超生或选择放弃计划内二胎生育。具体措施建议如下:

  1)基本养老奖励扶助性保障和晚年照料:独生子女和符合计划生育的双女户家庭,共同享有目前的政策待遇(每年每人600元),以后根据经济发展水平,按同标准进行调整。此外,所有享受养老辅助的成员生活不能自理时,在本人自愿的前提下,由农村养老院收养照料。政府可以授权在乡镇政府所在地和一些地理位置较为合适的村落建立集体或民间承办的养老院,专门服务于生活不能自理的农村老年人。

  2)独生子女家庭:在一般养老奖励扶助待遇的基础上,国家另提供一个三口之家的三大风险保障,即:大病医疗保险,死亡保险和残疾保险(家庭和政府各承担一半所需保费)。国家可向商业保险公司招标,由商业保险来运作。死亡保险可定在每人10万元的赔付水平。父母方50岁以前死亡有效,50-60岁死亡赔付减半,60岁以后失效。孩子死亡赔付属于无后赔付,如果孩子死亡后继续再生育则不享受该项保障,技术上可采取40岁以后支付以防止冒领。大病医疗保险应排除某些肯定无法治愈的疾病,以便减少保费支出。残疾保险根据残疾状况按年度确定赔附标准。独生子女家庭医疗保险也可以暂时采用以下方式:1)无医疗保险者:自一方绝育起,家庭成员大病医疗和住院费一次性超过2千元的部分,国家报销70%。;2)自购医疗保险者:自一方绝育起,国家给予保险公司报销额之20%的奖励。

  3)独子家庭:考上公立高中或中专者,学费按标准减免50%。读民办高中或中专者,给予相应减免额的补贴。

  4)独女家庭:国家另提供四项保障或奖励措施:(1)现金奖励1-2万元;夫妇各一半。从签约之日起打入个人帐户,一方绝育后即可领取。(2) 保送独女上高中或中专,学费全免;(3)考上大学者,学费减免50%;(4)养老奖励扶助金比标准水平提高20-30%。农村户口中不享有计划内二胎指标的独女户家庭,所有保障优惠措施按独子户家庭对待。另外,还可以考虑对独女户家庭给予终身2-3次半息贷款用于家庭多种经营和特殊之需。每次额度不超过5 千元。每次期限不超过3年。每次贷款以还清前期贷款为前提(独子家庭也可以给予一次机会)。

  5)符合计划生育的其他类型的两孩家庭:可以采取自我交付70%费用的方式享有独生子女户的三大风险保障。养老保障或者家庭自我解决,或者可以通过全额交费方式参与社会保障。6)超计划生育家庭:不享受任何形式的正式社会保障,国家只在其特殊必要时给予基本生存需要的救济。

  如果从政策操作的简单性出发,其实也完全可以采单一的最简单的交易措施,即在现已出台的养老奖励扶助措施的基础上,国家可以以抽样调查为基础,确定一个对一女孩户的现金奖励标准,比如,在目前阶段,国家可以确定对独女户另行一次性奖励2-3万元来交换回二胎生育权。对独子户则可以奖励5000元作为遵守计划生育的补偿性奖励。其他的一切,就交给育龄夫妇按自己的意愿去行事。如果仅把人口控制作为单一目标的话,这确实是最简单省事的办法。但如果要考虑到使一种方案尽可能实现更多社会目标的话,那么我以为还是采取以上的综合措施方法更好一些。

  5.3农村社会保障资金的筹措

  计划生育是百年大计,推进农村社会保障是缓解“三农”问题和减少新增贫困的重要措施,缩小城乡差别是全面建设小康社会的重要内容,因此,就应该给予资金运作上的优先保障。目前养老奖励扶助试点的资金是由中央和地方财政根据不同省份的经济状况来按不同比例分摊的。如果常规财政税收的扩展能够保障有效地推进二胎控制与农村社会经济问题的综合治理所需资金,那当然最好不过。如果常规财政过于吃紧,那么我认为可以考虑采用以下渠道进行特殊筹资:1)在全国范围开卖计划生育彩票以及推行机器自动付款小额博采(可参照美国的方式),并将除福利彩票以外的所有其他现有彩票收入全部归入中央计划生育奖励基金。计划生育是基本国策,人口控制是百年大计,所需资金筹措自然应优先于其他公共或社会事业。我认为,为了给人口控制这个百年大计的重大事业所需资金让路,所有能够由市场去运作的,就一律推到市场中去。比如足球和竞技体育,在“三农”、失业、贫困等各种社会问题如此困扰国家的情况下,国家没有道理再花纳税人的一分钱。2)在大多数税种上开征计划生育附加税。3)开征1‰的城镇居民房地产年税(美国为1%左右)。4)开设计划生育募捐基金,可以折合成人头标准,以表示募捐者的捐助帮助少生了几个孩子或几分之一个孩子,以增加捐款者的成就感;5)必要时发行计划生育公债;上述措施只要设计得当,每年筹集上千亿元应该没有问题。此项资金由中央政府统一筹措,根据各省情况进行分配,由各级人口与计划生育机构分级管理。

  就农村社会保障资金的支出看,短期内压力并不大。上述各种社会保障的支出分为现货支出与期货支出。养老保障金的支出大部分属于期货。比如对目前 30-40岁的夫妇,养老金的支出将是20-30年以后的事情,也就是在实现小康社会以后才需要较大规模的开支。医疗等三大保险本身是小概率事件,每年平摊的费用相对有限。另外,由于农村目前独生子女家庭孩子相对较小且比例也有限,从而短期内保障费用和减免费用总支出也将相对有限。因此,上述以社会保障减少二胎生育的措施基本上是以期货的方式来鼓励放弃二胎生育权。从而国家以此种方式推进的农村社会保障,其大头支出是在建成全面小康社会之后,也就是20年以后。而届时国家财力又大大增加了,由于少生育人均收入又相对大大提高了,支付负担就相对更加轻松。在人口和劳动力大量过剩的情况下,以小量的财政转移支付性投资换取放弃二胎而引发的日益增长的巨大社会剩余,是任何其他形式的投资都无法比拟的。另外,即便国家用一次性货币支付方式来奖励放弃计划内二胎,以每户3-5万计算,假定一半家庭接受,那么一年所需资金也不过1050-1750亿元。这笔钱虽非小数,但这就意味着每年用最多不到2%的GDP而减少了 350万的新增人口,这将是何等伟大的事业。

  6.以社会保障控制二胎的福利经济学分析

  在现有状况下所提出的对策措施,目的都是为了求得对某些现有状况有所改进,或者防止现状向不利的方向发展。改进措施大致可以分为五种类型:效率性改进、福利性改进(帕累托改进或卡尔多改进)、公正性改进、平等性改进、安全性改进。大多数对策措施一般都有一定的侧重,但有些对策措施则可以具有多方面综合改进的功能。比如,农村土地包产到户,就同时具有效率性改进、福利性改进、安全性改进、公正性改进和平等性改进(就某些方面而言)的综合效果。本文提出的以控制二胎为核心的来推进农村社会保障的对策,也是力图对农村社会经济问题进行综合治理。我认为,不论是从短期、中期还是长期的角度看,这一综合对策措施的收效都是多方面的。而且,越是从长远的视野看,这项综合措施的意义就越是重大,收效就更是巨大。

  6.1.“无中生有”的农村社保资金来源与逆人口投资的收益

  根据前面的分析,在人均GDP按2%环比速度增长的情况下,少生一个计划内二胎,就等于全社会在70年内节余了至少250万元的GDP。由此计算,如果今年少生200万计划内二胎,那么70年内就节约了5万亿的GDP。平均到现有总量人口上,相当于人均将近4000元。如果从今年起70年内,每年少生200万计划内二胎,则70年总共直接少生了1.4亿(加上他们未出生的儿孙,实际上等于70年内总共少生了2亿多),也就等于直接节约了175万亿的GDP,平均到现有人口数量上就相当于人均13万元,平均到现有农业人口头上人均就可多达20万元。社会保障资金就自然生出来了!因此,从长期的视角看问题,按本文提出的措施来推进农村社会保障,实际上等于是放弃计划内二胎的农民自己在为自己提供社会保障资金,不仅如此,这些独女户家庭实际上同时还在为其他农村家庭提供社会保障资金,为农村全体人口提供额外的增量收入,为全体中国人口提供人均GDP的相对快速增长。

  笔者将这种社会保障金来源的算术称作“无中生有”,即少生二胎这种“无”自然就产生出社会保障资金的“有”。这种“有”,与从现有劳动者身上提取再返还到劳动者身上的再分配,是完全不同的。因此,按本文的措施,所有用在农村社会保障方面的短期内的政府支出,实际上都是一种诱发性的投资行为,由于这种投资的直接目的是控制人口的增长,笔者将其称之为“逆人口投资”,这种投资的目的就是为了抵消由于人口增长而导致将人均GDP部分吞噬掉的人口投资。这种投资在表现形式上是由政府支出,由全体纳税人承担的,但是,由于少生人口而形成的长期巨大收益,将会以倍数的方式回报给所有的纳税人和全体中国人。而且,这种逆人口投资,其实本质上是一种转移支付,并非沉淀性投资,因此,除了比例微不足道的一点运作成本外,它其实本质上又是一种零投资。以这种转移支付性的零投资就可以大大地遏制人口增长,并由此形成长期多方面的回报,其对中国人民福利改进的效果显然是任何其他投资方案都无法比拟的。

  6.2.“一举多得”的社会经济效果

  仔细体会以上的二胎控制与农村社会保障相结合的具体措施,应该可以意识到,这是一项将人口控制、农村社会保障与建设全面小康社会有机统一起来的 “三位一体”的综合改进措施,是将帕累托改进与卡尔多改进结合运用的措施,是将效率改进、福利改进、平等改进、安全改进、环境生态改进等综统一为一体的综合改进配套措施。它是加速缓解“三农”问题之最基础性也是最综合的措施,它所形成的“三农”和全社会的受益是多方面的,它是兼具、中、长期效果的系统性措施,它对中国社会、经济、教育、就业、环境的健康发展或改善的意义是深远的。具体说来,该综合措施至少具有以下方面的作用。

  1)加速农村人均收入水平的提高。核心家庭放弃计划内二胎,就等于该家庭人均收入相对提高了33%。同时,各种奖励和保障措施又实际上等于增加了受益家庭的收入。从长远看,由于减少了人口增长,农村家庭平均经济规模经济也将相应加速提高。

  2)加速农村人口教育水平的提高。由于更多的家庭放弃了二胎生育,就使家庭和国家节约了对第二孩的教育投资,从而就可以加大对农村孩子的平均义务教育投入,也就可以减少以至杜绝义务教育期间失学现象,并可加速推进农村普及中等教育的进程。

  3)减少甚至基本杜绝新的性别比问题。由于奖励和社会保障措施可使大量育龄夫妇主动放弃计划内二胎,采取非法手段以保证二胎生男孩的情况将大大减少甚至可能基本消失。并且,由于两女孩户享有儿女双全之家庭所没有养老等各种保障,原本力图寻求以非法手段保证生育男孩的冒险者就会更多地采取顺其自然的态度。

  4)减少新增贫困。养老奖励扶助金有效地保证了老年人的基本生活需求,而三大保险又可以减少农村因各种意外风险而返贫的现象,同时也就可减少需要政府以其他渠道进行贫困扶持的人口比例。

  5)加速人口城镇化速度。由于农村生育率进一步下降,就等于相对提高了城镇人口比例,并在等量农村劳动力转移的情况下使得城镇化速度进一步相对加快。

  6)减少未来就业压力。按目前预计在30年后达到人口峰值的预测,如果每年减少200万二胎生育,就相当于这30年进一步控制二胎的努力为未来减少了6000万新增人口的就业压力,这可是比加拿大和澳大利亚两国总人口还要多的数量。

  7)促进城乡平等进程。社会保障是促进社会公平的重要制度,也是促进城乡平等进程的最重要的措施之一。并且,由于转移支付在一定时期内将使资金从城市流向农村、从东部流向西部以及从富裕地区流向落后地区,有助于加速缩小城乡、东西部和贫富地区的差距。

  8)促进农村妇女的就业参与。少生养一个孩子有助于提高农村妇女劳动力市场的平均参与深度,有利于增加家收入并提高妇女的经济地位。

  9)促进社会和谐。由以往偏重行政措施和经济惩罚转向奖惩并重,就使“三个代表”的理念在计划生育事业上得到了更加具体的体现,该措施将消除一孩家庭的后顾之忧,减少生育控制上的干群冲突,密切政府与群众的关系。

  10)减缓环境退化的压力。减少了农村的人口增量,就减少了为生存发展而导致的对生态环境的进一步破坏。退耕还林还草的进度就可以相对加快,沙漠化速度就可以相对减缓并早日得到有效的遏制。部分地区地下水位下降的趋势就可以相对减缓,生态环境保护区就可以相对加速扩大。江河湖泊水资源的过度提取和污染就可以得到相对缓解,水资源调度成本和污染治理成本也可以相对减少。空气污染也会由于人口减缓增长和早日转入负增长而相对缓解。此外,将峰值人口减少数千万甚至一个亿,就可以少盖数千万农村房舍,这将大大减少建房用地,有助于减缓耕地减少的速度,减少因建房的需求而形成的对木材等资源的压力。

  总之,加速减少人口增长和最终减少人口总量对中国的好处可以说是无穷无尽的,是百利无一害。因此,那些反对派学者指责主张减少生育和减少人口的学者实际上是认为“少生就是一切”也不是完全没有道理的。只不过,我认为他们在阅读了本文后所唯一需要纠正的,就是应该将这个“少生就是一切”也变成他们自己的信条。只有这样,才能表明他们自己并没有丧失一个从事人口学研究的学者所应具有的起码的智慧,也没有丧失作为大多数普通百姓在中国人口数量问题上已经具有的起码的智慧。

  行文至此,我已多次在脑海里翻腾过150多年前一个叫约翰.斯图尔特.穆勒的古典经济学者和哲人关于人口问题的一段美文,那么,就让我摘录这段美文来作为结尾吧:

  “毫无疑问,倘若生活之技能得以持续改善并且资本不断增长,那么,对于全世界、甚至那些古老的国家而言,都仍然存在着容纳巨大人口增量的空间。不过,即便这种增长是无害的,我也不得不坦言,我本人认为很少有理由将其视为一种值得追求的理想。对目前所有人口众多的国家来说,使人们可以在最大程度上获得经济合作与社会交往所需要的人口密度,已经足够了。尽管一个国家的人口享有着充裕的衣食供应,但它仍可能是太拥挤了。对于人来说,无法摆脱无时不与其同类形影不离的状态,显然不是什么好事。一个隐居之可能被根除的世界,实在是一个十分糟糕的境地。隐居,就其经常独处这一意义而言,对于任何深刻的思考和深邃品质的培养,都是必不可少的。而与自然之壮丽景观容为一体的独处,是思想与抱负的源泉。而这,不仅对个人大有裨益,也是使社会避免陷入病态所不可或缺的。当放眼望去,如果所看到的是这样的景象:大自然的生物全然失去其自发的生机;每一块可为人类提供食物的土地都被耕种;每一处原本繁花似锦的处女地或天然草原都被耕犁翻卷;每一种野生的陆地动物和鸟类都因人类的食物需要而几乎绝迹;每一桩树篱或闲余的树木都被连根拔掉;总之,在发展农业的名义下,未被作为野草铲除的天然花草和灌木丛林已难得一见,这样的世界又怎能使人们有多少愉悦的心情呢?如果财富和人口的无限增长仅仅是为了能够供养一个更大的但并非过得更好和更幸福的人群,却由此使葬送的东西导致地球失去了大部分令人愉悦的景致,那么,为了我们的子孙后代,我真诚地希望,远在被必然性所强迫停滞增长之前,人类倒不如以稳定的状态为满足”。

  说明:为了保持对论题论述的相对完整性,本文与在第八次全国人口科学研讨会提交的论文《进一步降低生育率的必要性和可能性》以及已发表的论文的在内容上有不少重复。另外也根据新情况对以前提出过的对策措施建议进行了部分调整。

  参考文献:

  李建新:《中国人口:不能以追求减少人口数量为目标》,《人口研究》,2002年第4期。

  李建新:《文明冲突中的中国文明与人口:亨廷顿的文明冲突论及人口要素》,《人口研究》,2004年第1期。

  曾毅:《继续提倡晚育,逐步适当放宽二孩政策:访曾毅教授》,《中国人口科学》,2004年第1期。

  蔡昉:《人口转变、人口红利与经济可持续性:兼论就业如何促进经济增长》,《人口研究》,2004年第2期。

  胡鞍钢:《中国人口发展报告:社会与发展----中国社会发展地区差异研究》,1999年。

  穆光宗:《独生子女家庭本质上是风险家庭》,《人口研究》,2004年第1期。

  Jolly, Carole L. & Torrey, Babara Boyle(Eds.).(1993), Population and Land Use in Developing countries, Report of a Workshop. National Academy Press, Washingto9n, D.C.: pp84-86

  注:此文为在人口会议上提交的研究报告,未曾单独发表。但其中有些内容在发表的论文中已经采用过。

《登黄鹤楼有感》

几度焚毁几度修,天下心系黄鹤楼。
千古悠悠多少事,百念纷纷总关愁。
大江东去沙难尽,黄鹤西飞少回头。
何日金光遍故里?芳草更绿鹦鹉洲!

《寻梦》

几度相会梦幻中, 月下孤影思飞鸿。
茫茫人海多过客, 芸芸众生少仙鹏。
有君此心无憾事, 没君终身百念空。
又向天涯海角望, 无限愁肠大江东。

《叹中国人》

何处寻找大智慧? 国人善养小心机。
小小心思小聪明, 小小心胸小肚脐。
小小算盘小小珠, 小小眼球小小鼻。
遍地都是小家气, 西皮流水不成溪。

《千古人生且笑谈》

地北天南一线牵,千古人生且笑谈。
偶绽奇花三五朵,或流芬芳在人间。

点击进入
李小平专栏

Saturday, April 14, 2007

思想界炮轰文学界:当代中国文学脱离现实

思想界炮轰文学界:当代中国文学脱离现实
http://www.sina.com.cn 2006年05月15日12:21 南都周刊
思想界炮轰文学界:当代中国文学脱离现实

思想界炮轰文学界
点击此处查看全部新闻图片


思想界炮轰文学界:当代中国文学脱离现实

傅国涌,学者,现居杭州


  记者 黄兆晖 实习生 陈坚盈

  “我国近年大量文学作品,已堕入了用尽心机出风头的陷阱。有的虚构 ‘痞子雷锋’,胁肩谄笑;有的大摆地摊,向洋人兜售假国粹;有的为‘我大汉’‘我大唐’‘我大清’涂脂抹粉,与太监比奴性;有的故作‘先锋’‘前卫’状,似艰深文浅陋;有的用“下半身”写作,贩卖无耻,所有下三滥的伎俩都使出来了。”

  近日,在武汉举行的胡发云作品《如焉@sars.come》(参见本刊3月10日报道)的学术研讨会上,丁东、赵诚、崔卫平、傅国涌、邓晓芒、李工真、程亚林、赵林等众多思想学术界的学者向当下中国文学开炮。他们认为,中国作家已经日益丧失思考的能力和表达的勇气,丧失了对现实生活的敏感和对人性的关怀,文学已经逐渐沦落为与大多数人生存状态无关的“小圈子游戏”。

  青年学者傅国涌说:“我对当代文学整体评价很低,基本上持否定态度。”

  思想学者丁东问:“现在还有值得我们尊敬的作家吗?”

  历史学者李工真更直截了当指出:“在当今中国文坛上,众多的作家,或者是为了商业利益,或者是为了政治利益而投机”。

  这些观点或许有其偏颇之处,或许不够细致和严谨,可是他们提出的命题确实值得深思,当代文学作品整体质量的贫弱确是不争的事实。在此,我们也欢迎文学界人士能对此做出回应,我们的目的当然是为了在不远的将来能够看到更有分量更令人信服的当代文学作品。

  中国文学脱离现实?

  文学作品与中国人的现实生存的脱节是与会学者们的一个基本判断,也是他们最为痛心之处,他们认为当下的中国作家已经失去了触摸有血有肉的现实生活的能力和勇气。“小说家最擅长的是描写,这是小说家比历史学家和哲学家要强的地方,可在当下的文学作品中,我们看不到我们每天都要面对的真实的生存图景。”

  青年学者傅国涌认为,任何文学,不管是什么形式的作品,首先都是特定时代、特定环境或者语境的产物,因此我们不能离开这个特定的语境去评价文学作品。“我关心的是在这块土地上,吃五谷杂粮长大的小说家中,还有没有人愿意与这块土地共命运,还有没有人愿意关注当下,并承担一个作家应该承担的那一部分。”傅国涌的话代表了学者们对中国文学的期待。

  傅国涌认为,近年来小说领域没有产生什么震撼人心的大作品,也没有诞生足以令我们怀抱敬意的作家;普遍的现象则是文学为市场服务,走取悦、献媚市场的路子,回避现实,避免碰钉子。他认为,这同样缺乏文学自身的独立性,与依附政治一样,依附市场的文学也没有尊严可言。“是的,无论如何我们首先要过日子,人生本来也需要一点娱乐,现在的问题首先是这个只允许娱乐的民族早已娱乐过度,其次是娱乐之外能还做点什么呢?作为小说家,难道只能去选择那些娱乐自己、娱乐别人的题目吗?只能玩玩文字上的才气过日子吗?假如这样,小说的存在连金庸当初在香港写武侠小说的那种意义都比不上了。小说为了市场的需要而存在,我想起20世纪早期历史上的鸳鸯蝴蝶派,以张恨水为例,他的小说够市场、够市民化、够畅销,但骨子里还是有人性、有善恶,有褒贬,有净化世道人心的功能。今天的大多数小说连这样最简单的功能也没有了。”

  对于以上这些情形,他提出质问:责任难道仅仅是环境吗?活着的个体生命是干什么的?活着的敲键盘的个体生命难道注定是毫无作为的吗?他的回答是——“答案是否定的。”他还追问:“前苏联产生了《静静的顿河》、《日瓦戈医生》,产生了索尔仁尼琴、布罗茨基……半个多世纪过去了,我们留下了什么?我们拥有什么?”

  傅国涌理想中的中国文学应该是:“关注我们共同面对的当下现实,关注人的命运、人与他栖身的大环境即这个时代的冲突,苦难与悲剧、欢欣与追求、梦想与挣扎……”由此出发他认为,“作者的技巧、天赋、文字能力是否达到了最高层次是第二位的,第一位的就是文学还是要有底线的关怀,即对现存社会、对人性、对自身命运的忧虑、关切与批判。”

  思想学者丁东对当下中国文学的基本看法是:中国主流文学界对当下公共领域的事务缺少关怀,很少有作家能够直面中国社会的突出矛盾。当有人谈到“当下的文学写作缺乏思想”时,丁东的回答是:“存在这个问题。但最可怕的还不只是文学缺乏思想,而是文学缺乏良知。”

  丁东还对那些成名于上世纪八十年代而在当下的文学格局中最醒目的先锋作家们进行了批评。他承认这些先锋作家曾经给中国文学带来了一些新的元素,而现在他们受到读者和市场的追捧,在国外也受到重视,实际上已经成为新的主流。“我不否认他们的才气。具体到每一个作家而言,都有自己的追求。但他们往往自我感觉太好。我看过几本风靡一时的先锋作品,没有从中得到起码的感动。我不能欺骗自己的感受。据说一些专业的评论家也是硬着头皮去阅读。我个人的偏好,还是希望从作品体察到历史的使命感,社会进步的责任感。这才是高贵的文学品质。比如胡发云的《如焉》,我是真共鸣,真感动。可惜通常的先锋作家名单里并没有他。”

  丁东承认,一些作家有底层生活体验,描写了当今底层的百姓生活,从作品中可以感受到底层百姓的疼痛,这是当代文学中有活力的部分。可惜这类作品多停留于现象层面,缺少对现象背后更深层的挖掘。

  学者们总结说,在脱离当下中国真实的生存境遇的同时,文学呈现出两种倾向:一是所谓的“纯文学”日益圈子化,他们强调文辞优美和写作技巧,阅读这类的文学成为一种专业的行为,它们发表在专业的文学杂志上,主要供文学界的专业学者研究,形成一种内部循环;二是大范围的文学作品投身商业,以市场的需要为最大的动力,市场也成为评价其成败的主要标准。当然,严肃作家们也渐渐主动投身市场,典型的例子就是余华的《兄弟》,这位前先锋作家的长篇新作“从屁股开始,以处女膜结束”,再凭借其昔日显赫的文学声誉,赚了个盆满钵满。

  学者们特别指出,当下的中国处于一个急剧的转型期,公共生活的很多层面都非常分裂,包含极端的对立和巨大的冲突,这种冲突是文学最好的源泉,是优秀的文学作品诞生的一个契机,也是对当代中国作家的一个新的考验;作家如果回避了这些矛盾和冲突,事实上就是自动丧失了自身存在的价值和意义。

  中国文学缺乏思想?

  “缺乏思想”是与会的许多专家学者对当下中国文学的另一个基本评价:在当下的文学作品中看不到对当下中国人生存境域的思考,看不到对人生意义的思考,更看不到对终极价值的思考。作家们似乎已经集体降级为故事能手,喋喋不休止地炮制出迎合低级和初级欲望的故事,他们满足于一种脱离真实生存经验、对生活缺乏思考的伪现实主义;而在脱离现实、缺乏思想界的同时,当下的文学写作争先恐后地投入商业的怀抱,把肉麻当有趣则是作家们投身市场的新招数。

  为什么会缺乏思想呢?老学者袁伟时曾经总结:“文学界里有三大缺少,缺少什么呢?一个是现代政治学的常识、基本理念他们都不知道;也缺少现代法学的常识;还缺少中外历史的基本知识。结果一说思想解放,就往男女关系上解放”。哲学学者赵林用“短平快”、“麦当劳化”、“好莱坞化”来形容对当下中国文学的印象,中国文学已经成为看过即忘的“一次性消费品”。他认为这对于解构旧的意识形态具有相当的意义,而现在似乎走过了头,思想和灵魂似乎都已经“不合时宜”。而与会专家指出,更重要的还是作家们有意无意地远离现实生存,这样,有效的思考也就失去了生长的土壤;与此同时,作家们已经日益失去独立思考的能力和勇气,而听任自己陷入舒适的生活,把文学当做获取世俗利益的安全通道。 

  哲学学者邓晓芒认为,除了对社会历史形态的批判,中国作家缺乏终极关怀和思考,缺乏对人性深层次的思考。他举例说,肖洛霍夫写《静静的顿河》,得了斯大林文学奖,也有意识形态,而且在当时也可能打了点“擦边球”,但在今天看来仍然是不朽的作品。因为“一部作品能够做到这一步就不在乎那些外在的东西,那些东西只是一些临时的衣装,里面应当有一个民族的血肉和灵魂,中国文学里面缺的就是这种精神。”他认为上世纪90年代中国文学有一个辉煌的高峰,有好多部作品里面都表达了一些永恒的东西,但是进入21世纪,则失去了这些精神力量。“恐怕是因为中国文人天生有一种经不起诱惑的本质”。

  邓晓芒还特别指出,不少成名的作家推出新作,并不是有一些新的思考,也不是有强烈的表达冲动,而要证明自己没有“江郎才尽”,维持自己的名声地位。就这一点,新近推出长篇小说《兄弟》上下卷的作家余华,几乎受到所有与会学者的激烈批评。学者们认为,余华的《兄弟》是作家脱离生存现实,缺乏独立思考能力的典型范例,这部号称“十年磨一剑”的作品,体现了作家以降低作品的精神境界为代价,以低俗化的方式走进市场。

  学者程亚林认为,中国作家缺少一种对终极意义的“强迫症”,相比之下,俄罗斯和东欧的文学就有这样的“强迫症”,总是有人在思考那样一些关于人性的深层次的问题。“要培养出一种比较高贵的东西,就要有一种内在的精神强迫力;如果没有这种劲头,尤其是文化精英还谈什么希望。文学最重要的还是需要有一种胸怀,一种眼光。”

  有人提出,作家关注社会事务,表达思想理念,就不够纯文学。对于这个观点,学者丁东回应说,“要看表达什么思想”。他分析说,从上世纪50年代,到改革开放前,中国大陆文学作品表达的政治的理念,往往是国家事先规定了的。所谓领导出思想,作家出技巧,使文学沦为政治宣传工具。八十年代,提倡回到文学本身,一些作家不再为政治而艺术,回到为艺术而艺术,这是一种解放。另一些作家,在作品中不是表达别人规定的思想,而是表达自己的独立思想,这也是一种解放。因此“文学可以载道,也可以不载道,各有千秋。载道的文学并非都不好,而要看载的是什么道,用什么方式载道。古今中外许多伟大的作品,都以深邃的思想和深刻的社会意义见长。认为纯文学必定与思想性和社会性相抵触,这种文学观起码是片面的”。

  专家们还从世界文学史的角度进行分析:20世纪以来伟大的小说,无一都是与诞生该作品的环境血肉相联,从中体现作家们对时代的独立思考和思想立场。

  而对于在文学作品中表达思想,文学学者昌切提醒道:“我个人的看法就是表达思想比较好的文学,一定是富有艺术魅力的文学作品。如果失去了这种魅力,思想可以用其他方式表达,比如可以用长篇大论的方式表达,这样可能表达得更清楚。文学之所以跟别的东西表达不同,就是它给读者们留下了相当大的阐释空间,即使是在表达思想时。”

  思想界与文学界渐行渐远

  女学者崔卫平介绍,包括思想界和文学界在内的各个人文学科携手并进,是中国先进文化的一个传统,而这种局面已经不复存在。“关心新的思想、关心社会进步、具有一种铁肩担道义的情怀,可以说是近百年中国知识分子包括中国作家的一个传统,这个传统一直到上世纪八十年代仍然保持着比较强有力的势头,有着鲜明的整体形象,在这个整体内部各个领域之间、各个行当之间也是保持比较多的交流,有一些共同的话题,有一些共同关心的一些事情。而进入90年代以后,这种局面不复存在。知识分子或者作家在自己的专业领域里更加深入、更加专业,这本来是一件好事情。但是这种局面的形成主要是由不正常的原因造成的。所以在这种情况下,在专业化的同时,许多人渐渐地对我们的关心社会、关注新思想的传统变得很淡漠。”

  “我有很多文学界的老朋友,我觉得从八十年代过来的老朋友当中继续关心思想学术界话题的比较少。”崔卫平遗憾地说,思想学术界从九十年代中期到现在十年的时间已经取得了一个相当长足的发展,一些话题的进展起码可以说超过了从1949年到 1989年的全部成果,而“持续关注这种东西的作家少之又少。”

  思想学者丁东认为,无论是五四时代,还是上世纪80年代,当时最优秀的作品本身就体现了时代的思想脉动。比如鲁迅发表《阿Q正传》的时候,对国民性的反思,触及到社会的神经中枢,本身既是文学,又是最重要的思想成果。上世纪80年代也是如此,新思想的火花,最先在小说、报告文学甚至诗歌里闪现,这些作品人们争相传阅,影响大大超出文学圈,甚至轰动全社会。这是一个好传统,起码也是文学曾经有过的一段辉煌。

  丁东还介绍,他原来是学历史的,八十年代当过学术杂志的文学理论编辑,也写过一些文学批评文章。到了九十年代,他发觉继续关注当下的文学创作有些无聊。因为“研究对象的精神高度,制约着研究者的精神高度。如果文学创作普遍平庸,普遍苍白,评论家投放再多的精力也没有意义。所以,我的兴趣就回到了历史,转向了民间思想史方面的研究。后来我发觉,八十年代关注当代文学,九十年代告别了这个领域,转向思想文化研究,或者即使还在研究文学,也离开文本研究,而转向人本研究的,不是我一个人,而是一批人,老年、中年、青年都有。那天遇到中山大学中文系的一位朋友。她是最早的中国现代文学博士之一,现在还在教现当代文学。她也说自己“不务正业,好多年不看文学杂志了”。

  思想学者赵诚也有类似的想法,他对当下的中国文学已经失去了阅读期待,因为从这些文学作品中找不到他所关注的一些思想问题,也看不到作家们对于这块土地的观察和思考,因此“无法产生共鸣”。

  批评已经沦为广告?

  与文学写作相对应的是文学批评,与会专家们认为文学写作与文学批评的关系已经陷入某种怪圈之中,难以自拔。近年以来,对当代文学批评的批评不绝于耳——从批评家的眼光能力到批评家的职业操守。

  文学批评家刘川鄂介绍,就文学学科而言,最大的问题是——学科建设对知识分子角色的改变——各专业领域的专家多了,学者多了,面向社会发言的知识分子少了。不少人把注意力集中在狭隘的专业领域,陷入团队,陷入课题,陷入与学术、学科有直接关系的活动,成天忙于可填在学科建设成果表格上的所谓纯学术。不关注现实,放弃社会批判责任,不对社会承担道义,不为人类净化良知。他们丧失了社会公共代表的角色,被学科体制收编。

  学者丁东认为当下的主流文学批评,已经成为文学产品市场运营的一个环节。一些批评家受制于作家、出版商和官方文化机构,他们的评论成为商业宣传推广的一部分,在这个过程中分吃一杯羹。还有一些文学理论批评活动属于学院派。他们的研究或者评论的直接目的,是获取学术荣誉和学术利益。一看这些文章和著作,就知道哪些是为换取博士、硕士学位而产生的,哪些是为评教授、副教授而撰写的,哪些是为了得到某级课题经费而炮制的。在这些文字里,看不到独立的批判、发现的眼光,更感受不到才情、智慧和洞见。“这两类情况,都是中国文学理论批评的悲哀,可惜在数量上,又占了绝对的大头”。

  专家们还指出文学批评已经日益模式化,失去了锐气和活力。青年学者王晓渔曾经总结,在今天,成为一个批评家的门槛几乎为零,只要不是文盲就可足够了。“批评家速成班”的初级班教程是三个“完美统一”:第一,感性和理性的完美统一;第二,形式和内容的完美统一;第三,思想性和艺术性的完美统一;中级班教程是两个“内在冲突”:第一,现实和想象的内在冲突;第二,美学和历史的内在冲突;高级班教程稍微难点,要多记一些关键词,比如内心、关怀、感动等等需要仰视才见的词语。只要把这些公式背好,哪怕你是文盲,跑到作品研讨会上侃侃而谈,依然会赢得众多掌声。

  “当文学批评家感慨精神沙化的时候,他却没有注意到,自己很有可能正是精神沙化的原因之一。”

  一些批评家受制于作家、出版商和官方文化机构,他们的评论成为商业宣传推广的一部分,在这个过程中分吃一杯羹。还有一些文学理论批评活动属于学院派。他们的研究或者评论的直接目的,是获取学术荣誉和学术利益。

傅国涌:当代主流文学是没有希望的
http://www.sina.com.cn 2006年05月15日12:21 南都周刊
傅国涌:当代主流文学是没有希望的

思想界炮轰文学界
点击此处查看全部新闻图片


傅国涌:当代主流文学是没有希望的

傅国涌,学者,现居杭州


  我对当代文学整体评价很低

  南都周刊:请你谈一下对当下中国文学的评价。当下中国文学最主要的问题是什么?

  傅国涌:我对当代文学整体评价很低,基本上持否定态度。

  抛开思想、政治问题不讲,作为作家,对社会要有最起码的独立看法和判断,而这个看法和判断是必须从生活中得到的,不能凭空制造,它们都是来源于生活,哪怕是神话和科幻小说,作家塑造得最成功的人物一定跟生活有所对应,才会引起读者的共鸣。而现在多数作家的作品都有一个背离生活的问题,有些作家只凭自己的才气、技巧而弄出一个作品,圈子内就觉得很了不起,并津津乐道。

  南都周刊:有人认为写作是非常个人的事,你怎么看这个观点?

  傅国涌:小说写什么?怎么写?这都是小说家自己的事,没有错,小说家要表达内心的真实,没有错,但如果一个小说家笔下的世界和我们生存的这个世界毫无关联,仅仅是一种美轮美奂的文字游戏,好玩的故事,酒足饭饱后的娱乐,一种与单纯的
电子游戏一般的娱乐,那真的还不如看蚂蚁打架。当代那些盛名显赫的作家,往往是玩弄文字游戏的高手,贾平凹、莫言、毕飞宇、王安忆等全是如此,余华、苏童等是故事高手……除了文字和故事,一片虚无,说不好听的就是“金玉其外,败絮其中”。他们功成名就,以小说为获得现世利益最大化的媒介,除此之外,他们的小说与我们这个世界没有多大关系。

  南都周刊:还有人认为“写什么并不重要,怎么写才是最重要的”,强调文学的艺术性。

  傅国涌:为艺术而艺术当然也可以是一种选择,但是世上有完全超越于生活之外的艺术吗?艺术是以生活为土壤长出的一朵花,在生活这片土壤之外的艺术会是一朵什么花呢?

  南都周刊:不少学者指出,当下文学缺乏思想,文学界与思想界渐行渐远,你怎么看这个问题?

  傅国涌:这是一个很严重的问题,根本还在于文学失去了现实生活的源泉,也失去了直面生活的勇气,变成装饰精致的
客厅、书房里个别文人自我欣赏和部分休闲族消遣的东西,简单地说,就是自我阉割,自行切断了与活的当下社会的联系,把文学从这块土地上拔了出来,飘在空中。

  那种余华式的文学太奢侈了

  南都周刊:我们的文学曾经在相当长的时间内成为政治的传声筒,因此一些专家提出文学关心社会政治,直接表达思想理念,就不够纯文学,你怎么看?

  傅国涌:我认为在思想与文学这个关系上我们必须清醒认识到,在一个开放的文明的社会,比如说我们平常说的发达国家,类似于美国这样的国家或者英国这样的社会里,文学可以完全娱乐化、可以好莱坞化、可以哈利波特化,可以完全跟思想没有关系,因为普通人们的生活过得非常自由,但是在一个半封闭、半开放的社会,或者在一个前现代、前文明的社会里面,在一个还没有最终迈入现代文明门槛的社会里谈文学的纯粹性,谈论超越于普通人生活之上的文学,那种高超的文学,那种余华式的文学太奢侈了,它也有可能是好的文学,但至少是太奢侈了。

  南都周刊:在远离现实生活和社会政治的同时,不少作家争先恐后投入商业的怀抱,你怎么看这个现象?在文学领域也出现了一些非常时髦的名词,美女作家、80后等等。

  傅国涌:现在市场很大的“80后”少年写作还没起步就被商业性捧杀了,所谓“80后”、“90后”都是些可怕的商业概念,没有人生哪里来的文学?如果鲁迅在三味书屋就去写小说、发表作品,我们能想象是什么样子吗?我想,这是不能想象的。

  南都周刊:你认为当下中国文学这种局面的原因何在?

  傅国涌:原因比较复杂,这是一个综合性的原因。但是,归根到底作为作家这个特定角色缺乏自己应该承担的这部分,是一个逃脱不了的原因,这就牵扯到作家故意回避现实的问题,有很多作家干脆把文学作为追求利益最大化的工具,在这样的趋势下,对现实和精神层面的关注就在他们内心的漏斗里首先给漏掉了。

  南都周刊:与市场化、通俗化相对应的是文学的边缘化,文学似乎成了极小众人关心的事,你怎么看这个情况?

  傅国涌:我想说,文学是属于大多数人的,是属于所有普通人的,文学不能圈子化,不能成为极少数、极个别的文学专业人士三五个人、三五十人、三五百人、乃至三五千人互相赏玩的对象,它还是要还给普通大众,还给所有人,或者说还给所有汉语读者,我觉得这是文学的根基所在,也是文学生命的源泉。

  南都周刊:余华的《兄弟》是近日最受关注的长篇小说,你感觉如何?余华《兄弟》似乎形成了一个现象,你怎么看这个现象?

  傅国涌:我第一次读到余华的《兄弟》是不久前,偶尔买了一本《收获》,一读之下,惊讶地发现基本语言都不过关,粗糙、生硬,而且并无什么个人风格。语言不行,这对一个小说家是最大的致命伤。过不了语言关,剩下的就只有胡编乱造的故事,编造吸引眼球的荒诞不真实的东西,如此一来,就把小说降低到了广告的水准。说穿了,充其量只有一点对生活的印象,骗骗少男少女,从而获得“四子登科”:流水般的银子、文坛上的位子、西湖边官家给的房子、当然还有花花绿绿的日子。

  批评家跟作家有合谋的嫌疑

  南都周刊:那么,你如何看待当下的文学批评,他们在对当下文学状况形成过程中起到什么作用?

  傅国涌:文学批评的缺失在目前的情况下可以分为两个层面看,一方面,现在很大一部分批评家跟作家有合谋的倾向或者说嫌疑,他们彼此之间因为千丝万缕的利益关系而结成同盟,这就很难使独立批评成为可能。另一方面,现在很多批评家完全把文学批评降低到一种职业、一种谋生的饭碗,把批评降低到谋生的层次,而不是把批评当做一种有责任感的事业,因此,我们经常看到,一些批评家喝着咖啡、住在漂亮的房子里,跟社会现实的苦难完全脱离关系,就文字、文本、理论,写一些无关痛痒、不着边际的文章,当今的文学界可以说是批评家缺位。还有一点也是我们不能不注意到的,就是所谓的专业批评家跟读者对一个文学作品的看法往往天差地别,这是因为批评家跟作家搞圈子化、将文学带入专业的狭隘的胡同,他们自我赏玩,相互捧场,比如花钱开作品研讨会,把文学当做自我吹嘘的东西,有些不符合他们游戏规则的作品就被否定掉了。如果这种现状继续下去,当代主流文学是没有什么希望的。

  《南都周刊》(未经许可,不得转载、摘编)




文学界反击思想界:不懂就别瞎说
http://www.sina.com.cn 2006年05月28日01:28 南都周刊
文学界反击思想界:不懂就别瞎说

文学界反击思想界:不懂就别瞎说
点击此处查看全部新闻图片


文学界反击思想界:不懂就别瞎说

文学界反击思想界:不懂就别瞎说


  专题采写:记者 黄兆晖 实习生 陈坚盈

  日前,本报刊发了《思想界炮轰文学界——当代中国文学脱离现实,缺乏思想?》的报道,学者丁东、赵诚、崔卫平、傅国涌等指责中国作家已经日益丧失思考的能力和表达的勇气,丧失了对现实生活的敏感和对人性的关怀,文学已经逐渐沦落为与大多数人生存状态无关的“小圈子游戏”(见5月12日《南都周刊》)。

CBD核心 原铜别墅 易郡新北京四合院
韩国新女装年利近百万 1000元开店做老板(图)


  报道刊出后,在文学界引起了相当强烈的反应,作家、诗人、文学批评家以及文学杂志的编辑纷纷站出来回应思想界的指责。大部分文学界人士都认为,思想界关于中国文学的评价是片面的:他们通过十分有限的文学阅读就轻率地做出了判断。

  思想界的批评资格受质疑?

  思想界学者们的批评资格备受质疑。作家们认为这些学者不在文学现场,因此发表的意见是“隔靴搔痒”。“学者们显然不太了解什么是文学的标准”。

  《天涯》杂志主编李少君说:“我怀疑这些思想界的人看了多少当代的小说,他们每年看小说的数量肯定没有专业评论家的多”。他强调,当前的中国文学的整体水平并不是余华等几个作家能代表的,《兄弟》的不成功并不能说明中国当代文学的不成功。“他们所说的主流作家只是80年代比较活跃的一群人,到了90年代活跃的作家不是他们。比如东西、李傻傻等人的小说没有进入他们的视野”。“从另一方面来说,也不能说这次思想界的发难完全没有意义,可以作为一个提醒的作用,促进一些作家的自我反省”。

  作家东西认为,不可否认,当代很多作品确实存在圈子化、脱离现实的问题,但同时还是有很多小说是切入当下生活的,比如韩少功的《马桥词典》、余华的《活着》、他自己的《后悔录》以及苏童的很多中短篇小说等。“切入当下现实生活对于一个作家的写作来说,是指现实对他有刺激,促使他产生思考,但作家写作时可以把作品的背景放在十年前或者是更久远的历史,而且作家可以运用各种写作技巧来进行表达,也就是说艺术地反映当下生活,这不影响他对现实生活的关注”。

  对于思想界的指责,女作家方方更尖锐地表示,其实,硬要去指责,彼此双方完全可以相互指责。因为倒也没见到几个学者有什么大良知大勇气直面现实或者承担点什么。所以居高临下地指责,只会让人看了好笑。再说,拿新闻界或出版界来与文学界相比,前者可能更应该指责。所以,我觉得仅仅指责是没有意思的,这并不是一个简单的问题。许多问题往深处一探讨就会说不下去。既然是思想家,思想的格局就应该更大一点。指责的对象更关键一点最好。当然,指责作家可能会比较方便,或许将指责作家当做放大炸弹的引线,如果这样,作家听听他们的说法也没什么不好。

  作家陈希我说,看了那些所谓思想界的思想家的话,让他很失望。“他们基本上讲的是老话。傅国涌意识到文学有问题是没错的,但是他说:‘作为作家,对社会要有最起码的独立看法和判断,而这个看法和判断是必须从生活中得到的,不能凭空制造,它们都是来源于生活,哪怕是神话和科幻小说,作家塑造得最成功的人物一定跟生活有所对应,才会引起读者的共鸣。’你看,‘从生活中得到’、‘来源于生活 ’,塑造人物,这完全是官方版文学理论的翻版嘛!请问,你说‘作为作家,对社会要有最起码的独立看法和判断’,你自己有‘独立看法判断’了吗?我想问,这些思想家真的有思想吗?中国真的有思想家吗?中国真的存在思想界吗?只要我们想想这些思想家是在什么样的教育体制下茁壮成长起来的,就明白他们为什么这么令人可悲了。我们很多所谓的作家,也是产生在这个体制中的。实际上,中国几千年来从来没有过真正的思想,至多只是民本思想、人道主义(鲁迅也只是生存主义的思想),靠民本思想、人道主义能够写作吗?简直昏庸。”

  诗人萧开愚认为,促动制度建设不一定非得通过文学作品,而只有制度建设才比较能够解决普遍的现实困难。这一点,作家好像可以更积极一点。但作家通过写作要突破的困难,是以特殊联系或影射普通的。

  每个作家都有自己的“现实”?

  关于文学与现实的关系,是这次争论的焦点之一,思想界的学者们指责当下中国文学与当下中国大部分人的生存无关。但作家们基本上拒绝了“用文学反映现实”。

  作家苏童认为,作家的写作与社会现实的关系是相互渗透的关系。一个作家的写作,想完全脱离社会现实是不可能的,只能说作家的个人角度不同,表达现实的方式不同而已,但是个人角度依赖的一定是现实基础,这是毫无疑问的,就算是《尤里西斯》这样的作品,也是和社会现实关联的。

  “有一点必须搞明白,文学表达的社会现实不是简单的‘社会信息’,如果他们所说的是指文学脱离‘社会信息’,那就大错特错了。对一个‘社会信息’的呈现并不一定就意味着把握住了社会现实,文学中表达的是更广大具有普遍人性意义的生活现实。”

  韩东认为:“现实在我看来只有一种,就是肉身感受到的一种现实。抽离个人经验的现实是抽象的现实,根本不存在,是一种谎言。文学可以现实,可以不现实。如果你是现实主义的,必须从个人经验出发,从个人的生存来切入,而不是从观念认识、思想高度来切入,不是站在知识分子的高度去感受到的。比如我的《扎根》,朱文的小说,狗子的《一个啤酒主义者的自白》,这肯定是现实,和为一群人树碑立传或表达自己的经验都一致,只不过这样的现实从80年代到现在,都被评价为狭隘、个人。一方面现实主义,一方面空洞、政治局委员的现实主义。”他还指出,非现实主义作品,在其他地方用力,也是成立的。文学、艺术的标准是唯一的,不过现实不能成为这个唯一的标准。

  女诗人王小妮的思考是:个人都逃不掉现实。我说过,生活不是诗,我们不能活反了,我们时刻被剧烈变异着的生活挤迫着,我能看到很多诗歌在今天都表述着这种挤迫的痛苦,当然,怎样使痛苦的表达更有力量,和诗歌的写作更直接,不是同一个层面的问题。

  作家还是不是社会的良心?

  有人认为现在的作家缺乏社会责任感,缺乏对社会发言的个人立场,缺乏良知和勇气,既背离了五四以及上个世纪八十年代的中国文学的传统,也与诸如托尔斯泰、加缪以及近来的苏珊·桑塔格等外国作家,既以自己的作品展现社会的变迁与丰富,又直接介入社会运动的作风相去甚远。

  谈到这个问题,作家们也有自己的说法。文学批评家贺绍俊认为,文学的多样化符合文学生态的需要,有些对社会直接发言、对社会现实进行直接干预,这体现一个公共知识分子的身份,这一点在当代文学作品中是比较突出的,不应该说不突出,在很多作品中,都可以看到作家鲜明的立场、对弱者的同情和对社会责任的承担。但在当今社会,并不是每一个作家都要做知识分子,因此作家不像思想家、社会学家、经济学家那样直截了当的发言是很正常的一个现象。因为文学作品用文学形象表达价值观,这文学形象跟直接发言还是有区别的。而且,文学也不单只有思想功能,文学的功能是多方面的。

  作家东西则表示,这关键要看我们的作家、诗人有没有号召力。“如果没有号召力,他想去介入社会运动也是没有意义的。这种以一种模式去衡量另一种模式的做法是不对的,我们应当同时看看我们现在所处的社会环境、我们的社会制度,看看我们的大众都在追求、关注些什么。”

  “因为以前有一段时间过于强调文学的教化功能,因此在八十年代末有人提出了文学的审美和娱乐功能。事实上,文学是多方面的,如果我们单纯强调某一功能的话,到最后我们什么也得不到,好小说包括了多方面的内容,它不仅有思想、跟现实有关系,而且具有审美和娱乐功能。因为一个作品想要‘载道’,它必须首先有人喜欢去阅读,它的‘载道’才有意义。”

  青年作家李师江承认现在大作家里确实没有几个“知识分子是社会的良心”这种人文理想主义的,洞察社会的关键点的能力也在削弱。倒是有无名作家更真切和有勇气,但没有人关注。“其实这里说的是批判现实主义的传统。我觉得对于中国这样的一个国家,这种传统必须保持,现在作家在这方面做得比较弱”。

  女诗人王小妮说,作为从70年代末到今天还在写作的人,勇气和良知都经历过各种不同的“考验”。曾经,来自于外在的多,现在,来自于内心的更多。有人期望的理性的直接的振臂一呼似的承担,我感觉我个人所经历的,主要是一个生者的承担,它一点儿也不轻松。这种承担在今天,比20年前更复杂更细微更深重。

  但她强调,社会承担,首先是个人良知的承担,而作为一个写作者,他的承担必然有他自己的表述方式。文学不可能具有记录性作品的直接力量。文学是缓慢和深潜着的,不是见到了A,就要直接对应着A去发生写作。

  “对于诗歌,要从上世纪70年代提起,不必回顾它曾经承担过什么,这个话题太重了。诗歌今天呈现了某种不承担,可能是时段性的潜意识逆反,但近年仍旧有如沈浩波的‘文楼村’等等诗歌的出现”。

  韩东进一步指出:托尔斯泰、苏珊·桑塔格、陀斯妥耶夫斯基等有一定的话语权,声名显赫者的声音才能被听见。我们现在的一些名流,还是过于势利、市侩,明哲保身,没有起在他的位置上应该起的作用。但还是有另外一部分人,他们本人不乐于发言,但沉默就是一种音调。

  这些思想家真的有思想吗?中国真的有思想家吗?

  中国真的存在思想界吗?

  只要我们想想这些思想家是在什么样的教育体制下茁壮成长起来的,

  就明白他们为什么这么令人可悲了。我们很多所谓的作家,也是产生在这个体制中的。

  实际上,中国几千年来从来没有过真正的思想,

  靠民本思想、人道主义能够写作吗?简直昏庸。

  时代在左右作家的思想面貌?

  对于学者们对当代文学缺乏思想的指责,作家苏童的回答是:“可以说,只要是文学作品,都是承载作家思想的,这思想包括一个作家的艺术审美、生活态度等综合因素。我比较赞成文以载道的说法,但是这里最关键的涉及到“怎样载”和对“道”的理解问题”。

  而以对社会问题的关注而闻名的女作家方方则说:“至少我读文学作品,不是冲着它的思想去读的,虽然他们中有些思想曾经影响过我。而在文学作品中,思想也不是直截了当说出来的。它更多是以一种发散的状态潜伏在人物命运、人际交往、日常琐事、生活细节、文字情绪等等之中。同样的文学作品,有的人能读出思想,也有人读不出来。有人读出这样的思想,也有人读出的恰与之相反。文学的最终意图也不是为了表达思想。所以,我觉得文学作品,可以有思想,也可以没什么思想”。

  一些学者提出,长久以来中国文学一直占据思想的前端,比如远到五四时期,近到20世纪80年代,而今天却缺失了。青年作家李师江对此的理解是:五四和八十年代是西学东渐的两个高潮时期,填补空白的,文学运动与思想运动结合紧密,所以看得清楚。当下作家思考这方面的确实少了,但是作家是有思想的,有时候他表达得晦涩,有时候他懒得表达,不如打打麻将把一些思想化解在闹磕中,很难看到热情高涨的场面。时代在左右作家的精神面貌。

  散文家祝勇认为,五四和上个世纪八十年代是一个特殊的时期,文学承载的社会功能很多。文学在那个时候不仅仅是文学,它还充当了舆论功能、社会学功能等,只有特殊的时代才能这样,那不是文学的常态。如今是一个媒体十分发达的年代,人们表达的渠道增多,这使文学回到了正常的状态,它区分出了文学不同的趋向,比如商业趋向、纯文学探索趋向等,每个作家都可以根据自己的方式来写作。五四时期多种功能杂糅在一起,从另一角度来看,反而伤害了文学本身。有些作品,在那个时期具有轰动的社会效应,但等到尘埃落定之后,却没有真正的文学价值。因此,文学不处于社会中心、处于寂寞的状态有时更能使作家写出高水平的作品,现在就有很多优秀的作品陆续在出现,但很多人大家都不知道。

  现在还轮不到批判市场?

  有些学者认为现在不少作家回避责任的同时,投入市场的怀抱,企图以金钱的法则篡改文学的标准。

  对于这个问题,李师江的看法是:现在的中国文化市场是个非常特殊的时期,理想的人文关怀在削弱,市场化和娱乐化的写作在勾引作家,而市场化同时也在拒绝一部分有坚持的人,趋利避害的原则作为潜在动力在改造作家。这就是我们所处的文化时代。我相信很多人不懂写作了,因为他不知道该坚持什么,方向感都蒙了。

  作家韩东对此问题也阐述了自己的见解:中国目前的阶段,市场是一种平衡因素。要在体制内讨生活,仍然可以讨,可以享受权力带来的方便和好处。市场的门槛只有金钱,只要能带来金钱就接受。这是它的优点,也是它的缺点。市场是一种无信念的力量,体制是一种力量,当体制能为市场带来利益,它们就合流。现在市场和体制基本上是互惠互利,二分天下的状态。

  “在目前中国还轮不到批判市场。如果有一天市场一统天下,像某些西方资本主义国家一样,比如在实际操作中,成为宪法或者其他法规所维护的一个顺理成章的东西,就需要一些力量与它抗衡,需要我们去分析和批判。在当下中国这种格局中,市场仍是进步的因素。”

  韩东还说,这是个人写作态度的选择。不论体制或市场,独立性至关重要,我一直没忘。成为市场或者体制俘虏的人,是同一种类型和想法的人。面对市场的时候,我明白,写书肯定要通过市场,但有一个限定:不能为市场而写。从构思到写作,完全是我个人的、独立的,不可能为了市场为了某个选题而写。写完之后,要让读者知道,与他们交流,这个时候不必抛开市场。

  他站在批判的角度更进一步指出,市场和权力有时合流,又有对抗,有些人一直如鱼得水。还有一些,包括搞纯文学的,发现体制的好处没有市场多,就开始向市场转型,在转型不成功的情况下,开始批判市场,说网络、市场很低级。其实这是一种不甘和气愤。

  作家韩东认为,

  如果要创作一部

  具有底层经验的不朽的

  文学作品,一定不能是

  自上而下的窥探,

  所谓“深入生活”,

  不是来自外界,

  而是来自既是底层

  本身又超越底层的这些人,

  创作出这样的作品是

  他们的使命。

  “底层写作”不应是一种高姿态

  去年以来,基本对文学远离现实生活特别是底层生活的反思,一些作家和批评家提出了“底层写作”的概念。在这次“思想界炮轰文学界”的事件中,“底层写作”作为关注现实生活的一个例证又被提出来,引起作家、诗人们的不同看法。

  作家们对“底层写作”可能带来的模式化保持了警惕。作家苏童说,关注“底层”,并不意味着作品一定要出现一个下岗工人,对底层的关注随个人的社会眼光而呈现的个人方式不一样。诗人王小妮认为,写到“底层”不一定就等同于剖析了社会现实,同样,描写了“内心”不等于脱离现实。要看这描写的内在包涵了什么。口号和标签的时代,拿诗歌当一杆枪,事实上它不是,它是血肉。

  一些作家提出写底层并不是好作品的保障。作家李师江的看法是:底层生活是现实,高层生活也是现实,关键在于能不能写出好作品、有没有看透人世的洞察力,有没有坚实的艺术立场。文学世界不需要“假悲悯”,不需要刻意写什么,只要你所写你必定是你所能感受的。

  女作家须一瓜强调比“底层”更重要的是“人”:“不管哪个阶层的人,我想首先都是人。有区别的是不同人物在不同的社会阶层、社会关系、文化背景下呈现的不同形态。但在具体矛盾中,灵肉的冲撞、人性的反应机制应该是一样的。一个优秀的作品不是它写了‘哪一层’,而是它写好了‘哪一层’里的人。”

  还有一种观点认为,“底层写作”不是一种自上而下的关怀,而是来自“底层”本身的孕育。作家韩东认为,如果要创作一部具有底层经验的不朽的文学作品,一定不能是自上而下的窥探,所谓“深入生活”,不是来自外界,而是来自既是底层本身又超越底层的这些人,创作出这样的作品是他们的使命。作家东西说:“我本身就是一个弱者,身处底层,我从我的内心出发,写具有现实意义的作品,这是我的写作方向。‘底层写作’不是喊口号,过分强调关注社会底层,就有点抬高自己的嫌疑。事实上,任何一个阶级,都是不会为另一个阶级说话的,如果某一群贵族化、精英化的人吃饱了饭,标榜‘底层文学’写作者去关注底层生活、写底层生存群体,那肯定是值得怀疑的。‘底层写作’,是只有真正身处底层、用自己的身体器官感受这个世界的人才能写出好作品”。

  青年学者、作家张念更质疑所谓的“底层写作”只是知识分子的一厢情愿,而不是无权无势者的声音。她认为在不同的权力系统中,底层只能是个相对的概念,一旦将底层叙事绝对化,成为作家们绝对的道德参数,不是作家的灾难,就会成为时代的灾难。“这是一元化的集权话语的自身裂变,底层底层,是道德表演的临时舞台,一边有人喊‘底层写作’,一边有人在搞‘地下电影’或者‘地下音乐’,严重的是地皮之下的存在,‘地下’生存才是真正的道德问题。无权无势者该怎么说话,无权无势能够说话吗?地下与地火具有相关性,而不是大学教授所津津乐道的代言形式——‘底层写作’。”

  于坚:是否要作家重新去“下放劳动”?

  在“中国文学”以外的汉语诗歌,

  一直在承担着文学的基本责任,

  就是在所谓“底层写作”上,诗歌也是一直在正常地进行着的,

  今天距离中国底层最近的是诗人,这不是因为他们有意为民请民,

  而是因为他们一直与底层处于共同的生活世界。

  中国作家介入现实的方式是匪夷所思的

  南都周刊:有些学者指责当下中国文学脱离真切的社会现实、脱离中国人的生存状况,文学已经沦为“小圈子游戏”,你怎么看?

  于坚:他们好像把文学界界定为一直被出版和传媒热捧着的某些时尚部分,这个小圈子的东西不尽如人意了,就是中国文学出问题了?其实中国真正的文学从来都在他们指责的那个圈子之外,从来不是他们忽然发现的这回事。当代文学既没有像他们所说的那样脱离过社会现实,也没有像他们期待的那样介入过所谓现实。每个作家都有自己对所谓现实的理解,距离和感受,大家公认的某种“真切的社会现实”是什么?就是夏衍的“包身工”在当年恐怕也不是唯一的“真切的社会现实”吧。

  南都周刊:诸如托尔斯泰、加缪以及近来的苏珊·桑塔格等诸多国外作家,既以自己的作品展现社会的变迁与丰富,又直接介入社会运动,有人认为对比起当下的中国作家缺乏社会责任感和良知,你怎么看这个评价?

  于坚:不能简单地把中国文学跟西方文学的状况相比较并以西方文学为参照系。中国当然有关心社会现实的作家,但其表现方式也许与西方作家完全不同。甚至在西方的参照系中,中国作家介入现实的方式恰恰是匪夷所思的。就像作为曾经介入社会运动的二十世纪三十年代的某些作家,其方式也并非托尔斯泰、加缪或者苏珊·桑塔格式的。在中国,写作本身就是一种最直接的介入。我怀疑他们是否深入地阅读过当代文学作品,确实有几个作家在引领时尚方面很有市场,小说作为文化商品有着天然的优势,而置身于先富起来的行列对某些作家来说,其诱惑显然大于写作本身的诱惑。为版税和印数写作无可厚非,但这些小说再走红,也并不能代表当代文学的真正品质。

  南都周刊:“写作是个人的事”是许多文学作者的一句格言,你怎么看?

  于坚:我还是迷信“写作是个人的事情”,不是圈子的事情。对于作家写作方向的任何强调或指责对写作都是无效的。中国的文学评论者总是热衷于教导作家们如何才是“写作正确”,过去从斯大林主义的方面,现在从托尔斯泰、加缪或者苏珊·桑塔格的方面。某种作品成为时尚必有其时尚的社会基础。个别作家缺乏社会责任感和良知并不足以引领某种时尚,如果全社会普遍庸俗,普遍地缺乏社会责任感和良知,指责个别作家也是无效的。我以为文学评论是引导读者的阅读而不是教导作者的写作,这也是评论者如何介入公共领域的一个重要之点。对那些没有“良知和社会立场”的作品,评论者应该去引导读者拒绝它们,并且你的评论应该具备那些作品同样广泛的影响力。

  南都周刊:对于脱离现实的责问,有些作家和批评家提出和实践了所谓的“底层写作”,关注生活在社会底层的人的生存,你对此有何想法和评价?

  于坚:这种写作并不新鲜,“走出彼得堡”曾经是一个口号,上世纪三十年代也有许多作家这么做,而且一度成为文学主流。我觉得我们似乎又要去讨论什么是“现实”这种可笑的问题,现实好像也只有某一种才是正确的,其他现实都不是现实,进一步,我们是否要作家重新去“体验生活”“下放劳动”?而卡夫卡的写作当然可以判定为脱离现实的写作。与里尔地区的工业地狱比起来,《追忆逝水年华》算什么现实呢?我以为当代文学一直在关注着中国生活的一切方面,并非只是底层。我知道评论界的中国特色是,当他们在谈论“中国文学”的时候,是不包括诗歌以及其他的。他们以为只有小说才是“中国文学”,只有“长篇”可以创造史诗,这是一个“政治正确”,却成为评论界的共识。顺理成章,一旦某几个小说明星的写作出了问题,就是“中国文学”出了问题。而据我所知,在“中国文学”以外的汉语诗歌,一直在承担着文学的基本责任,就是在所谓“底层写作”上,诗歌也是一直在正常地进行着的,今天距离中国底层最近的是诗人,这不是因为他们有意为民请民,而是因为他们一直与底层处于共同的生活世界。

  这种普遍的低成就了诗人的圣

  南都周刊:作为诗人,你是怎样看待当下中国诗歌写作与现实生活的联系?如何看待当下诗歌的“精神状况”?

  于坚:我过去不喜欢圣化诗人的形象,例如对海子的神化。但时代令诗人上升了,诗人就像西藏的僧侣那样,通过诗歌坚持着某种精神生活。当诗人越来越与这些语词联系在一起:坚持、挺住但没有一切,相对贫穷的、不为所动,精神生活、最古老的手艺、独立立场、自由、少数、步行者、不合时宜者、对物质生活的轻蔑,乌托邦、继续怀疑……我一直羡慕唐朝的诗人,天下谁人不识君,但“文革”以后,这个国家的文化水准确实是中国历史上最低的,低到诗人在一个有诗教传统的国家中都被普遍蔑视的地步,这种普遍的低成就了诗人的圣。诗人好像已经不喜欢高谈阔论什么“精神状况”,但诗歌界在作品及所表现的精神和思想方面毫无疑问在当代中国文化中走得最远,我们已经解决了许多常识性的问题,我们越过了许多“什么”。诗歌今天非常正常,世界性的正常,完全脱离了中国当代历史生成的“独特”。“盘峰论争”尽管褒贬不一,但其思想锋芒,无论“民间”还是“知识分子写作”,都早已令“中国文学”望尘莫及。

  南都周刊:你如何看待作家的明星化?

  于坚:有几个人要当尽管让人家当去。就是别再把他们扯进来代表中国文学,都已经庸俗浅薄无聊便宜成这样了,还把什么“托尔斯泰、加缪以及近来的苏珊·桑塔格”扯进来,是在抬举前者还是在侮辱后者?我最近又去了西藏,拉萨大昭寺前转经的僧侣、山民依然如故。从云南德钦一步一磕头走向拉萨的人们依然在路上,那个永恒的钟继续领着时间旋转,完全不为周围所动。曾几何时,灵魂像风的先锋们蜂拥而至,不过二十年,已经烟消云散。拉萨今天已经没有先锋派,我们下面也差不多了。但诗人们继续步行,缓慢地穿过世界,任那飞驰而去的快车溅他们一身脏水。

  谢有顺:中国作家与物质的关系过于暧昧

  用韩少功的话说,“民众关心的,他们不关心。

  民众高兴的,他们不高兴。

  民众都看明白了的,他们还看不明白,总是别扭着。

  ……以至现在,最平庸的人没法在公司里干,但可以在作家协会里混。

  最愚蠢的话不是出自文盲的口,但可能出自作家之口。”

  需警惕这种简化文学的思维方式

  南都周刊:有些学者指责当下中国文学脱离中国人的生存状态,你怎么看?文学与现实存在应该是一种怎样的状态?

  谢有顺:类似的议论其实由来已久。不仅思想界对当代文学有这样的指责,文学界内部同样也在反思这个问题。当下的中国文学的确面临回避现实矛盾、无法对当下的生存境况作出有力、准确的表达这一困境,许多的作家,成了消费文化的俘虏,甚至被屈辱的现实所奴役,这也是一个不争的事实,但由此就推断出中国文学是没有希望的,恐怕还为时尚早。在任何时代,真正承担现实苦难、面对心灵责任的作家,总是少数——奢望所有的作家都成为勇敢的精神战士,从而“直面惨淡的人生”,不仅不可能,而且也未必合理。文学是一个广阔的世界,它和现实、和人类生存状况的关系,也是多种多样的。面对现实,它既可能是一种直接、有力的介入,也可能是一种秘密、个人的表达,两种方式都能产生伟大的文学——以一种文学来贬抑另一种文学的悲剧,在意识形态做主导的时代里是很常见的,今天我们重新讨论文学的现实责任的时候,仍需警惕这种简化文学的思维方式。

  南都周刊:有些学者指责当下中国文学回避尖锐的社会矛盾,缺乏良知和勇气,缺乏承担,你怎么看?

  谢有顺:这的确是一个严峻的问题。我赞赏这些学者对当代文学的基本判断,也认为这样的棒喝对很多作家是一个必要的提醒。确实,越来越多的作家,躲在书斋里,无视业已沸腾的当代生活,无视日益尖锐的现实苦难,而只是在一些无关痛痒的问题上玩弄文字和技巧,他们的写作,普遍充满了精神软弱带来的屈服性,以致文学正在沦为小圈子的自娱自乐、自言自语,使得更为广大的社会生活、精神危机,得不到有效的表达。许多作家的良知是昏暗的,心灵是软弱的,他们的写作没有承担,更没有力量。文学的总体状况不容乐观。出名的渴望,版税利益的最大化,正在成为支配文学写作的主要力量;文学正在丧失理想和激情,一个苍白、无力的写作时代已经来临。

  愤怒是一种拒绝与现实和解的姿态

  南都周刊:现在似乎很少人谈到作家的社会责任和历史使命,以及作为人类良知的崇高感,似乎这一切已经不合时宜。

  谢有顺:一切写作危机的根由,说到底还是出在作家本人身上。一个作家,之所以无法面对现实发言,以至于被屈辱的现实所奴役,原因在于,作家对现在的境遇失去了愤怒,也丧失了反抗的立场。如同一个作家对过去失去了记忆,对未来失去了想象,会将存在带进暗昧之中一样,作家对现在若失去了愤怒,则会将写作带进软弱之中。愤怒,就是对现在的存在境遇表示不满,是一种拒绝与现实和解的姿态。在愤怒中,作家将看到现实的局限、苦难以及它所包含的内在危险性,由此,心灵就渴望向新的高地攀援,并渴望存在的幸福出现,以平息这种怒气,这也是鲁迅、卡夫卡等作家一贯表达的立场。当下的许多中国作家与生活中的日常性和物质主义建立起了过于亲密、暧昧的关系,以致他们的作品中失去了批判性和理想品格——由此而派生出来的文学必定是软弱的文学,没有勇气的文学。鉴于此,重申一种直面现实苦难、背负精神重担的写作传统,就显得迫在眉睫了。

  南都周刊:有人认为造成这个局面的原因是时代的局限,你怎么看?

  谢有顺:我不同意这样的看法。把无法进行一种理想写作的原因归罪于时代,不过是一种巧妙的托辞。有些人,永远在想象一个写作的黄金时代,以为在那个“黄金时代”里,他就能写出真正的好作品。这是一种自欺欺人。写作的黄金时代永远不是在远方,在未来,真正的黄金时代,就是当下——只有当下才是真实的。你此刻孤独就永远孤独,你此刻写不了就永远都写不了。一些人总是迷信“生活在别处”,写作也在别处,好像写作仅仅和外部环境发生关系,而无关心灵。他们为写作预设了条件,比如说自由发表和出版呀,物质环境变好呀,想说什么就说什么呀,等等,他们虚拟了许多写作的条件,一旦现实不能提供这个条件给他,他就不写了,或者有理由胡写。

  南都周刊:现在不少作家回避责任的同时,投入市场的怀抱,你怎么看?

  谢有顺:市场并不是生来就是罪恶的,文学进入市场,也不一定就会损害文学的品质。但今天的问题是,市场成了决断一切的标准和力量,市场的权力被许多人夸大了。一些成名作家,轻易就被市场的喧嚣和热闹所迷惑,甚至用市场的份额、图书的印数来反证自己作品的价值所在,这不是笑话么?我知道,在许多文学同行之间,充斥着关于印数、版税之间的比较和议论,但文学内在的品质却少有人谈及,这个时候,市场就有可能成为作家的断头台——市场对作家来说,永远是双刃剑,每个作家都需要谨慎地面对。

  南都周刊:长久以来中国文学一直占据思想的前端,比如五四比如八十年代,而今天的作家却被指责为“没有思想”,你怎么看?又有人认为强调思想就是文以载道会伤害文学,你怎么看?

  谢有顺:作家在社会上扮演重要角色的时代已经过去,这是一件令人悲伤的事情。在“五四”时期,在上世纪八十年代,作家们普遍走在时代的前列,文学是思想的先声,许多的文化、思想争论,也从文学界发端,进而波及到其他领域。但从上世纪九十年代之后,作家日益从主流现实中退场,日益丧失思想创新的能力,到现在,作家已经成了一个平庸者的群体,在许多关键时刻,作家的声音往往都是缺席的。用韩少功的话说,“民众关心的,他们不关心。民众高兴的,他们不高兴。民众都看明白了的,他们还看不明白,总是别扭着。……以至现在,最平庸的人没法在公司里干,但可以在作家协会里混。最愚蠢的话不是出自文盲的口,但可能出自作家之口。”这是事实。因此,作家必须提高自身的思考能力,必须获得洞察世界的深邃眼光,否则,怎能改变文学界这种垂死的局面?

  南都周刊:对于脱离现实的责问,一些作家和批评家提出和实践了所谓的“底层写作”,关注生活在社会底层的人的生存,你对此有什么想法和评价?

  谢有顺:提出了“底层写作”,并不等于因此就有了道德的优先权。底层是需要关怀的,但底层也可能是需要批判的;底层有许多值得尊敬的人与事,底层也肯定藏污纳垢、鱼龙混杂,需要认真分辨和审视。今天,提出任何整体性的口号和判断,其实都不能拯救文学——文学永恒的魅力,只是在于探索人类精神的丰富性和复杂性。

  林贤治:作家是国家供养起来的珍稀动物

  如果作家心中没有底层生存,要求他们有思想,

  负责任,根本是不可能的。这对目前的中国文学来说非常奢侈。

  从统计学来看,我们可以看看他们的生存方式怎样,

  他们的作品如何出笼,出笼后又怎样炒作,

  比较一下是很有意思的事。因此不可能跟他们谈思想。

  作家的生存状态决定了中国文学的现状

  南都周刊:思想界的一些学者指责当下中国文学脱离社会现实,缺乏良知和思想,你怎么看这个指责?

  林贤治:出现作品脱离社会这样的情况,从根本上说,在于这帮作家目前的生存状态。他们以何种方式在这个国家生存,决定了中国文学的现状。

  总结起来有两点:第一,体制内的作家,文学院、作协把他们养起来,原有体制的延续确保了他们凌驾于众生之上,与芸芸众生割离。他们是在温室里孵蛋的特殊家禽,是国家供养起来的珍稀动物。第二,大众文化的高度发达,商业社会的基本形成对中国文学的冲击甚大,即使不在体制内,在部队、大学,或自由撰稿人,其影响也是致命的。商业炒作形成了他们的特殊身价。现在出版界的炒作太不像话,整个出版界都是商业包装起来的。这些作家的存在太优越,声名太显赫,与其实际的文学成就相去甚远。像一些七八十年代出生的人,文学准备如此薄弱,但初涉文坛就获得极高的评价,他们的文稿动辄印刷数百万册,获得最红的评论家的吹捧以及各种文学奖,他们也自认为是天才,身价很高,这样的作家怎么可能关注底层生存?怎么可能关注中国整个社会的发展?这都是他们不用考虑的。

  但这些都是泡沫,不能反映文学固有的规律和应有的标准。

  南都周刊:有人认为过于强调与现实关系将伤害文学性,“写作是个人的事”。

  林贤治:这种状况的形成也与理论界、批评界对“个人写作”的标榜有关。以前提倡文艺为工农兵服务,那个时候提出“个人写作”有积极的意义。不过,从本体论来讲,关键的是——个人写作的个人自身素质如何?作家同环境以及其他人的联系决定了他的素质。作为人类个体,和社会割离的作品不可能有内涵。如果一个作家失去生活经验,以及居间的生命体验,仅仅局限于个体,片面地鼓吹、标榜个人写作,这种理论弊多于利。人类是群居的,个体不可能脱离群体。只有通过与群体的联系,才能深入地发掘个体;抽离时代的、社会的背景,切断个体与群体的关系,这种纯粹局限于描写个体本身的写作,注定没有深度。

  思想其实是非常朴素的

  南都周刊:长久以来中国文学一直占据思想的前端,比如五四比如八十年代,而今天的作家却被指责为“没有思想”,你怎么看这个现象?

  林贤治:文学跟伦理学联系非常密切。社会公正、正义,道义感和责任感等等,都可划归伦理学范畴。健全的写作者可以在写作中把这些概念理性地带出来。作家即使从感受力出发,也会表现出他的同情心和对人类之爱。面对不正义和底层生活,作家因同情心而起的愤怒也很容易带出来。对人类的爱和同情,远比责任感和使命感更重要;因为前者是基础,后者是前者的延伸。

  就说余华的《许三观卖血记》和《活着》,他把苦难作为题材来处理,而不是处理题材时体会到苦难,从中产生悲剧感。相反,我们看到的是作家的冷静甚至冷酷。别人说鲁迅,第一是冷静,第二是冷静,第三还是冷静,他是不满意的。余华这种没有爱的文字,只是煽情的需要。他的人物,仿佛全世界的苦难都在同一天集中到同一个人身上,由于小说不是采取荒诞的手法,而是完全写实主义的,这就不大符合客观真实,脱离生活的逻辑,仅仅是作家写作时的需要而已,不能感动读者。只是因为我们太远离现实,才会觉得珍贵。再比如《废都》为什么不是好作品?不在于它是否反映了知识分子的堕落、颓废,而在于它体现了作者那种陈腐的士大夫式的审美趣味。他对女性不尊重,是抱着一种赏玩的心理来写的。可以说,处方比需要治疗的疾病还要坏。一个作品不仅仅教给我们知识,它不可能是一种客观呈现;文学是主观的,好的文学作品还给我们以情感教育,审美教育,正如古希腊哲人说的“净化”。我觉得中国作家对性描写有种特殊嗜好。就连王蒙70多岁了也不甘寂寞,在《青狐》里写起来了,莫言、余华、贾平凹、苏童,莫不如此。这是媚俗的表现。如果作家心中没有底层生存,要求他们有思想,负责任,根本是不可能的。这对目前的中国文学来说非常奢侈。从统计学来看,我们可以看看他们的生存方式怎样,他们的作品如何出笼,出笼后又怎样炒作,比较一下是很有意思的事。因此不可能跟他们谈思想。

  作家队伍的素质非常低

  南都周刊:有些人认为现在的作家缺乏社会责任感,缺乏对社会发言的个人立场,这首先背离了五四以及上个世纪八十年代的中国文学的传统;其次也与世界文学的趋势相悖,诸如托尔斯泰、加缪以及近来的苏珊·桑塔格,既以自己的作品展现社会的变迁与丰富,又直接介入社会运动,对社会发言。

  林贤治:从纵的方面来说,中国作家没有知识分子的传统。中国新文学传统非常薄弱,可供使用的资源稀少。现代文学的现代性受西方体系影响,像自由、人道主义、人权等等价值观念,这些都是西方的,中国古代没有这些东西。从横的方面来说,没有这个群体。作家队伍的素质非常低,文化修养不够,大的思想、知识背景,我们的作家不具备。人文主义、人道主义传统没有形成。可以说,我们的现代文学是无根的,不要说根系发达,它是飘浮在这个时代之上的。

  在前苏联,对知识界的控制很严密,可还是出现了茨维塔耶娃、阿赫玛托娃,扎米亚京、索尔仁尼琴,出现了一大批优秀作品,一是人道主义传统丰富、深厚,二是整个队伍素质很高。没有自由时,他们有自由感,有了这种自由感才能写出好的作品。在严峻的气候里,唯有对自由的向往和渴望,才能产生好的文学。时代和体制不能驾驭一个自由的作家,不会对自由主体产生影响。对于中国文学和中国作家,我们没有这样一代人出现。

  自由精神对于文学创作始终处于首要的位置,没有对自由的追求就没有痛感,没有耻感。自由不仅属于个人,也属于社会。自由是一个大词,人道主义与自由在本质上是一致的。谈文学就是谈自由,研究自由精神如何进入文学。

  南都周刊:有人认为造成这个局面的原因是时代的局限,你怎么看?关于未来,你想说些什么?

  林贤治:在这个改革、转型的时代,旧的未死,新的未生。旧的体制和新的商业同时存在,共存共荣,这在世界上是很特殊的。我们作家可以安然坐在安乐椅上写,是官方和商业捧起来的宝贝。除了梦呓、性,我们还能看到什么?

  我对这个作家队伍是绝望的,或者可以说是“没有希望,仍然希望”。所谓希望,就是在底层或生存状态不太优越的写作者中,能发现一些好作品。自然,也不能说具有富足的生活条件的作家一定写得不好,这里至少得有一个前提,就是必须拥有足够的自省能力。但这也只能是个别的,在一个平庸的、烂掉的时代,优秀作家怎么可能成批出现?只能零星存在。而且,全国这么多奖,不出垃圾怎么可能?真的有那么多优秀作品吗?这么多奖项只能败坏文学。

  残雪:给思想者们讲讲文学常识

  残雪 撰文

  所以在东欧,在那些文学发达的国家里,实验文学受到人们很大的尊敬。因为他们的人民深深地懂得一个民族没有精神是多么的可怕,他们也懂得将人的精神降为表层的社会意识形态,实用主义地用“关心他人”的口号来代替文学精神本身的探索,将个体之间的区别抹杀,是更为可怕的事。那终将成为一个民族的灾难。

  我在日前偶尔从网络上看到武汉那场讨论会的记录,后来又在电话里同邓晓芒谈及此事,交换了一下意见。我们总的感觉是:中国没有人。尤其是没有思想者,更不要说有哲学、文学底蕴的思想者了。

  从会议来看,与会的那些人都群情激愤,主观愿望都比较好,但一落实到文学这个主题上,便无不显露出陈旧僵化的观念,幼稚初级的审美意识,混乱的、表面同主流拉开距离,实际上同主流不知不觉合拍的追求。给人的印象是表面闹哄哄,其实大同小异,都是一个中国传统的思想构架在那里起作用。说来说去也就是反精神污染时的那几句老话,套话,真不知是起了帮忙还是帮闲的作用。

  思想者也好,批评家也好,既然敢参加这种会议,就要学一点文学方面的知识,吸取一点新的东西,扩大一点自己的眼界,真正弄懂弄通了再来做这种概括性的发言。我早就在媒体上说过批评界要进行现代艺术方面的扫盲,现在看来思想界(如果与会者能代表思想界的话)也应该扫盲。傅国涌先生说到的当代主流文学没有希望,许多成名作家粗制滥造,毫无思想,这一点我同他很有同感,我自己也多次在媒体上针对这种倾向进行过批判。可是在这次会议上开出的拯救文学的良方是什么呢?这应该是最最关键的吧。让我们来看看:

  傅国涌:文学要面向当下火热的社会生活。从生活中吸取营养,不能圈子化。

  丁东:文学要看得懂,要有历史使命感,进步责任感,描写底层的文学最好,希望看到80年代小说、报告文学争相传阅的好形势。

  崔卫平:文学要打破行业的隔阂,要铁肩担道义,关注新思想的潮流。

  一致认为:既要反圈子化,又要反市场化。要描写公共生活中的矛盾和巨大冲突——因为现在是天赐良机的好时光。

  在我这个80年代成名的作家看来,这几个良方早在上世纪80年代和90年代初就被主流用过了,一点都不灵。为什么呢?因为是政治干预文学,且缺乏文学常识,急功近利,违背文学规律。我不愿意看到我自己好不容易伴随市场化而获得的那一点小小的自由又重新失去,更不愿意限制刚刚放松一点点,又来一个“思想权威”,规定自己什么能写,什么不能写,而那理由,又是一目了然的极为陈腐的、甚至可说是“新左”的。我也不知道他们所说的“新思想”的潮流是什么,我反而从他们的倡导姿态中不时地窥见中国传统思想的辫子。至于说到圈子化,如果是指我搞的这种实验文学的话,那只是他们的想象。迄今为止我已出版了60几种版本的文学书,读者少说也有十几万了。如今是市场化,人家都亏本的话会来帮我出书吗?我看他们倒有圈子化的倾向,他们若真的以这种陈腐观念去著书的话,会卖得出去吗?读者都没有脑壳了吗?倒是80年代可能会有相当的效应,因为那时出书是各出版社的领导说了算。以上说的这几句话只是笼统地表达一下我的印象。我在文坛不但不是主流,反而是为主流所排斥的异类。所以我只要听到类似主流的腔调就敏感,就担心又要搞运动了,要禁止我出书、开博客了(本人的点击率相当高)。

  我本不应该在这些思想者们面前来讲述文学的常识,但想起鲁迅先生说过的:“不在沉默中爆发,便在沉默中灭亡”这句话,就感到了“铁肩担道义”的必要性。因为虽然我个人己成名,出书已经不成问题,还有大批的勇敢、爱思索的青年男女,他们没有成名,他们的出版和发表均受到主流的歧视和限制,因为主流最讨厌的就是“个人”,以及个人的独立思考和感受。这些人的文学观,是中国几十年一贯制的所谓社会主义现实主义,他们也从来不知道除了表层的社会生活,还会有个人的深层的精神生活,这个生活有其独立的规律,在某种程度上,表层生活都要受制于她。并且对这种生活的追求所呈现的特点是,越个人,便越人类。所以,我深感提倡这种文学正是“树人”的关键。长期以来主流总认为凡属精神生活的东西,都是看不懂的,没有必要存在的。就如六七十年代的说法一样——精神生活就是大公无私,关心劳动人民的疾苦。

  我想,这些思想者们并没有搞清文学究竟为何物,就胡子眉毛一把抓,既批判主流,也批看不懂的、小圈子的先锋(补充一句,我并不认为自己是“先锋”,尤其是批评界提倡的那种先锋。我对自己的文学的定位是“新实验”文学)。文学是有层次的,既有描写表层社会生活的,相对容易看懂的所谓现实主义文学,也有描写人类深层精神生活的、比较难懂的现代主义文学。但这个区分不是绝对的,很多作品都是二者兼容。并且即使题材是表层精神生活的文学,往往因为写作者心灵的深邃(比如托尔斯泰,巴尔扎克等),仍然可以感觉推测出深层精神活动的轨迹。而那种描述深层生活的文学,由于描述的是深层潜意识的结构(即,使精神自身铸成形式的创造),也由于在描述时要将语言的功能颠覆,让她返回其原始的含义,往往是最难进入的。这种文学的读者需要受一定的训练,因为他所面对的,是一个一个极为独特的精神发展的形态,是类似于哲学和严肃音乐那样的东西。这样的文学的读者与大众文学的读者在数量上比起来当然是少得可怜。但一个民族如果不能让这种高层次的文学存在的话,就是一个没有前途的民族。所以在东欧,在那些文学发达的国家里,实验文学受到人们很大的尊敬。因为他们的人民深深地懂得一个民族没有精神是多么的可怕,他们也懂得将人的精神降为表层的社会意识形态,实用主义地用 “关心他人”的口号来代替文学精神本身的探索,将个体之间的区别抹杀,是更为可怕的事。那终将成为一个民族的灾难。而我们这里居然有这样的言论,认为只有美英这样的国家配有纯粹文学,高超文学,像我们这种半封闭,半开放的社会则不配,我们只要有所谓思想性强的文学就可以了。而他说的“思想”的内涵则是很含糊的,有点像主流意识形态的代名词。奇怪的是他刚批了余华的堕落,又将《兄弟》(关于这篇作品我也发表过言论)视为“高超文学”。我不想在此再去评价这些思想者的文学知识结构和他们对于自我的反省了。

  关于我自己的创作,我的文学主张,以及实验文学到底是什么,我已经发表过不少文章了,当然思想者们是不屑于看这类东西的,他们要关心的是大众,他们太忙了,心胸太宽广了。而且他们自己的心灵也够丰富了,所有的矛盾都已经解决得很好了,所以现在要全力以赴地来关心作家和劳苦大众。

  本来已经快说完了,忽然又想起两件事非要在这里讲一下不可。虽然丁东先生不屑于听外国人的意见,我还是要在这里告诉他,也告诉这篇文章的读者:我的朋友(她在日本文学界也是相当有名的中国文学批评家和翻译家)曾多次谈到,中国文学(当然不是指主流)相对于死气沉沉的、软弱无力的日本当代文学来说,充满了活力和希望,值得他们好好学习。还有个信息就是美国耶鲁大学出版社将于今年致力于推出中国实验文学系列。我们一点都不必自卑和悲观,我们是靠实力来说话的。文学属于全人类,只要是好东西,在这个世界上总会有人注意到,因为现在已是信息社会了。我也欣喜地看到一代青年作者和读者正在成长起来,脚踏实地地开始了他们漫长的精神追求。

  (未经许可,不得转载、摘编)。

  相关专题:南都周刊

Friday, April 13, 2007

Description of the .PDB files and of the .DBG files

Description of the .PDB files and of the .DBG files
View products that this article applies to.
Article ID : 121366
Last Review : August 5, 2005
Revision : 3.0
This article was previously published under Q121366
On This Page
SUMMARY
MORE INFORMATION
The .PDB files
The .DBG files
SUMMARY
The .PDB extension stands for "program database." It holds the new format for storing debugging information that was introduced in Visual C++ version 1.0. In the future, the .PDB file will also hold other project state information. One of the most important motivations for the change in format was to allow incremental linking of debug versions of programs, a change first introduced in Visual C++ version 2.0.

The .DBG extension stands for "debug." The .DBG files created with the 32-bit NT toolset are in the Portable Executable (PE) file format. They contain sections with COFF, FPO, and in some cases Codeview information. The Visual C++ integrated debugger can read .DBG files in this format, however it ignores the COFF symbol sections and looks for Codeview information.

If you need to determine what symbol information is contained in a .DBG file, you can type the following at the command prompt:

Dumpbin sample.dbg/symbol.


Note The path might need to include directories for Dumpbin.exe and MSdis100.dll:

Path=%Path%;C:\Program Files\DevStudio\VC\bin;C:\Msssdk\bin


For more information about DUMPBIN, click the following article number to view the article in the Microsoft Knowledge Base:
177429 (http://support.microsoft.com/kb/177429/) Examples of DUMPBIN output

Back to the top
MORE INFORMATION
The .PDB files
While earlier, 16-bit versions of Visual C++ used .PDB files, the debugging information stored in them was appended to the end of the .EXE or .DLL file by the linker. In the versions of Visual C++ mentioned above, both the linker and the integrated debugger were modified to allow .PDB files to be used directly during the debugging process, thereby eliminating substantial amounts of work for the linker and also bypassing the cumbersome CVPACK limit of 64K types.

For more information about CVPACK limitations, click the following article number to view the article in the Microsoft Knowledge Base:
112335 (http://support.microsoft.com/kb/112335/) BUG: CK1020 or CK4009 encountered when type info exceeds 64K
By default, when you build projects generated by the Visual Workbench, the compiler switch /Fd is used to rename the .PDB file to .PDB. Therefore, you will have only one .PDB file for the entire project.

When you run makefiles that were not generated by the Visual Workbench, and the /Fd is not used with /Zi, you will end up with two .PDB files:
• VCx0.PDB (where "x" refers to the major version of the corresponding Visual C++, either "2" or "4"), which stores all debugging information for the individual .OBJ files. It resides in the directory where the project makefile resides.
.PDB, which stores all debugging information for the resulting .EXE file. It resides in the \WINDEBUG subdirectory.
Why two files? When the compiler is run, it doesn't know the name of the .EXE file into which the .OBJ files will be linked, so the compiler can't put the information into .PDB. The two files store different information. Each time you compile an .OBJ file, the compiler merges the debugging information into VCX0.PDB. It does not put in symbol information such as function definitions. It only puts in information concerning types. One benefit of this is that when every source file includes common header files such as , all the typedefs from these headers are only stored once, rather than in every .OBJ file.

When you run the linker, it creates .PDB, which holds the debugging information for the project's .EXE file. All debugging information, including function prototypes and everything else, is placed into .PDB, not just the type information found in VCX0.PDB. The two kinds of .PDB files share the same extension because they are architecturally similar; they both allow incremental updates. Nevertheless, they actually store different information.

The new Visual C++ debugger uses the .PDB file created by the linker directly, and embeds the absolute path to the .PDB in the .EXE or .DLL file. If the debugger can't find the .PDB file at that location or if the path is invalid (if, for example, the project was moved to another computer), the debugger looks for it in the current directory.

Back to the top
The .DBG files
The Visual C++ integrated debugger can also use .DBG files as long as they are made from a binary containing Codeview format debugging output. These are useful for debugging when the source code is not available. Even without the source, .DBG files allow you to set breakpoints on functions, watch variables, and see the functions in the call stack. They are also required for OLE RPC debugging.

One caveat needs to be pointed out: when working with symbols from a .DBG file, you must use the fully decorated names. For example, to set a breakpoint on a call to the Windows sndPlaySound function, you would specify _sndPlaySoundA@8 as the location.

There are actually two .DBG file formats. The old format has existed for quite a while in the 16-bit world. For example, because the format of .COM files is a simple binary image loaded into memory, the Codeview debugging information could not be appended to the end of the file because the file size might exceed the 64K limit for a .COM file. Therefore the symbolic information was instead put into a separate .DBG file, which had only Codeview information in it. The .DBG files could also be generated by running CVPACK on an .EXE file using the /strip option.

For 32-bit .EXEs, the Visual C++ version 2.x and 4.x debugger's symbol handler does not read the old format. Instead, it reads the format used in the Windows NT .DBG files, supplied for use with its system .DLL files. These .DBG files are in the Portable Executable (PE) file format and contain sections with COFF, FPO, and in some cases Codeview symbolic information. The new Visual C++ debugger reads .DBG files in this format only. Furthermore, it only uses the Codeview information, ignoring the other symbol sections.

It is possible to strip debug information from a PE file and store it in a .DBG file for use by debuggers. For this to work, the debugger needs to know whether to find the debug information in a separate file or not and whether the information has been stripped from the file or not. One method would be for the debugger to search through the executable file looking for debug information. However, to save the debugger from having to search the file, a file characteristic field (IMAGE_FILE_DEBUG_STRIPPED) was invented that indicates that the file has been stripped. Debuggers can look for this field in the PE file header to quickly determine whether the debug information is present in the file or not.

To generate a .DBG file in this format, you can use REBASE.EXE, which is provided with the Win32 SDK. Please see the Win32 SDK documentation for more details.

During the Windows NT retail builds, debug symbols are stripped from the system binaries and drivers and stored in separate .DBG files. This is done because the Windows NT kernel debugger can use these .DBG files and provide debugging symbols even for optimized drivers. Remember, however, that the Visual C++ integrated debugger is not designed to debug protected mode kernel code.

The Windows NT symbol files can be found in a debug subdirectory of the \SUPPORT directory on the Windows NT retail CD-ROM. These files must be copied from the CD-ROM to your hard drive. For user mode debugging on the target debugger machine, .DBG symbols must be present in the Windows NT \\SYMBOLS directory of the target system ( is the directory where Windows NT is installed). The new Visual C++ setup program installs an "NT System Symbols Setup" icon in your program group. You can use it to automatically copy the .DBG files from your Windows NT Workstation CD-ROM disk to the correct directory structure on your hard drive. This method does not work for the Windows NT Server 4.0 CD-ROM because the .DBG files are stored in compressed format.

For kernel debugging, place .DBG files into a symbols tree underneath the directory specified by the _NT_SYMBOL_PATH environment variable (for example, C:\DEBUG\SYMBOLS). Kernel debugging is possible with a minimal set of symbols consisting of symbols for all the drivers (*.SYS) in the SYMBOLS\SYS directory, and symbols for NTOSKRNL.EXE and HAL.DLL in the SYMBOLS\EXE and SYMBOLS\DLL directories, respectively. For more information on kernel debugging, refer to the discussion regarding kernel debugging in the Windows NT DDK Programmer's Guide.

While it is theoretically possible to convert from a .PDB file back to a .DBG file, it is not a trivial task. At this time, we know of no such tool. If we hear of such a tool, we will update this article in the Microsoft Knowledge Base.

Back to the top


多核编程中的锁竞争现象

在前一篇讲解多核编程的几个难题及其对策(难题一)的文章中提到了锁竞争会让串行化随CPU的核数增多而加剧的现象,这篇文章就来对多核编程的锁竞争进行深入的分析。
为了简化起见,我们先看一个简单的情况,假设有4个对等的任务同时启动运行,假设每个任务刚开始时有一个需要锁保护的操作,耗时为1,每个任务其他部分的耗时为25。这几个任务启动运行后的运行情况如下图所示:
图1:对等任务的锁竞争示意图
在上图中,可以看出第1个任务直接执行到结束,中间没有等待,第2个任务等待了1个时间单位,第3个任务等待了2个时间单位,第3个任务等待了3个时间单位。
这样有3个CPU总计等待了6个时间单位,如果这几个任务是采用OpenMP里的所有任务都在同一点上进行等待到全部任务执行完再向下执行时,那么总的运行时间将和第四个任务一样为29个时间单位,加速系数为:(1+4×25)/ 29 = 3.48
即使以4个任务的平均时间27.5来进行计算,加速系数=101/27.5 = 3.67
按照阿姆尔达定律来计算加速系数的话,上述应用中,串行时间为1,并行处理的总时间转化为串行后为100个时间单位,如果放在4核CPU上运行的话,加速系数=p / (1 + (p-1)*f) = 4/(1+(4-1)*1/101) = 404/104 = 3.88
这就产生了一个奇怪的问题,使用了锁之后,加速系数连阿姆尔达定律计算出来的加速系数都不如,更别说用Gustafson定律计算的加速系数了。

其实可以将上面4个任务的锁竞争情况推广到更一般的情况,假设有锁保护的串行化时间为1,可并行化部分在单核CPU上的运行时间为t,CPU核数为p,那么在p个对成任务同时运行情况下,锁竞争导致的总等待时间为:1+2+…+p = p*(p-1)/2
耗时最多的一个任务所用时间为: (p-1) + t/p
使用耗时最多的一个任务所用时间来当作并行运行时间的话,加速系数如下
S(p) = t / (p-1 + t/p) = p*t / (p*(p-1)+t) (锁竞争下的加速系数公式)
这个公式表明在有锁竞争情况下,如果核数固定情况下,可并行化部分越大,那么加速系数将越大。在并行化时间固定的情况下,如果CPU核数越多,那么加速系数将越小。
还是计算几个实际的例子来说明上面公式的效果:
令t=100, p=4, 加速系数=4×100 / (4*(4-1)+100) = 3.57
令t=100, p=16, 加速系数=16×100 / (16*(16-1)+100) = 4.7
令t=100, p=64, 加速系数=64×100 / (64*(64-1)+100) = 1.54
令t=100, p=128, 加速系数=128×100 / (128*(128-1)+100) = 0.78
从以上计算可以看出,当核数多到一定的时候,加速系数不仅不增加反而下降,核数增加到128时,加速系数只有0.78,还不如在单核CPU上运行的速度。
上面的例子中,锁保护导致的串行代码是在任务启动时调用的,其实对等任务中在其他地方调用的锁保护的串行代码也是一样的。
对等型任务的锁竞争现象在实际情况中是很常见的,比如服务器软件,通常各个客户端处理任务都是对等的,如果在里面使用了锁的话,那么很容易造成上面说的加速系数随CPU核数增多而下降的现象。
以前的服务器软件一般运行在双CPU或四CPU机器上,所以锁竞争导致的加速系数下降现象不明显,进入多核时代后,随着CPU核数的增多,这个问题将变得很严重,所以多核时代对程序设计提出了新的挑战。以前的多任务下的编程思想放到多核编程上不一定行得通。
所以简单地认为多核编程和以前的多任务编程或并行计算等同的话是不切实际的,在讲串行化难题的那篇文章中提出了一些解决方面的对策,但是那些对策还有待业界继续努力才能做得到。
当然由于目前市面上销售的多核CPU还是双核和四核的,等到16核以上的CPU大规模进入市场可能还有几年时间,相信业界在未来的几年内能够对于上面对等任务上的锁竞争问题找到更好的解决方案。

作者介绍:周伟明,自由职业,从事软件行业十年有余。目前主要关注软件测试、多核编程、软件设计等基础方面的内容。写有《多任务下的数据结构与算法》一书,目前正在写作《软件测试实践》一书,计划在不久的将来写一本多核编程方面的书籍。

Wednesday, April 11, 2007

理解I/O Completion Port

  欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提到的相关技术:
  I/O端口
  同步/异步
  堵塞/非堵塞
  服务端/客户端
  多线程程序设计
  Winsock API 2.0

  在这之前,我曾经开发过一个项目,其中一块需要网络支持,当时还考虑到了代码的可移植性,只要使用select,connect,accept,listen,send还有recv,再加上几个#ifdef的封装以用来处理Winsock和BSD套接字[socket]中间的不兼容性,一个网络子系统只用了几个小时很少的代码就写出来了,至今还让我很回味。那以后很长时间也就没再碰了。

  前些日子,我们策划做一个网络游戏,我主动承担下网络这一块,想想这还不是小case,心里偷着乐啊。网络游戏好啊,网络游戏为成百上千的玩家提供了乐趣和令人着秘的游戏体验,他们在线上互相战斗或是加入队伍去战胜共同的敌人。我信心满满的准备开写我的网络,于是乎,发现过去的阻塞同步模式模式根本不能拿到一个巨量多玩家[MMP]的架构中去,直接被否定掉了。于是乎,就有了IOCP,如果能过很轻易而举的搞掂IOCP,也就不会有这篇教程了。下面请诸位跟随我进入正题。


什么是IOCP?
先让我们看看对IOCP的评价
I/O完成端口可能是Win32提供的最复杂的内核对象。
[Advanced Windows 3rd] Jeffrey Richter
这是[IOCP]实现高容量网络服务器的最佳方法。
[Windows Sockets2.0:Write Scalable Winsock Apps Using Completion Ports]
Microsoft Corporation
完成端口模型提供了最好的伸缩性。这个模型非常适用来处理数百乃至上千个套接字。
[Windows网络编程2nd] Anthony Jones & Jim Ohlund
I/O completion ports特别显得重要,因为它们是唯一适用于高负载服务器[必须同时维护许多连接线路]的一个技术。Completion ports利用一些线程,帮助平衡由I/O请求所引起的负载。这样的架构特别适合用在SMP系统中产生的"scalable"服务器。
[Win32多线程程序设计] Jim Beveridge & Robert Wiener


看来我们完全有理由相信IOCP是大型网络架构的首选。那IOCP到底是什么呢?

  微软在Winsock2中引入了IOCP这一概念 。IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。

  这里我要对上面的一些概念略作补充,在解释[完成]两字之前,我想先简单的提一下同步和异步这两个概念,逻辑上来讲做完一件事后再去做另一件事就是同步,而同时一起做两件或两件以上事的话就是异步了。你也可以拿单线程和多线程来作比喻。但是我们一定要将同步和堵塞,异步和非堵塞区分开来,所谓的堵塞函数诸如accept(…),当调用此函数后,此时线程将挂起,直到操作系统来通知它,"HEY兄弟,有人连进来了",那个挂起的线程将继续进行工作,也就符合"生产者-消费者"模型。堵塞和同步看上去有两分相似,但却是完全不同的概念。大家都知道I/O设备是个相对慢速的设备,不论打印机,调制解调器,甚至硬盘,与CPU相比都是奇慢无比的,坐下来等I/O的完成是一件不甚明智的事情,有时候数据的流动率非常惊人,把数据从你的文件服务器中以Ethernet速度搬走,其速度可能高达每秒一百万字节,如果你尝试从文件服务器中读取100KB,在用户的眼光来看几乎是瞬间完成,但是,要知道,你的线程执行这个命令,已经浪费了10个一百万次CPU周期。所以说,我们一般使用另一个线程来进行I/O。重叠IO[overlapped I/O]是Win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这也就是[完成]的含义。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来完成overlapped I/O。你可以获得线程所有利益,而不需要付出什么痛苦的代价。

  完成端口中所谓的[端口]并不是我们在TCP/IP中所提到的端口,可以说是完全没有关系。我到现在也没想通一个I/O设备[I/O Device]和端口[IOCP中的Port]有什么关系。估计这个端口也迷惑了不少人。IOCP只不过是用来进行读写操作,和文件I/O倒是有些类似。既然是一个读写设备,我们所能要求它的只是在处理读与写上的高效。在文章的第三部分你会轻而易举的发现IOCP设计的真正用意。


IOCP和网络又有什么关系?

int main()
{
WSAStartup(MAKEWORD(2, 2), &wsaData);
ListeningSocket = socket(AF_INET, SOCK_STREAM, 0);
bind(ListeningSocket, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr));
listen(ListeningSocket, 5);
int nlistenAddrLen = sizeof(ClientAddr);
while(TRUE)
{
NewConnection = accept(ListeningSocket, (SOCKADDR*)&ClientAddr, &nlistenAddrLen);
HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, (void*) NewConnection, 0, &dwTreadId);
CloseHandle(hThread);
}
return 0;
}

  相信只要写过网络的朋友,应该对这样的结构在熟悉不过了。accept后线程被挂起,等待一个客户发出请求,而后创建新线程来处理请求。当新线程处理客户请求时,起初的线程循环回去等待另一个客户请求。处理客户请求的线程处理完毕后终结。

  在上述的并发模型中,对每个客户请求都创建了一个线程。其优点在于等待请求的线程只需做很少的工作。大多数时间中,该线程在休眠[因为recv处于堵塞状态]。

  但是当并发模型应用在服务器端[基于Windows NT],Windows NT小组注意到这些应用程序的性能没有预料的那么高。特别的,处理很多同时的客户请求意味着很多线程并发地运行在系统中。因为所有这些线程都是可运行的[没有被挂起和等待发生什么事],Microsoft意识到NT内核花费了太多的时间来转换运行线程的上下文[Context],线程就没有得到很多CPU时间来做它们的工作。

  大家可能也都感觉到并行模型的瓶颈在于它为每一个客户请求都创建了一个新线程。创建线程比起创建进程开销要小,但也远不是没有开销的。

  我们不妨设想一下:如果事先开好N个线程,让它们在那hold[堵塞],然后可以将所有用户的请求都投递到一个消息队列中去。然后那N个线程逐一从消息队列中去取出消息并加以处理。就可以避免针对每一个用户请求都开线程。不仅减少了线程的资源,也提高了线程的利用率。理论上很不错,你想我等泛泛之辈都能想出来的问题,Microsoft又怎会没有考虑到呢?!

  这个问题的解决方法就是一个称为I/O完成端口的内核对象,他首次在Windows NT3.5中被引入。

  其实我们上面的构想应该就差不多是IOCP的设计机理。其实说穿了IOCP不就是一个消息队列嘛!你说这和[端口]这两字有何联系。我的理解就是IOCP最多是应用程序和操作系统沟通的一个接口罢了。

  至于IOCP的具体设计那我也很难说得上来,毕竟我没看过实现的代码,但你完全可以进行模拟,只不过性能可能…,如果想深入理解IOCP, Jeffrey Ritchter的Advanced Windows 3rd其中第13章和第14张有很多宝贵的内容,你可以拿来窥视一下系统是如何完成这一切的。


实现方法

Microsoft为IOCP提供了相应的API函数,主要的就两个,我们逐一的来看一下:
HANDLE CreateIoCompletionPort (
HANDLE FileHandle, // handle to file
HANDLE ExistingCompletionPort, // handle to I/O completion port
ULONG_PTR CompletionKey, // completion key
DWORD NumberOfConcurrentThreads // number of threads to execute concurrently
);

在讨论各参数之前,首先要注意该函数实际用于两个截然不同的目的:
1.用于创建一个完成端口对象
2.将一个句柄[HANDLE]和完成端口关联到一起

  在创建一个完成一个端口的时候,我们只需要填写一下NumberOfConcurrentThreads这个参数就可以了。它告诉系统一个完成端口上同时允许运行的线程最大数。在默认情况下,所开线程数和CPU数量相同,但经验给我们一个公式:
  线程数 = CPU数 * 2 + 2
要使完成端口有用,你必须把它同一个或多个设备相关联。这也是调用CreateIoCompletionPort完成的。你要向该函数传递一个已有的完成端口的句柄,我们既然要处理网络事件,那也就是将客户的socket作为HANDLE传进去。和一个完成键[对你有意义的一个32位值,也就是一个指针,操作系统并不关心你传什么]。每当你向端口关联一个设备时,系统向该完成端口的设备列表中加入一条信息纪录。

另一个API就是
BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort, // handle to completion port
LPDWORD lpNumberOfBytes, // bytes transferred
PULONG_PTR lpCompletionKey, // file completion key
LPOVERLAPPED *lpOverlapped, // buffer
DWORD dwMilliseconds   // optional timeout value
);

第一个参数指出了线程要监视哪一个完成端口。很多服务应用程序只是使用一个I/O完成端口,所有的I/O请求完成以后的通知都将发给该端口。简单的说,GetQueuedCompletionStatus使调用线程挂起,直到指定的端口的I/O完成队列中出现了一项或直到超时。同I/O完成端口相关联的第3个数据结构是使线程得到完成I/O项中的信息:传输的字节数,完成键和OVERLAPPED结构的地址。该信息是通过传递给GetQueuedCompletionSatatus的lpdwNumberOfBytesTransferred,lpdwCompletionKey和lpOverlapped参数返回给线程的。

根据到目前为止已经讲到的东西,首先来构建一个frame。下面为您说明了如何使用完成端口来开发一个echo服务器。大致如下:
  1.初始化Winsock
  2.创建一个完成端口
  3.根据服务器线程数创建一定量的线程数
  4.准备好一个socket进行bind然后listen
  5.进入循环accept等待客户请求
  6.创建一个数据结构容纳socket和其他相关信息
   7.将连进来的socket同完成端口相关联
  8.投递一个准备接受的请求
以后就不断的重复5至8的过程
那好,我们用具体的代码来展示一下细节的操作。

  WOW,程序的代码若是贴在此处,实在大煞风景,又不能CTRL+V还不能F7,如果大家需要源代码可以发信给我o_nono@163.net

  至此文章也该告一段落了,我带着您做了一趟旋风般的旅游,游览了所谓的完成端口。
  很多细节由于篇幅的关系无法细细道来。但希望这篇文章能带给您更多的思考。如有任何问题,可以发信至o_nono@163.net。

线程池的介绍及简单实现

线程池的介绍及简单实现
服务器程序利用线程技术响应客户请求已经司空见惯,可能您认为这样做效率已经很高,但您有没有想过优化一下使用线程的方法。该文章将向您介绍服务器程序如何利用线程池来优化性能并提供一个简单的线程池实现。
线程池的技术背景
在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如大家所熟悉的数据库连接池正是遵循这一思想而产生的,本文将介绍的线程池技术同样符合这一思想。

目前,一些著名的大公司都特别看好这项技术,并早已经在他们的产品中应用该技术。比如IBM的WebSphere,IONA的Orbix 2000在SUN的 Jini中,Microsoft的MTS(Microsoft Transaction Server 2.0),COM+等。

现在您是否也想在服务器程序应用该项技术?

线程池技术如何提高服务器程序的性能

我所提到服务器程序是指能够接受客户请求并能处理请求的程序,而不只是指那些接受网络客户请求的网络服务器程序。

多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。但如果对多线程应用不当,会增加对单个任务的处理时间。可以举一个简单的例子:

假设在一台服务器完成一项任务的时间为T

T1 创建线程的时间
T2 在线程中执行任务的时间,包括线程间同步所需时间
T3 线程销毁的时间

显然T = T1+T2+T3。注意这是一个极度简化的假设。

可以看出T1,T3是多线程本身的带来的开销,我们渴望减少T1,T3所用的时间,从而减少T的时间。但一些线程的使用者并没有注意到这一点,所以在程序中频繁的创建或销毁线程,这导致T1和T3在T中占有相当比例。显然这是突出了线程的弱点(T1,T3),而不是优点(并发性)。

线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。

线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目。在看一个例子:

假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。我们比较利用线程池技术和不利于线程池技术的服务器处理这些请求时所产生的线程总数。在线程池中,线程数一般是固定的,所以产生线程总数不会超过线程池中线程的数目或者上限(以下简称线程池尺寸),而如果服务器不利用线程池来处理这些请求则线程总数为50000。一般线程池尺寸是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。

这些都是假设,不能充分说明问题,下面我将讨论线程池的简单实现并对该程序进行对比测试,以说明线程技术优点及应用领域。

线程池的简单实现及对比测试

一般一个简单线程池至少包含下列组成部分。

线程池管理器(ThreadPoolManager):用于创建并管理线程池
工作线程(WorkThread): 线程池中线程
任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
任务队列:用于存放没有处理的任务。提供一种缓冲机制。
线程池管理器至少有下列功能:创建线程池,销毁线程池,添加新任务创建线程池的部分代码如下:



//create threads
synchronized(workThreadVector)
{
for(int j = 0; j < i; j++)
{
threadNum++;
WorkThread workThread = new WorkThread(taskVector, threadNum);
workThreadVector.addElement(workThread);
}

}





注意同步workThreadVector并没有降低效率,相反提高了效率,请参考Brian Goetz的文章。 销毁线程池的部分代码如下:



while(!workThreadVector.isEmpty())
{
if(debugLevel > 2)
System.out.println ("stop:"+(i));
i++;
try
{
WorkThread workThread = (WorkThread)workThreadVector.remove(0);
workThread.closeThread();
continue;
}
catch(Exception exception)
{
if(debugLevel > 2)
exception.printStackTrace();
}
break;
}





添加新任务的部分代码如下:



synchronized(taskVector)
{
taskVector.addElement(taskObj);
taskVector.notifyAll();
}





工作线程是一个可以循环执行任务的线程,在没有任务时将等待。由于代码比较多在此不罗列.

任务接口是为所有任务提供统一的接口,以便工作线程处理。任务接口主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。在文章结尾有相关代码的下载。

以上所描述的线程池结构很简单,一些复杂的线程池结构将不再此讨论。

在下载代码中有测试驱动程序(TestThreadPool),我利用这个测试程序的输出数据统计出下列测试结果。测试有两个参数要设置:

线程池中线程数,即线程池尺寸。
要完成的任务数。
分别将一个参数固定,另一个参数变动以考察两个参数所产生的不同结果。所用测试机器分别为普通PC机(Win2000 JDK1.3.1)和SUN服务器(Solaris Unix JDK1.3.1),机器配置在此不便指明。

表1:测试数据及对应结果
线程池尺寸 任务数 没有应用线程池所用的时间(单位:毫秒,OS:win) 应用线程池所用的时间(单位:毫秒,OS:win) 没有应用线程池所用的时间(单位:毫秒,OS:Solaris) 应用线程池所用的时间(单位:毫秒,OS:Solaris)
1 5000 3896 130 6513 327
2 5000 3455 151 6221 659
4 5000 3425 120 5448 433
8 5000 3475 160 5769 1478
16 5000 3505 211 5785 1970
32 5000 3455 251 6403 875
64 5000 3595 501 5182 1103
128 5000 3515 881 5154 405
256 5000 3495 3104 5502 1589
512 5000 3425 5488 5667 1262
16 1 20 0 22 3
16 2 20 20 21 13
16 4 20 10 27 10
16 8 20 20 22 24
16 16 30 20 29 48
16 32 40 20 46 108
16 64 60 20 72 199
16 128 110 20 148 335
16 256 201 20 252 132
16 512 411 40 522 382
16 1024 811 71 1233 610
16 2048 1552 80 2045 135
16 4096 2874 250 4828 787




图1.线程池的尺寸的对服务器程序的性能影响
根据以上统计数据可得出下图:



图2.任务数对服务器程序的冲击

数据分析如下:

图1 是改变线程池尺寸对服务器性能的影响,在该测试过程中,服务器的要完成的任务数固定为为5000。从图1中可以看出合理配置线程池尺寸对于大量任务处理的效率有非常明显的提高,但是一旦尺寸选择不合理(过大或过小)就会严重降低影响服务器性能。理论上"过小"将出现任务不能及时处理的情况,但在图表中显示出某些小尺寸的线程池表现很好,这是因为测试驱动中有很多线程同步开销,且这个开销相对于完成单个任务的时间是不能忽略的。"过大"则会出现线程间同步开销太大的问题,而且在线程间切换很耗CPU时间,在图表显示的很清楚。可见任何一个好技术,如果滥用都会造成灾难性后果。

图2是用不同数量的任务来冲击服务器程序,在该测试过程中,服务器线程池尺寸固定为16。可以看出线程池在处理少量任务时的优势不明显。所以线程池技术有一定的适应范围,关于适用范围将在后面讨论。但对于大量的任务的处理,线程池的优势表现非常卓越,服务器程序处理请求的时间虽然有波动,但是其平均值相对小多了。

值得注意的是测试方案中,统计任务的完成时间没有包含了创建线程池的时间。在实际线程池工作时,即利用线程池处理任务时,创建线程池的时间是不必计算在内的。

由于测试驱动程序有很多同步代码,特别是等待线程执行完毕的同步(代码中为sleepToWait(long l)方法的调用),这些代码降低了代码执行效率,这是测试驱动一个缺点,但这个测试驱动可以说明线程池相对于简单使用线程的优势。

关于高级线程池的探讨

简单线程池存在一些问题,比如如果有大量的客户要求服务器为其服务,但由于线程池的工作线程是有限的,服务器只能为部分客户服务,其它客户提交的任务,只能在任务队列中等待处理。一些系统设计人员可能会不满这种状况,因为他们对服务器程序的响应时间要求比较严格,所以在系统设计时可能会怀疑线程池技术的可行性,但是线程池有相应的解决方案。调整优化线程池尺寸是高级线程池要解决的一个问题。主要有下列解决方案:

方案一:动态增加工作线程

在一些高级线程池中一般提供一个可以动态改变的工作线程数目的功能,以适应突发性的请求。一旦请求变少了将逐步减少线程池中工作线程的数目。当然线程增加可以采用一种超前方式,即批量增加一批工作线程,而不是来一个请求才建立创建一个线程。批量创建是更加有效的方式。该方案还有应该限制线程池中工作线程数目的上限和下限。否则这种灵活的方式也就变成一种错误的方式或者灾难,因为频繁的创建线程或者短时间内产生大量的线程将会背离使用线程池原始初衷--减少创建线程的次数。

举例:Jini中的TaskManager,就是一个精巧线程池管理器,它是动态增加工作线程的。SQL Server采用单进程(Single Process)多线程(Multi-Thread)的系统结构,1024个数量的线程池,动态线程分配,理论上限32767。

方案二:优化工作线程数目

如果不想在线程池应用复杂的策略来保证工作线程数满足应用的要求,你就要根据统计学的原理来统计客户的请求数目,比如高峰时段平均一秒钟内有多少任务要求处理,并根据系统的承受能力及客户的忍受能力来平衡估计一个合理的线程池尺寸。线程池的尺寸确实很难确定,所以有时干脆用经验值。

举例:在MTS中线程池的尺寸固定为100。

方案三:一个服务器提供多个线程池

在一些复杂的系统结构会采用这个方案。这样可以根据不同任务或者任务优先级来采用不同线程池处理。

举例:COM+用到了多个线程池。

这三种方案各有优缺点。在不同应用中可能采用不同的方案或者干脆组合这三种方案来解决实际问题。

线程池技术适用范围及应注意的问题

下面是我总结的一些线程池应用范围,可能是不全面的。

线程池的应用范围:

需要大量的线程来完成任务,且完成任务的时间比较短。
WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,你可以想象一个热门网站的点击次数。
但对于长时间的任务,比如一个Telnet连接请求,线程池的优点就不明显了。因为Telnet会话时间比线程的创建时间大多了。

对性能要求苛刻的应用,比如要求服务器迅速相应客户请求。
接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。
突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。
结束语

本文只是简单介绍线程池技术。可以看出线程池技术对于服务器程序的性能改善是显著的。线程池技术在服务器领域有着广泛的应用前景。希望这项技术能够应用到您的多线程服务程序中。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=539819

Sunday, April 08, 2007

网络协议RFCL转载

(转贴并修订,原翻译作者不详)


Network Working Group(网络工作组) R. Fielding
Request for Comments: 2616 UC Irvine
Obsoletes(过时弃用): 2068 J. Gettys
Category: Standards Track (类别:标准组 ) Compaq/W3C
J. Mogul
Compaq
H. Frystyk
W3C/MIT
L. Masinter
Xerox
P. Leach
Microsoft
T. Berners-Lee
W3C/MIT
June 1999



超文本传输协议-HTTP/1.1


本备忘录状况
本文档说明了用于互联网社区的标准化跟踪协议,但还需要讨论和建议以便更
加完善。请参考"互联网官方协议标准"(STD1)来了解本协议的标准化状态。分发
散布本文是不受限制的。

版权声明
Copyright (C) The Internet Society (1999). All Rights Reserved.

摘要

超文本传输协议(HTTP)是一种应用于分布式、协作式、超媒体信息系统的应
用层协议。它是一种通用的,状态无关的协议,可以用于除了超文本以外,还可以
通过扩展它的请求方法,错误代码和报头[47]来完成更多任务,比如名称服务和分
布对象管理系统。HTTP的一个特点是数据表示方式的典型性(typing)和可协商性,
允许建立独立于被传输数据的系统。

HTTP在1990年WWW全球信息刚刚起步的时候就得到了应用。本规范定义了HTTP/
1.1协议,这是RFC 2068的升级版[33]。

[页码1]
------------------------------------------------------------------------

目录
1 Introduction (介绍)...........................................7
1.1 Purpose(目的)..............................................7
1.2 Requirements (要求).........................................8
1.3 Terminology (术语)..........................................8
1.4 Overall Operation (概述)...................................12
2 Notational Conventions and Generic Grammar(标志转换及通用语法)
.....................14
2.1 Augmented BNF (扩充的范式).................................14
2.2 Basic Rules (基本规则).....................................15
3 Protocol Parameters (协议参数)...............................17
3.1 HTTP Version (版本)........................................17
3.2 Uniform Resource Identifiers (统一资源标识)................18
3.2.1 General Syntax (通用语法)...............................19
3.2.2 http URL .................................................19
3.2.3 URI Comparison (URI对比)................................20
3.3 Date/Time Formats (时间日期格式)...........................20
3.3.1 Full Date (完整日期)....................................20
3.3.2 Delta Seconds ............................................21
3.4 Character Sets (字符集)....................................21
3.4.1 Missing Charset (不见了的字符集)........................22
3.5 Content Codings (内容编码).................................23
3.6 Transfer Codings (传输编码)................................24
3.6.1 Chunked Transfer Coding (大块数据传输编码)..............25
3.7 Media Types (媒介类型).....................................26
3.7.1 Canonicalization and Text Defaults .......................27
3.7.2 Multipart Types (复合类型)..............................27
3.8 Product Tokens (产品记号)..................................28
3.9 Quality Values (质量值)....................................29
3.10 Language Tags (语言标签)...................................29
3.11 Entity Tags (实体标签).....................................30
3.12 Range Units (范围单位).....................................30
4 HTTP Message (HTTP 消息).....................................31
4.1 Message Types (消息类型)...................................31
4.2 Message Headers (消息头)...................................31
4.3 Message Body (消息主体)....................................32
4.4 Message Length (消息长度)..................................33
4.5 General Header Fields (通用头字段).........................34
5 Request (请求)...............................................35
5.1 Request-Line (请求行)......................................35
5.1.1 Method (方法)...........................................36
5.1.2 Request-URI (请求-URI)..................................36
5.2 The Resource Identified by a Request ........................38
5.3 Request Header Fields (请求头字段).........................38
6 Response (应答)..............................................39
6.1 Status-Line (状态行).......................................39
6.1.1 Status Code and Reason Phrase (状态码和原因短语)........39
6.2 Response Header Fields (应答头字段)........................41


[页码2]
------------------------------------------------------------------------

7 Entity (实体)...................................................42
7.1 Entity Header Fields (实体头字段)..........................42
7.2 Entity Body (实体主体).....................................43
7.2.1 Type (类型).............................................43
7.2.2 Entity Length (实体长度)................................43
8 Connections (连接)...........................................44
8.1 Persistent Connections (持久连接)..........................44
8.1.1 Purpose (目的)..........................................44
8.1.2 Overall Operation(概述).................................45
8.1.3 Proxy Servers (代理服务器)..............................46
8.1.4 Practical Considerations (实践中的考虑).................46
8.2 Message Transmission Requirements (消息传送请求)...........47
8.2.1 Persistent Connections and Flow Control
(持久连接和流程控制)..................47
8.2.2 Monitoring Connections for Error Status Messages
(出错状态消息的监测连接).........48
8.2.3 Use of the 100 (Continue) Status
(状态号100的使用).........................48
8.2.4 Client Behavior if Server Prematurely Closes Connection
(如果服务器过早关闭连接,客户端的行为).................50
9 Method Definitions (方法的定义)..............................51
9.1 Safe and Idempotent Methods (安全和幂等方法)...............51
9.1.1 Safe Methods (安全方法).................................51
9.1.2 Idempotent Methods (幂等方法)...........................51
9.2 OPTIONS (选项).............................................52
9.3 GET (命令:GET)............................................53
9.4 HEAD (命令:HEAD)..........................................54
9.5 POST (命令:POST)..........................................54
9.6 PUT (命令:PUT)............................................55
9.7 DELETE (命令:DELETE)......................................56
9.8 TRACE (命令:TRACE)........................................56
9.9 CONNECT (命令:CONNECT)....................................57
10 Status Code Definitions (状态码定义)........................57
10.1 Informational 1xx (报告:1XX)..............................57
10.1.1 100 Continue (100 继续).................................58
10.1.2 101 Switching Protocols(交换协议).......................58
10.2 Successful 2xx (成功:2XX).................................58
10.2.1 200 OK (200 正常).......................................58
10.2.2 201 Created (201 已建立)................................59
10.2.3 202 Accepted (202 已接受)...............................59
10.2.4 203 Non-Authoritative Information (无认证信息)..........59
10.2.5 204 No Content (无内容).................................60
10.2.6 205 Reset Content (重置内容)............................60
10.2.7 206 Partial Content (部分内容)..........................60
10.3 Redirection 3xx (3XX 重定向)..............................61
10.3.1 300 Multiple Choices (复合选择).........................61
10.3.2 301 Moved Permanently (永久转移)........................62
10.3.3 302 Found (找到)........................................62
10.3.4 303 See Other (访问其他)................................63
10.3.5 304 Not Modified (304 没有更改).........................63
10.3.6 305 Use Proxy (305 使用代理)............................64
10.3.7 306 (Unused) (306 未使用)...............................64


[页码3]
------------------------------------------------------------------------

10.3.8 307 Temporary Redirect (暂时重定向).....................65
10.4 Client Error 4xx (客户端错误)..............................65
10.4.1 400 Bad Request (错误请求).............................65
10.4.2 401 Unauthorized (未认证)..............................66
10.4.3 402 Payment Required (支付请求)........................66
10.4.4 403 Forbidden (禁止)...................................66
10.4.5 404 Not Found (没有找到)...............................66
10.4.6 405 Method Not Allowed (方法不容许)....................66
10.4.7 406 Not Acceptable (不可接受)..........................67
10.4.8 407 Proxy Authentication Required (要求代理认证).......67
10.4.9 408 Request Timeout (请求超时).........................67
10.4.10 409 Conflict (冲突)....................................67
10.4.11 410 Gone (离开)........................................68
10.4.12 411 Length Required (长度请求).........................68
10.4.13 412 Precondition Failed (预处理失败)...................68
10.4.14 413 Request Entity Too Large (请求的实体太大了)........69
10.4.15 414 Request-URI Too Long (请求URI太长了)...............69
10.4.16 415 Unsupported Media Type (不支持的媒提类型)..........69
10.4.17 416 Requested Range Not Satisfiable (请求范围未满足)...69
10.4.18 417 Expectation Failed (期望失败)......................70
10.5 Server Error 5xx (服务器错误 5XX)..........................70
10.5.1 500 Internal Server Error (内部错误)....................70
10.5.2 501 Not Implemented (未实现)............................70
10.5.3 502 Bad Gateway (错误网关)..............................70
10.5.4 503 Service Unavailable (服务不可用)....................70
10.5.5 504 Gateway Timeout (网关超时)..........................71
10.5.6 505 HTTP Version Not Supported (版本不支持).............71
11 Access Authentication (访问认证)............................71
12 Content Negotiation (内容协商)..............................71
12.1 Server-driven Negotiation (服务器驱动协商).................72
12.2 Agent-driven Negotiation (客户端驱动协商)..................73
12.3 Transparent Negotiation (透明协商).........................74
13 Caching in HTTP (缓存)......................................74
13.1.1 Cache Correctness (缓存正确性)..........................75
13.1.2 Warnings (警告).........................................76
13.1.3 Cache-control Mechanisms (缓存控制机制).................77
13.1.4 Explicit User Agent Warnings (直接用户代理警告).........78
13.1.5 Exceptions to the Rules and Warnings (规则和警告的异常).78
13.1.6 Client-controlled Behavior(客户控制的行为)..............79
13.2 Expiration Model (过期模式)................................79
13.2.1 Server-Specified Expiration (服务器指定过期)............79
13.2.2 Heuristic Expiration (启发式过期).......................80
13.2.3 Age Calculations (年龄计算).............................80
13.2.4 Expiration Calculations (过期计算)......................83
13.2.5 Disambiguating Expiration Values (消除歧义的过期值).....84
13.2.6 Disambiguating Multiple Responses (消除歧义的复合应答)..84
13.3 Validation Model (确认模式)................................85
13.3.1 Last-Modified Dates (最后更改日期)......................86


[页码4]
------------------------------------------------------------------------

13.3.2 Entity Tag Cache Validators (实体标签缓存确认)..........86
13.3.3 Weak and Strong Validators (强弱确认)...................86
13.3.4 Rules for When to Use Entity Tags and Last-Modified Dates
当使用实体标签和最后更改日期字段时候的规则................89
13.3.5 Non-validating Conditionals (不可确认的条件)............90
13.4 Response Cacheability (应答缓存功能).......................91
13.5 Constructing Responses From Caches (从缓存构造应答)........92
13.5.1 End-to-end and Hop-by-hop Headers (端对端和逐跳的头)....92
13.5.2 Non-modifiable Headers (不可以更改的报头)...............92
13.5.3 Combining Headers (组合报头)............................94
13.5.4 Combining Byte Ranges (组合字节范围)....................95
13.6 Caching Negotiated Responses (缓存协商过的应答)............95
13.7 Shared and Non-Shared Caches (共享和非共享缓存)............96
13.8 Errors or Incomplete Response Cache Behavior
(错误或不完整应答缓存行为)................97
13.9 Side Effects of GET and HEAD (GET和HEAD的单方影响).........97
13.10 Invalidation After Updates or Deletions
(更新和删除后的失效)...................97
13.11 Write-Through Mandatory (强制写通过).....................98
13.12 Cache Replacement (缓存替换).............................99
13.13 History Lists (历史列表).................................99
14 Header Field Definitions (头字段定义)......................100
14.1 Accept (接受).............................................100
14.2 Accept-Charset (接受的字符集).............................102
14.3 Accept-Encoding (接受的编码方式)..........................102
14.4 Accept-Language (接受的语言)..............................104
14.5 Accept-Ranges (接受的范围)................................105
14.6 Age (年龄,生存期)........................................106
14.7 Allow (容许)..............................................106
14.8 Authorization (认证)......................................107
14.9 Cache-Control (缓存控制)..................................108
14.9.1 What is Cacheable (什么可以缓存).......................109
14.9.2 What May be Stored by Caches (什么将被缓存存储)........110
14.9.3 Modifications of the Basic Expiration Mechanism
基本过期机制的更改.........111
14.9.4 Cache Revalidation and Reload Controls
缓存重确认和重载控制..................113
14.9.5 No-Transform Directive (不可转换指示)..................115
14.9.6 Cache Control Extensions (缓存控制扩展)................116
14.10 Connection (连接).......................................117
14.11 Content-Encoding (内容编码).............................118
14.12 Content-Language (内容语言).............................118
14.13 Content-Length (内容长度)...............................119
14.14 Content-Location (内容位置).............................120
14.15 Content-MD5 (内容的MD5校验).............................121
14.16 Content-Range (内容范围)................................122
14.17 Content-Type (内容类型).................................124
14.18 Date (日期).............................................124
14.18.1 Clockless Origin Server Operation (无时钟服务器操作)..125
14.19 ETag (标签).............................................126
14.20 Expect (期望)...........................................126
14.21 Expires (过期)..........................................127
14.22 From (来自).............................................128


[页码5]
------------------------------------------------------------------------


14.23 Host (主机).............................................128
14.24 If-Match (如果匹配).....................................129
14.25 If-Modified-Since (如果自从某个时间已经更改)............130
14.26 If-None-Match (如果没有匹配)............................132
14.27 If-Range (如果范围).....................................133
14.28 If-Unmodified-Since (如果自从某个时间未更改)............134
14.29 Last-Modified (最后更改)................................134
14.30 Location (位置).........................................135
14.31 Max-Forwards (最大向前量)...............................136
14.32 Pragma (语法)...........................................136
14.33 Proxy-Authenticate (代理鉴别)...........................137
14.34 Proxy-Authorization (代理授权)..........................137
14.35 Range (范围)............................................138
14.35.1 Byte Ranges (字节范围)...............................138
14.35.2 Range Retrieval Requests (范围重获请求)..............139
14.36 Referer (引用自)........................................140
14.37 Retry-After (一会重试)..................................141
14.38 Server (服务器).........................................141
14.39 TE .......................................................142
14.40 Trailer (追踪者)........................................143
14.41 Transfer-Encoding(传输编码)..............................143
14.42 Upgrade (改良)..........................................144
14.43 User-Agent (用户代理)...................................145
14.44 Vary (变更).............................................145
14.45 Via (经由)..............................................146
14.46 Warning (警告)..........................................148
14.47 WWW-Authenticate (WWW鉴别)..............................150
15 Security Considerations (对安全的考虑).......................150
15.1 Personal Information(个人信息)........................151
15.1.1 Abuse of Server Log Information (服务日志信息的滥用)...151
15.1.2 Transfer of Sensitive Information (敏感信息传输).......151
15.1.3 Encoding Sensitive Information in URI's
(对URI中的敏感信息编码).................152
15.1.4 Privacy Issues Connected to Accept Headers
(可接受头的秘密问题)..............152
15.2 Attacks Based On File and Path Names
基于文件名和路径的攻击 .......................153
15.3 DNS Spoofing (DNS欺骗)....................................154
15.4 Location Headers and Spoofing (位置头和欺骗)..............154
15.5 Content-Disposition Issues (内容部署问题).................154
15.6 Authentication Credentials and Idle Clients
(信用鉴定与空闲客户) ................155
15.7 Proxies and Caching (代理与缓存)..........................155
15.7.1 Denial of Service Attacks on Proxies
(对代理的服务拒绝攻击)....................156
16 Acknowledgments (致谢).....................................156
17 References (参考)..........................................158
18 Authors' Addresses (作者地址)..............................162
19 Appendices (附录)..........................................164
19.1 Internet Media Type message/http and application/http
(网络媒体类型:消息/HTTP和应用/HTTP)......164
19.2 Internet Media Type multipart/byteranges
(网络媒体类型:多部分/字节范围)...................165
19.3 Tolerant Applications (容错的应用)........................166
19.4 Differences Between HTTP Entities and RFC 2045 Entities
(HTTP的实体和RFC2045中实体的区别)....167


[页码6]
------------------------------------------------------------------------


19.4.1 MIME-Version (MIME版本)................................167
19.4.2 Conversion to Canonical Form (语言形式转变)............167
19.4.3 Conversion of Date Formats (日期格式的转变)............168
19.4.4 Introduction of Content-Encoding (内容编码的介绍)......168
19.4.5 No Content-Transfer-Encoding (不要内容传输编码)........168
19.4.6 Introduction of Transfer-Encoding (传输编码的介绍).....169
19.4.7 MHTML and Line Length Limitations
(MHTML与行长度限制).......................169
19.5 Additional Features (附加的一些性质)......................169
19.5.1 Content-Disposition (内容部署).........................170
19.6 Compatibility with Previous Versions (与久版本的兼容性)...170
19.6.1 Changes from HTTP/1.0 (自HTTP/1.0的更改)...............171
19.6.2 Compatibility with HTTP/1.0 Persistent Connections
(与HTTP/1.1持久连接的兼容性)......172
19.6.3 Changes from RFC 2068 (自RFC268的更改).................172
20 Index (索引)...............................................175
21 Full Copyright Statement (完整版权声明)....................176


1 概述

1.1 目的

超文本传输协议(HTTP)是一种应用于分布式、合作式、多媒体信息系统的应
用层协议。在1990年WWW全球信息刚刚起步的时候HTTP就得到了应用。HTTP的第一个
版本叫做HTTP/0.9,是一种为了在互联网传输原始数据的简单协议。由RFC 1945[6]
定义的HTTP/1.0进一步完善了这个协议,它允许消息以类似MIME的格式传送,包含
有关数据传输的维护信息和关于请求/应答的句法修正。但是,HTTP/1.0没有充分考
虑到分层代理、高速缓存的作用以及对持久连接和虚拟主机的需求。并且,随着不
完善的应用程序的激增,HTTP/1.0迫切需要一个新的版本,以便使两个通信应用程序
能够确定彼此的真实性能。

本规范定义的协议为"HTTP/1.1"。这个协议与HTTP/1.0相比,要求更为严格,
以确保各项功能得到可靠实现。

实际的信息系统除了简单的取获外,还要求有更多的功能性,包括查找,前端
更新和注解。HTTP使用开放的方法集和报头集以指示请求[47]的目的。它是建立在
统一资源标识符(URI)[3]提供的地址(URL)[4]和名字(URN)上[20],以指出方法应用
于哪个资源的。消息以类似于一种叫做多用途网络邮件扩展(MIME)[7] 的互联网
邮件的格式传递。

[页码7]
------------------------------------------------------------------------

HTTP也是用于用户代理及服务代理(网关)到其他网络系统的通用通信协议,
这样的网络系统可能由SMTP[16],NNTP[13],FTP[18],Gopher[2]和WAIS[10]协议支持。
这样,HTTP允许不同的应用程序对资源进行基本的超媒体访问。

1.2 要求

本文的关键词"必须", "绝对不可以", "要求", "最好", "最好不", "应该",
"不应该", "推荐", "可以", 和 "可选"将由RFC 2119[34]解释。

一个实现(具体应用)如果不能满足协议提供的一个或多个“必须”或“要求”等
级的要求,是不符合要求的。一个实现如果满足所有“必须”或“要求”等级以及所有
“应该”等级的要求,则可称为"绝对符合"的;若满足所有“必须”等级的要求但不能
满足所有“应该”等级的要求则被称为"部分符合"。

1.3 术语

本规范用到了若干术语,以表示HTTP通信中各参与者和对象扮演的不同角色。

“连接”(Connection)
为通信而在两个程序间建立的传输层虚拟电路。

“消息”(Message)
HTTP通信中的基本单元。它由一个结构化的八比特字节序列组成,与第4章定义
的句法相匹配,并通过连接得到传送。

“请求”(Request)
一种HTTP请求消息,参看第5章的定义。

“应答”(Response)
一种HTTP应答消息,参看第6章的定义。

[页码8]
------------------------------------------------------------------------

“资源”(Resource)
一种网络数据对象或服务,可以用第3.2节定义的URI描述。资源可以以多种表
现方式(例如多种语言,数据格式,大小和解决方案)或其他不同的途径获得。

“实体”(Entity)
作为请求或应答的有效负荷而传输的信息。一个实体包含报头形式的维护信息
和消息体形式的内容,由第7节详述.

“表示方法”(Representation)
一个应答包含的实体是由内容协商决定的,如第12章所述。一个特定的应答状
态所对应的表示方法可能有多个。

“内容协商”(Content Negotiation)
为“请求”服务时选择适当表示方法的机制,如第12节所述。任何应答里实体的
表示方法都是可协商的(包括出错应答).

“变量”(Variant)
在任何给定时刻,与一个资源对应的表示方法可以有一个或更多。每个表示方
法称作一个变量。使用变量这个术语并不一定意味着资源是由内容协商决定的。

“客户”(Client)
为发送“请求”而建立连接的程序.

“用户代理”(User agent)
能初始化“请求”的客户。常见的如浏览器,编辑器,蜘蛛(搜索引擎),或其他
的终端用户工具。

“服务器”(Server)
接受连接以便通过发回应答为请求提供服务的应用程序。任何给定的程序都可
以既是客户端又是服务器;我们使用这些术语仅指特定连接中程序扮演的角色,而
不是指通常意义上程序的功能,同样,任何服务器都可以基于每个请求的性质转换
行为,扮演原服务器,代理,网关,或者隧道等角色。


[页码9]
------------------------------------------------------------------------

“原服务器”(Origin server)
给定的资源驻留或创建的地方.

“服务代理”( Proxy)
一个既做服务器又做客户端的中介程序,其用途为其他客户发送请求,请求在
内部得到服务,或者经过可能的翻译后向前传递请求。一个代理服务器必须能同时
实现本规范中对客户和服务器要求。"透明代理"是一种除了代理要求的验证和鉴定
外不修改请求或应答的代理。"非透明代理"是一种修改请求或应答以便为用户代理
提供附加服务的服务代理,附加服务包括类注释服务,媒体类型转换,协议简化,
或者匿名滤除等。除非经明确指出,HTTP代理的“要求”对两种代理都适用。

“网关”(gateway)
为其他服务器充当中介的服务器。与代理服务器不同,网关接收请求,仿佛它
就是被请求资源所在的原服务器;提出请求的客户可能觉察不到它正在同网关通信。

“隧道”(tunnel)
一个在两个连接之间充当仅仅中继的中间程序。从启动时候起,隧道虽然可能
已经被HTTP请求初始化了,但它并被认为是HTTP通信的一方。当中继连接的两端都
关闭的时候,隧道就不再存在了。

“高速缓存”(Cache)
一个程序的应答消息的本地存储和控制此信息存储、检索和删除的子系统。一
个缓存存储可缓存的应答是为了减少以后对同样请求的应答时间和网络带宽消耗。
任一客户或服务器都可能包含一个高速缓存,但缓存不能应用于一个充当隧道的服
务器。

“可缓存”(Cacheable)
如果允许存储应答信息的一份拷贝以便运用于应答后继请求,这个应答就是可
缓存的。用来确定HTTP应答的可缓存能力的规则在13节中有定义。即使一个资源是
可缓存的,也可能在缓存能否将缓存的拷贝用于某特定请求一问题上存在附加的约
束。


[页码10]
------------------------------------------------------------------------

“直接,第一手的“(first-hand)
如果一个应答直接从原服务器而来,而没有经过不必要的服务代理的延迟,那
么应答就是直接(第一手的)的。如果它的有效性已经被原服务器直接认证,那么
这个应答也同样是第一手的.

”明确终止时间“(explicit expiration time)
原服务器指定的一个实体在无需进一步确认的情况下就不再被缓存返回的时间。

”启发式终止时间“(heuristic expiration time)
当没有”明确终止时间“可用时, 由高速缓存所指定的终止时间.

”年龄“(Age)
一个应答的年龄是从它被发送,或被原服务器成功确认到现在的时间.

”保鲜寿命“(Freshness lifetime)
一个应答生成和过期之间的时间长度。

”新鲜的“(Fresh)
如果一个应答的年龄还没有超过保鲜寿命,它就是新鲜的。

”陈旧的“(Stale)
一个应答的年龄已经超过了它的保鲜寿命,就是陈旧的。

”语义透明(semantically transparent)
当缓存的使用除了改善性能外既未影响请求客户机也未影响原服务器时,缓存
对于某特定的应答就是工作于语义透明方式了。当缓存语义透明时,客户收到的应
答恰好与原服务器直接处理请求后得到的应答相同(除了逐段转接的报头部分)。

“有效性判别器”(Validator)
用来查找一个缓存记录是否是一个实体的等效拷贝的协议元素。(例如,一个实
体标签(entity tag)或最终更改时间(Last-Modified time))。

“上游/下游”(upstream/downstream)
上游和下游描述了消息的流动:所有消息都从上游流到下游。

[页码11]
------------------------------------------------------------------------


“向内/向外”(inbound/outbound)
向内和向外指的是消息的请求和应答路径:"向内"即"移向原服务器","向外"
即"移向用户代理".


1.4 概述

HTTP协议是一种请求/应答协议。 与主机建立连接后,客户以请求方法,URI
和协议版本的形式向服务器发送请求,继以类MIME信息,其中包括请求修订,客户
信息和可能的正文内容。服务器用状态行进行应答,这包括消息的协议版本和成功
或错误代码,后面是包括服务器信息,实体维护信息和可能的实体内容的类MIME消
息。HTTP和MIME之间的关系在附录19.4节中描述。

大部分的HTTP通信由用户代理引发,由对某原服务器上一个资源的请求构成。
最简单的情形,可以经用户代理(UA)和原服务器(O)之间的单一连接(v)完成。

请求链---------------------->
用户代理(UA)-------------单一连接(v)--------------原服务器(O)
<-----------------------应答链

当一个或多个中介在请求/应答链中出现的时候,会出现更复杂的情形。 常见
的中介形式有三种:服务代理,网关和隧道。服务代理是一种向前传送代理,它接
收绝对形式的URI请求,重写全部或部分消息,然后把重新格式化后的请求发送到URI
确定的服务器上。网关是一种接收代理,它充当其他服务器的上层,如果必要的话,
它将请求翻译为下层服务器的协议。隧道不改变消息而充当两个连接之间的中继点;
它应用于通信需要穿过中介(如防火墙),而中介甚至不能理解信息内容的时候。

请求链-------------------------------------->
UA-----v-----A-----v-----B-----v-----C-----v-----O
<-------------------------------------应答链


上图显示了用户代理和原服务器之间的三个中介(A,B和C)。请求或应答消息
游历整条链的时候需通过四个独立的连接。这个特性很重要,因为某些HTTP通信选
项只能应用于到最近的非隧道邻居,链的终点的连接,或者沿着链的所有连接。图
表尽管是线性的,每部分可能都在忙于多路同时通信。例如,B可以接收来自不同于
A的许多客户的请求,并且/或者转送到不同于C的服务器,与此同时,它还在处理A
的请求。


[页码12]
------------------------------------------------------------------------

任何非隧道的通信成员都可以使用内部的缓存来处理请求。高速缓存的作用是
如果沿着链的一个成员对请求采用了高速缓冲的应答,请求/应答链就会大大缩短。
以下图解作为结果产生的链,假定B拥有来自O(通过C)的一个从前应答的备份,
请求尚未被UA或A缓存。
请求链---------->
UA-----v----------A-----v-----B-----C----O
<---------应答链

并不是所有的应答都能有效地缓存,一些请求可能含有修改量,对缓存动作有
特殊的要求。缓存动作和缓存应答的HTTP要求将在第13节定义。

实际上,目前万维网上有多种结构和配置的高速缓存和代理被实验或使用。这
些系统包括节省越洋带宽的国家级代理缓存层,广播或多点通信缓存接口,通过
CD-ROM分配缓存数据子集的机构,等等。HTTP系统应用在宽频带连接的企业局域网
中,通过PDA的低耗无线连接和间歇式连接访问。HTTP1.1的目标是支持各种各样的
应用配置,引进协议结构以满足那些需要较高可靠性,可以排除故障或至少指示故
障的网络应用的要求。

HTTP通信在通常发生在TCP/IP连接上。默认端口是TCP 80,不过其它端口也可
以使用。这并不妨碍HTTP在其他因特网协议或者其他的网络上实现。http仅仅期望
可靠的传输;任何提供这种保证的协议都可以使用;HTTP/1.1请求和应答结构在某
(传输)协议上的传输数据单元映象问题已经不在本规范的讨论范围之内。

[页码13]
------------------------------------------------------------------------


在http/1.0中,大部分的实现为每个请求/应答交换使用了新连接。而http/1.1
中,一个连接可以用于一个或更多请求/应答交换,虽然连接可能会因为各种原因中
断(见第8.1节)。

2 符号惯例和一般语法

2.1 扩充BNF

本文档规定的所有机制都用两种方法描述:散文体(prose)和类似于RFC 822的
扩充范式(BNF)。要理解本规范,使用者需熟悉符号表示法。扩充BNF包括下列结构:

名字 = 定义
一条规则的名字仅仅是名字本身(没有任何"<"和">"),由等号"="把它和后面
的定义分离开。只有空格是用来缩排后续行,以表示定义的规则多于一行时,空格才
是真正重要的。一些基本规则使用了大写字母,如SP,LWS,HT,CRLF,DIGIT,ALPHA,
等等。无论何时,如果加上尖括号会有利于识别规则名字,就可以在定义的范围内
使用。

"文字"
文字原文使用引号。除特殊情况,原文对外界不敏感。

规则1 | 规则2
由竖线("|")分开的元素是可选的,例如,"yes | no"表示yes或no都是可接受
的。

(规则1 规则2)
围在括号里的多个元素视作一个元素。这样"(elem (foo | bar) elem)"允许标
记序列"elem foo elem"和elem bar elem"。

* 规则
"*" 放在元素前表示重复。完整的形式是"*元素",表示元素至少出现
次,至多出现次。默认值是0和无穷大,所以"*(元素)"允许任何数值,包括零;
"1*元素"至少需要一次;"1*2element"允许一次或两次。


[规则]
方括号里是任选元素;"[foo bar]"相当于"*1(foo bar)".

[页码14]
------------------------------------------------------------------------

N 规则
特殊的重复:"(元素)"相当于"*(元素)"; 也就是说,(元素)正好出
现了次。这样2DIGIT是一个两位数字,3ALPHA是一个由三个字符组成的字符串。

#规则
类似于"*",结构"#"是用来定义一系列元素的。完整的形式是"#元素,表
示至少个元素,至多个元素,元素之间被一个或多个逗号(",")以及可选的线
性空白区(LWS)隔开了。这就使得列表的一般形式变得非常容易;像
( *LWS element) *( *LWS ","*LWS element ))
就可以表示为
1#element
无论在哪里使用这个结构,空元素都是容许的,但是不计入元素出现的次数。换句
话说,"(元素), , (元素) "是允许的,但是仅仅视为两个元素。因此,在至少需要
一个元素的地方,必须存在至少一个非空元素。默认值是0和无穷大,这样,
"#element"允许任何数字,包括零;"1#element"至少需要1个元素
;"1#2element"允许1个或2个元素。

;注释
用分号引导的注释,从规则正文的右边一段距离开始直到行尾。这是做注释的
简单方法,注释与说明是同样有用的。

隐含 *LWS
范式文法所描述的语法是基于字的。除非特别注明,线性空白可出现在任何两个
相邻字之间(标记或引用字符串),以及相邻字和间隔符之间,并不改变一个域的含
义。任何两个标记之间(下面会对"token(标记)"进行定义)必须有至少一个分割符,
否则将会被理解为单一标记。

2.2基本规则

下面的规则描述了基本的解析结构,贯穿于本规范的全文。US-ASCII(美国信息
交换标准码)字符规定是由ANSI X3.4-1986[21]定义的。


[页码15]
------------------------------------------------------------------------

OCTET = <任意八比特的数据序列>
CHAR = <任意ASCII字符(八进制 0-127)>
UPALPHA = <任意大写字母"A"..."Z">
LOALPHA = <任意小写字母"a"..."z">
ALPHA = UPALPHA | LOALPHA
DIGIT = <任意数字0,1,...9>
CTL = <任意控制字符(octets 0 - 31)及删除键DEL(127)>
CR =
LF =
SP =
HT =
<"> =


HTTP/1.1将CR LF的顺序定义为除了报文以外任何协议元素的行尾标志(宽松应
用见附录19.3)。报文内部的行尾标志是由它的关联媒体类型定义的,如3.7节所述。

CRLF = CR LF

如果延续行由空格或水平制表开始,HTTP/1.1 的报头字段值可以折叠到到多行
上。所有的线性空白,包括折叠,具有同SP一样的语义。接收者在解释域值或将消息
转送到下游时可以用单个SP替代任何线性空白。

LWS = [CRLF] 1*( SP | HT )

文本规则仅仅适用于描述字段的内容和不会被消息语法分析程序解析的值。
*TEST的字可以包含ISO-8859-1[22]里的字符,也可以包含字符规定里的字符[14]。

TEXT = <除CTLs以外的任意OCTET,但包括LWS>

一个CRLF仅仅在作为报头字段延续的一部分时才在TEXT定义里允许使用。并且
最好折叠的LWS会在文本分析前被单个的空格所取代。

十六进制数字字符用在数个协议元素里。

HEX = "A" | "B" | "C" | "D" | "E" | "F"
| "a" | "b" | "c" | "d" | "e" | "f" | DIGIT



[页码16]
------------------------------------------------------------------------


许多HTTP/1.1的报头字段值是由LWS或特殊字符分隔的字构成的。这些特殊字符
必须包含在引用字符串里,方可用在参数值(如3.6节定义)里。

token (标记) = 1*<除CTLs与分割符以外的任意 CHAR >
separators(分割符) = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT

用圆括号括起来的注释可以包含在一些HTTP报头字段里。只有作为域值定义的一
部分时注释才是允许的。在其他域里,圆括号视作字段值的一部分。

comment (注释)= "(" *( ctext | quoted-pair | comment ) ")"
ctext = <除"(" and ")"以外的任意TEXT >

一个文本字符若在双引号里,则当作一个字。

quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext = <除<">以外的任意TEXT >

反斜线("\")可以用作单一字符引用结构,但仅在引号字符串或注释里。

quoted-pair = "\" CHAR




3 协议参数

3.1 HTTP版本

HTTP使用"<主要>.<次要>"的编号方案表示协议版本。协议的版本方针是希望允
许发送者表示消息的格式和性能以便理解更深一层的HTTP通信, 而不仅仅是当前通
信获得的特征。消息构件的增加不影响通信动作,或仅仅增加了扩展域值,版本号并
没有因此变化。协议的改变增加了一些特征,没有改变一般的消息解析规则,但是增
加了消息的语义或者暗含了发送者新增的功能,这时<次要>数字便要增大。当协议的
消息格式改变时,<主要>数字增大。

[页码17]
------------------------------------------------------------------------

HTTP消息的版本在消息的第一行HTTP-版本字段里表示。

HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT

注意主要和次要数字必须看作是两个分离的整数,二者都可以增加到比单位数
还大。这样,HTTP/2.4的版本比HTTP/2.13低,依次HTTP/2.3的版本比HTTP/12.3低。
首位的零必定被接收者忽视,一定不要发送。

一个发送包含HTTP版本"HTTP/1.1"的请求或应答消息的应用,必须至少有条件
的服从本规范。至少有条件服从本规范的应用应该在消息里使用"HTTP/1.1"的HTTP
-版本,任何与 HTTP/1.0不兼容的消息则必须这样做。关于何时发送特殊的HTTP-版
本值,更多资料请参看RFC 2145[36].

一项应用使用了某HTTP版本,则这此版本应是它至少有条件服从的最高HTTP版本.

服务代理和网关转送的消息的协议版本与应用版本不同时,需要小心。既然协议
版本表示发送者的协议性能,代理/网关一定不能发送标示版本高于它本身的实际版本
的消息。如果收到更高版本的请求,代理/网关必须降低请求的版本,或者发出出错应
答,或者切换到隧道动作。

由于自RFC 2068[33]发布后发现的HTTP/1.0代理协同工作问题,高速缓存代理必须,
网关可以,隧道必须不将请求提升到它们支持的最高版本。代理/网关的应答的主要版
本号必须同请求相同。

注:HTTP版本的转换可能会包含相关版本必需或禁止的报头字段修改。

3.2 统一资源标识符(URI)

URI的许多名字已为人所知:WWW地址,通用文件标识符,通用资源标识符[3],
以及最后统一资源定位器(URL)[4]和统一资源名称(URN)[20]的结合。只要与HTTP相
关,统一资源定位器只是格式化的字符串,它通过名称,地址,或任何别的特征确定
了资源的位置。


[页码18]
------------------------------------------------------------------------

3.2.1 一般语法


根据使用时的上下文,HTTP里的URI可以表示成绝对形式或基于已知的URI的相
对形式。两种形式的区别是根据这样的事实:绝对URI总是以一个主题名字作为开头,
其后是一个冒号。关于URL更详尽的信息请参看"统一资源标识符(URI):一般语法和
语义",RFC 2396 [42](代替了RFCs 1738 [4]和RFC 1808 [11])。本规范采用那份规
范里关于"URI-参考","绝对URI","相对URI","端口","主机","绝对路径"和"认证"
的定义.

HTTP协议不对URI的长度作事先的限制。服务器必须能够处理它们服务的任何资
源的URI,并且应该能够处理无限长度的URI。如果它们提供可以产生这种URI的基于
GET的形式。服务器在一个URI长度超过它能处理的范围时,应该返回414(URI太长)
状态值。(见 10.4.15小节)

注:服务器在依赖长于超过255字节的URI时应谨慎,因为一些旧的客户或服务代
理的实现可能不支持这些长度.

3.2.2 http URL

“http”主题用来通过HTTP协议定出网络资源的位置。本节为HTTP的URL定义了这
种主题相关的语法和语义.
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

如果端口为空或未给出,就假定为80。语义即:已识别的资源放在服务器上,
在那台主机的那个端口上监听TCP连接,对资源的请求的URI为绝对路径(5.1.2节)。
无论什么时候,都应该避免在URL里使用IP地址(参看RFC 1900 [24])。
如果绝对地址没有出现在URL里,它用作对资源的请求的URI时必须作为"/"给出。
如果代理收到主机名不是一个资格充分域名的,它可以为收到主机名加上域名。
如果代理收到一个资格充分的域名,一定不能改变主机名。



[页码19]
------------------------------------------------------------------------

3.2.3 URI 比较

当比较两个URI是否匹配时,客户应该对整个URI进行区分大小写,以八字节为
单元的比较。以下情况例外:

1)一个为空或未给定的端口等同于那个URI索引里的默认端口;
2)主机名的比较必须是不区分大小写的;
3)主题名(“HTTP”)的比较必须是不区分大小写的;
4)一个空绝对路径等同于绝对路径"/"。


除了"保留"或"危险"集里的字符(参见RFC 2396 [42]),字符等同于它们的""%" HEX HEX"编码.

例如,以下三个URI是等同的:

http://abc.com:80/~smith/home.html
http://ABC.com/%7Esmith/home.html
http://ABC.com:/%7esmith/home.html


3.3 日期/时间格式

3.3.1 完整日期

历史上的HTTP应用一直允许三种不同的表示日期/时间戳的格式:

Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format


第一种格式是作为Internet标准提出来的,它表示一个由RFC 1123 [8](RFC 822[9]
的升级版本)定义的固定长度的子集。第二种格式使用比较普遍,但是基于废弃的
RFC 850 [12],需要(应该)用四位数表示年份。对日期值进行语法分析的HTTP/1.1
客户和服务器必须接受所有三种格式(为了同HTTP/1.0兼容),虽然它们必须只产生
RFC 1123格式以在报头字段里表示HTTP日期值。(在小节19.3中可以看到更多信息)

注:鼓励日期值的接收者在接受可能由非HTTP应用发来的日期值时要健壮,因为
这种非HTTP应用有时是通过服务代理/网关向SMTP和NNTP检索或发送消息的。


[页码20]
------------------------------------------------------------------------


所有的HTTP日期/时间戳都必须毫无例外的以格林威治平均时间(GMT)表示。这
是为了HTTP,GMT完全等同于UTC(协调世界时间)。这在前两种形式里用三个字母的
时区缩写-GMT的蕴含来表示,并且读取ASC时间格式时必须先被假定。HTTP日期区分
大小写,除了在语法中作为SP特别包括的LWS外,一定不能包括额外的LWS。

HTTP-date = rfc1123-date | rfc850-date | asctime-date
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
rfc850-date = weekday "," SP date2 SP time SP "GMT"
asctime-date = wkday SP date3 SP time SP 4DIGIT
date1 = 2DIGIT SP month SP 4DIGIT
; day month year (e.g., 02 Jun 1982)
date2 = 2DIGIT "-" month "-" 2DIGIT
; day-month-year (e.g., 02-Jun-82)
date3 = month SP ( 2DIGIT | ( SP 1DIGIT ))
; month day (e.g., Jun 2)
time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
; 00:00:00 - 23:59:59
wkday = "Mon" | "Tue" | "Wed"
| "Thu" | "Fri" | "Sat" | "Sun"
weekday = "Monday" | "Tuesday" | "Wednesday"
| "Thursday" | "Friday" | "Saturday" | "Sunday"
month = "Jan" | "Feb" | "Mar" | "Apr"
| "May" | "Jun" | "Jul" | "Aug"
| "Sep" | "Oct" | "Nov" | "Dec"

注意:HTTP对日期/时间戳格式的请求仅仅应用在协议流里。客户和服务器不必
为了用户表示,请求记录及其他而使用这些格式.

3.3.2 Delta秒

一些HTTP报头字段收到消息后,允许以十进制整数秒表示的时间值。
delta-seconds = 1*DIGIT

3.4 字符集

HTTP使用的关于术语"字符集"的定义和MIME中所描述的一样.



[页码21]
------------------------------------------------------------------------

本文档中的术语"字符集"指一种用一个或更多表格将一个八字节序列转换成一
个字符序列的方法。注意另一方向的无条件转换是不需要的,在这种转换里,并不
是所有的字符都能在一个给定字符集里得到,并且字符集可能提供多个八进制序列
表示一个特定字符。这个定义将允许各种字符编码方式,从简单的单表格映射如
US-ASCII到复杂的表格交换方法如ISO-2022的技术里所使用的。然而,与MIME字符
集名字相关联的定义必须充分说明从八字节变换到字符所实现的映射。特别的,使
用外部轮廓信息来决定精确映射是不允许的.。

注:这里使用的术语"字符集"更一般的被称作一种"字符编码"。不过,既然HTTP
和MIME使用同样的注册表,共用术语是很重要的。

HTTP字符集用不区分大小写的标记表示。完全标记集合由IANA字符集注册表[19]
定义。
charset = token

尽管HTTP允许用任意标记作为字符集的值,任何在IANA字符集注册表里有预先
确定值的标记必须表示该注册表定义的字符集。对那些IANA定义的字符集,应用应
该限制使用字符集。

实现者应该注意IETF字符集的要求[38][41].

3.4.1 失踪字符集

一些HTTP/1.0软件将没有字符集参数的内容类型报头错误的理解为"接收者应该
猜猜。"若发送者希望避免这种情况,可以包含一个字符集参数,即使字符集是
ISO-8859-1;当知道这样不会使接收者混淆以后,应该这样做。

不幸的是,一些旧的HTTP/1.0不能适当处理详细的字符集参数。HTTP/1.1接收
者必须重视发送者提供的字符集标注;当最初显示文档时,那些提供"猜"字符集服
务的用户代理必须使用内容类型域中的字符集,如果它们支持那个字符集,而不是
接收者的首选项。(参看3.7.1节)



[页码22]
------------------------------------------------------------------------
3.5 内容编码

内容编码值表示一种已经或可以应用于实体的编码变换。内容编码主要用来允许
文档压缩,换句话说,有效的变换而不损失它的基本媒体类型的特性,也不丢失信息。
经常地,实体以编码形式储存,直接传送,只能由接收者译码.

content-coding = token

所有内容编码值都是不区分大小写的。HTTP/1.1在接收译码字段(14.3节)和内容
译码字段(14.11节)的报头字段里使用内容编码值。尽管该值描述了内容编码,更重要
的是它指出需要什么机制来解码。

互联网赋值机构(IANA)充当内容编码值标记的注册处。最初,注册表包含下列标记:

gzip(GUNzip压缩文件)
一种由文件压缩程序"gzip"(GNU zip)---如RFC 1952所描述---生成的编码格式。
这种格式是一种32位CRC Lempel-Ziv编码(LZ77)。

compress(压缩)
由通用UNIX文件压缩程序"compress"生成的编码格式。这种格式是一种具有可
适应性的Lempel-Ziv-Welch编码。对未来的编码来说,用程序名识别编码格式是不可
取。在这里他们的用处是作为历史实践的代表而不是好的方案。为了同以前的HTTP实
现相兼容,应用应该将"x-gzip"和"x-compress"分别等同于"gzip"和"compress"。

deflate(缩小)
RFC 1950 [31]定义的"zlib"格式与RFC 1951 [29]描述的"deflate"压缩机制的
组合。


[页码23]
------------------------------------------------------------------------

Identity(标识)
缺省(标识)编码;无论如何,不进行转化的应用。这种内容译码仅被用于接受
译码报头,并且不能被用在内容编码报头。

新的内容译码值的标记应该注册;为了允许客户和服务器间的互用性,内容译
码运算的规范需要实现一个可被公开利用并能独立实现的新值,并且与这节中内容
译码定义的目的相一致。

3.6 传输编码

传输编码值被用来表示一个已经能够,或可能需要应用于一个实体的编码转化,
为的是能够确保通过网络安全传输。这不同于内容译码,传输译码是消息的特性而
不是原始实体的特性。
transfer-coding = "chunked" | transfer-extension
transfer-extension = token *( ";" parameter )

参数采用属性/值对的形式.

参数 = 属性 "=" 值
属性 = 标记
值 = 标记 | 引用-串(quoted-string)

所有传输译码值是大小写不敏感的。HTTP/1.1在TE报头字段(14.39节)和传输译
码报头字段(14.41节)运用传输译码。

无论何时一个传输译码都被应用于一个消息体,传输译码的设置必须包括"大块",
除非消息被结束连接停止。当"大块"传输译码被应用时,它必须是应用于消息体的
最后传输译码。并且对消息主体使用“大块”编码方式不能超过一次。这些规则让接
收者确定消息的传输长度(4.4节)。

传输译码与MINE[7]的内容传输译码值相类似,它被设计为在7BIT的传输服务上
安全传输二进制数据。不过,安全传输对纯8位传输协议有不同的焦点。在HTTP中,
消息体唯一不安全的特性是确定准确的主体长度这个难点(7.2.2节),或在共享传输
上加密的要求。

[页码24]
------------------------------------------------------------------------

网络分配数字权威(IANA)担任了传输译码值标记注册处的角色。起初,注册包
含如下标记:大块"chunked"(3.6.1节),"identity"身份(3.6.2节),"gzip"(3.5节),
"compress"(3.5节),和"deflate"(3.5节).

新的传输编码值标记应和新的内容编码值标记以相同的方式注册(3.5节)。

服务器接收到一个不能理解的传输译码实体时应返回501(未实现),并且关闭连接。
服务器不能向HTTP/1.0客户发送传输译码。

3.6.1 成块传输编码(Chunked Transfer Coding)

成块编码更改消息主体,为的是将它以一系列大块的形式传送,每一个连同它自
己尺寸的指示器,后面跟随一个可选的trailer,里面包含着entity-header字段。这
允许动态的生成将和必须的信息一起被传送的内容,必须的信息是为了让接收者确认
他已经获得全部消息。
Chunked-Body = *chunk
last-chunk
trailer
CRLF

chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*("0") [ chunk-extension ] CRLF

chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
trailer = *(entity-header CRLF)

大块尺寸域是用16进制表示大块尺寸的一串数字。成块编码以任一尺寸为0的大
块结束,后面是trailer,以一个空行终止.

trailer允许发送者在消息末尾包含附加的HTTP报头字段。trailer头字段可
被应用于表示说明包含于trailer的HTTP报头字段 (14.40节)

[页码25]
------------------------------------------------------------------------


一个服务器在应答中使用了”大块“传输译码时不能在任何报头字段使用trailer,
除非以下至少一条为发生:

a)请求包括一个TE报头字段,表明"trailer"在应答的转移译码中是可被接受的,
就像14.39节中描述的那样。

b)服务器是应答的原始服务器。trailer的域完全由可选的元数据构成,这个接
收者可以在不接受这个元数据的情况下使用消息(在一个原始服务器可接受的方式中)。
换句话说,原始服务器愿意接受trailer域可能会在通往客户的通道上被默默放弃的
这种可能性。

当消息被一个HTTP/1.1服务代理接收,并且转发给一个HTTP/1.0接收者时,这种
需要求防止了一个互用性的失误。它避免了一个依据协议将使在服务代理上必须安置
一个可能无限大的缓冲器情形发生。

对一个大块主体进行解码处理的例子已在附录19.4.6中作过介绍。

所有HTTP/1.1应用程序必须能接受和解码"大块"传输译码,并且必须忽略它们不
理解的大块扩展扩展名。

3.7 媒体类型

为了提供公开的,可扩展的数据输入和类型协商,HTTP在Content-Type(14.17节)
和Accept(14.1节)报头字段中运用网络媒体类型.

media-type = type "/" subtype *( ";" parameter )
type = token
subtype = token


参数可能在属性/值的形式上遵循类型/亚类型。(如3.6节定义)

类型,子类型,和参数属性名称是大小写不敏感的。参数值敏感与否,取决于
参数名称的意义。线性空白区(LWS)不能被用于类型和子类型之间,也不能用于一种
属性和他的值之间。一个参数存在与否对媒体类型的处理可能有重要意义,这取决
于它在媒体类型注册中的定义。





如果不能改变自己,那么就努力改变世界!
报告
[广告]

robinfoxnan

秀才




UID 19596
精华 0
积分 250
帖子 10
威望 45 点
金钱 85 元
阅读权限 100
注册 2006-3-27
状态 离线 #3 中 小
发表于 2006-3-28 01:11 资料 短消息 加为好友
26-32页,速度有点慢了,170多页呢,靠


[页码26]
------------------------------------------------------------------------

注意:一些旧的HTTP应用不能识别媒体类型参数。向一个旧的HTTP应用传送数
据时,应该仅当被要求使用类型/子类型定义时候,才发送媒体类型参数。
媒体类型值已经在网络分配数码权威(IANA[19])注册。媒体类型的注册程序在
RFC 1590[17]中略述。不鼓励使用未经注册的媒体类型。

3.7.1 规范化和原文缺省

网络媒体类型以语言的典型形式注册。一个通过HTTP消息传输的实体必须在传
送前就已经使用适当的语言规范形式说明过了,"text"类形除外,就像下段定义的
那样。

当在规范的形式中,"text"类型的媒体子类型使用CRLF作为行的结束。HTTP放
松了这个要求,当一个完整实体传输完成时,允许传送的"text"媒体以简单的CR或
LF独立作为一行的结束符。HTTP应用程序必须接受CRLF,单个CR,和单个LF在通过
HTTP接收的文本媒体中作为行结束符号。而且,如果文本使用了一个字符集,而字
符集没有分别用字节13和10表示CR和LF,比如有些多字节的字符集(译:UTF8等)。
HTTP允许使用那种字符集定义的等同CR和LF的任何字节序以表示行结束。这个关于
行结束的灵活性仅仅应用于一个实体主体中的文本媒体; 一个单独CR或LF在任意
HTTP控制结构中都绝对不能代替CRLF。(例如报头字段和多部边界)。

如果一个“实体主体”使用一种“内容编码”方式进行编码,则后面的数据必须使
用前面定义好的形式进行编码。

"charset"(字符集)参数和一些媒体类型一起使用用来定义数据的字符集(见
3.4节)。当发送者没有提供清楚的charset参数,通过HTTP接收数据时,"text"类型
的媒体子类型就被定义成有一个值为"ISO-8859-1"的默认"charset"。数据在不同于
"ISO-8859-1"或它子集的字符集中,必须被标以适当的"charset"值。 参见3.4.1节
中兼容性问题。

3.7.2 多部分类型(Multipart type)

MIME提供了很多"多重部分"类型,--在单个消息体内封装一个或多个实体。所
有的多重部分类型共享一个通用语法,就像RFC 2046[40]的5.1.1节中定义的那样。


[页码27]
------------------------------------------------------------------------

并且必须包括一个作为媒体类型值一部分的边界参数。这个消息体自成为一个
协议元素,因此在主体两部分间必须只能用CRLF来表示行结束。不同于RFC 2046,
任一多重消息的末尾必须为空;HTTP应用程序不能传送末尾(即使原始的多重部分包
含一个末尾)。存在这些制约是为了保护一个多重部分消息实体的固有本质,而结束
多重部分边界已经在消息体的"结尾"加以表明。

通常,HTTP将一个消息体视为与任何其他媒体类型无异,严格如负载。当它出
现在206应答时,会有一个例外:"多重部分/字符串"类型(附录19.2),它将会被一
些HTTP缓存机制解释,就像13.5.4和14.16节中描述的那样。除此情况外,一个HTTP
用户代理在接收多重部分类型时,应该遵循与一个MINE用户代理相同或相似的行为,
一个多重部分消息体中每一个部分的MIME头字段,如果超越了MIME定义的语义,则
它对HTTP没有任何意义。

通常,一个HTTP用户代理在接收多重部分类型时,应该遵循与一个MINE用户代
理相同或相似的行为。如果一个应用程序收到一个不能识别的多重部分的子类型,
这个应用程序必须视它与"multipart/mixed"(多重部分/混合)等价。

注:"多重部分/形态-数据"形式已被明确定义,这种携带形式的数据适合通过
POST请求方法处理,正如RFC 1867[15]中所描述的.

3.8 产品标记

通过软件名和版本,产品标记被通讯应用软件用来识别自己。多数领域还把产
品标记用空格分开,用于列举成为应用程序重要部分的子产品。按惯例,列举出产
品的顺序是为了识别应用软件的重要性。

product = token ["/" product-version]
product-version = token

例:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Server: Apache/0.8.4

[页码28]
------------------------------------------------------------------------

产品标记应言简意赅。它们不能用来做广告或其他不重要的信息。虽然任一标
记字符都可以出现在产品-版本上,但这个标记应该仅被用来做一个版本标识(同类
产品中成功的版本仅区别在产品价值的版本部分)。

3.9 质量值(Quality Values)

HTTP内容协商(12节)运用简短的"浮点"数字来表明不同可协商参数之间的相关
重要性("权值")。权值可以是一个从0到1的规格化了实数,0是最小值,是最大值。
如果参数是个为0的质量值,那么这个参数的内容不被客户接受。HTTP/1.1应用软
件不可以在小数点后产生多于三位的数字。这些值的用户配置也应受限于这种方式。
qvalue = ( "0" [ "." 0*3DIGIT ] )
| ( "1" [ "." 0*3("0") ] )

"质量值" 是一个不当的用词,因为这些值仅仅表现想要得到的质量的相对的
降级程度。

3.10 语言标签

一个语言标签和自然语言一样,用来说、写、或被人用来与其他人传递信息。
计算机语言明显不包括在内。HTTP在Accept-Language 和Content-Language字段内
使用语言标签。

HTTP语言标签的语法和注册和RFC 1766[1]中定义的一样。总之,一个语言标签
是由一部分或多部分构成:一个主要语言标签和可能为空的一系列下子标签:

language-tag = primary-tag *( "-" subtag )
primary-tag = 1*8ALPHA
subtag = 1*8ALPHA

标签中不允许出现空格,标签对大小写不敏感。由IANA来管理语言标签中的命
名空间。典型的标签包括:

en, en-US, en-cockney, i-cherokee, x-pig-latin


[页码29]
------------------------------------------------------------------------

任何两个字母的主标签都是一个ISO-639语言的缩写,两个大写字母的子标签是
一个ISO-3166的国家代码。(上面的最后三个标签是未经注册的标签;除最后一个之
外所有都是可在将来注册的例子标签)。

3.11 实体标签

实体标签用来从相同请求资源中比较两个或更多实体。HTTP/1.1在Etag(14.19
节),If-match(14.24节),If-None-match(14.26节),和If-rang(14.27节)报头字
段中运用实体标签。关于它们怎样像缓存确认一样使用和比较的定义在13.3.3节中。
一个实体标签由一个不透明的带引号的字符串组成,可能带一个虚弱指示器的前缀。

entity-tag = [ weak ] opaque-tag
weak = "W/"
opaque-tag = quoted-string

在两个实体逐字节相等时,一个"健壮的实体标签"可以被使用同一资源的两个
实体共享。

一个"虚弱(weak)的实体标签",由"W/"前缀表示,在实体相等且可以互相替代
而在语义上不发生重大的变动时,可以会被使用同一资源的两个实体共享。一个弱
实体标签只能在弱对比时使用。

一个实体标签必须在所有与一个特殊资源相连系实体的版本中是独一无二的。
一个给定的实体标签值可以用于不同的URI请求获得的实体,但相同实体标签值与不
同URI请求获得的实体结合的使用方式,不意味着那些实体的等同。

3.12 范围单位(Range Units)

HTTP/1.1允许一个客户请求获得应答实体中的一部分。HTTP/1.1在“Range”(
范围)(14.35节)和“Content-Range”(内容范围)报头字段(14.16节)运用范围单位。
一个实体可根据不同的结构单位分解成子区域.

range-unit = bytes-unit | other-range-unit
bytes-unit = "bytes"
other-range-unit = token

HTTP/1.1中定义的唯一的范围单位是"byte"。HTTP/1.1实现时可能忽略使用其
他单位指定的范围。

[页码30]
------------------------------------------------------------------------

HTTP/1.1的设计允许应用软件不依靠有关“范围”的知识而实现。


4 HTTP消息

4.1 消息类型

HTTP消息由从客户到服务器的请求和从服务器到客户的应答组成.

HTTP-message = Request | Response ; HTTP/1.1 messages

请求(第5节)和应答(第6节)的消息是用一般的消息格式RFC 822[9]来传输实体的
(消息的有效载荷)。这两种消息都是由开始行,零或者更多的报头字段(也叫做头),
象征头结束的空行(譬如说只有回车换行字符的行)组成,有时可能会有一个信息体。

generic-message = start-line
*(message-header CRLF)
CRLF
[ message-body ]
start-line = Request-Line | Status-Line

为了健壮性,服务器必须在期望收到请求行的地方忽略任何接收到的空行。
换句话说,如果服务器在读一条信息开始的协议流时先收到了CRLF,它必须忽略这
个CRLF。

某个有问题的HTTP/1.0客户端在POST请求后会产生额外的CRLF。为了重述什么
是BNF明确禁止的,一个HTTP/1.1客户端不可以在请求的前面和后面加多余的CRLF。

4.2 消息头

HTTP报头字段包括常规头(4.5节),请求头(5.3节),应答头(6.2节)和实体头
(7.1节)字段。它们遵循RFC822[0]3.1节中给出的同一个常规的格式。每一个报头
字段由名字、紧跟一个冒号":"和域值构成。域名是大小写不敏感的。尽管单个的
SP是首选的,域值前还是可能有任意LWS。报头字段能通过把各个额外行(至少有一
个SP或HT)前置来扩展一行为多行。当产生HTTP结构时,应用程序必须遵循"共同格
式",因为这可能存在一些实现,不能接受超越共同规范的任何东西。


[页码31]
------------------------------------------------------------------------

message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
field-content = and consisting of either *TEXT or combinations
of token, separators, and quoted-string>


这个域的内容不包括任何前缀或后缀的的LWS:线形空白区出现在field-value
第一个非空格字符前或出现在field-value最后一个非空格字符的后面。去掉这些前
缀或后缀的LWS可以去掉,而不会影响field-content的意思。 在解析字段值的时候
或者向下游推进消息流之前,任何位于field-content之间的LWS用单个的SP(空格)
替换。

以什么样的顺序接收具有不同字段名字的报头字段并不重要。但是,一个好的
习惯是先送常规头字段,接着是请求头或应答头的字段,最后是实体头字段。

使用同一个字段名的多个报头字段可能会同时出现在一个消息中,条件是,当
且仅当那个字段的完整字段值被定义成了逗号分割的列表(例如语法为:#(values))。
这就一定能在没有改变消息语义的情况下把多个报头字段组合成一个"域名:域值"对,
方法就是把后续的字段连到前一个的尾部,中间用逗号隔开。这些接收报头字段的顺
序对解析组合字段值是很重要的,因此在一个消息在向前推送的过程中,代理绝对不
能改变这些字段值的顺序。

4.3 消息体

HTTP消息的消息体(译注:消息不一定有消息体,如果有的话)用用来传输由
请求和应答相关的实体。只有当传使用了传输编码的时候,消息体和实体主体才是
不同的,传输编码会在Transfer-Encoding报头字段标明(14.41节)。

message-body = entity-body
|

Transfer-Encoding字段必须用来指定应用程序为了保证消息安全和正确传输的
编码方式。Transfer-Encoding(传输编码)是一种消息的属性而不是实体,因此在
请求/应答链上它可能被任何应用程序加上或去掉。(译注:一个中继连接的两端自
己协商编码,与其他的传输部分无关)(事实上, 3.6节对什么时候使用某种编码做
了限制。)

[页码32]
------------------------------------------------------------------------

对于请求和应答,什么时候消息中允许有消息体的规则是不一样的。

请求中是否有消息体是在报头的Content-Length或Transfer-Encoding字段中标
示的。如果请求方式的规范不允许请求中加入实体则请求中绝对不能包括消息体。
服务器应该读取并处理任何请求中的消息体;如果请求方法没有关于实体的语义定义,
那么在处理这个请求时必须忽略消息体。

对于应答消息,是否其中包括消息体依赖于请求的方法和应答的状态码(6.1.1节)。
所有HEAD请求方法的应答都不能包括消息体,即便是实体头字段的出现让人觉得应
该有(消息体)。所有1XX(信息的),204(无内容的),和304(没有修改的)的应答都
绝对不能包括消息体。其他的所有应答都应该包括消息体,即便它可能长度为零。

4.4 消息的长度

一条消息的transfer-length(传输长度)是消息体在消息中的长度,也就是说,
当被传输编码处理以后的长度。当一条消息包含消息体,实体的传输长度由以下几
条决定(以先后顺序):

1.任何绝对不能包含信息体的应答消息中(如1xx,204,304应答和任何对HEAD
请求的回应),总是在报头字段后面的首行以空行(译注:CRLF)的方式结束,而
不管实体头是否出现了。

2.如果Transfer-Encoding(14.41节)报头字段出现了,而且值不是"identity",
那么传输长度就可以通过使用"chunked"编码后来确定,除非消息由于连接关闭而中
断了。

3.如果Content-Length报头字段(14.13节)出现,那么它的字节记数(十进制值)
将出现在entity-length和transfer-length字段中。但是,如果这两个长度不一致,
Content-Length字段就绝对不可以被发送(例如:如果Transfer-Encoding出现了)。
如果接收一个消息,里面同时有Transfer-Encoding和Content-Length字段,那么后
面的一条必须忽略。

[页码33]
------------------------------------------------------------------------


4.如果消息使用了媒体类型"multipart/byteranges"(多部份/位范围),并且
ransfer-length(传输长度)字段没有另外指定,那么这个媒体类型就自限定了传
输长度。除非发送方知道接收者能处理这种媒体类型,否则绝对不可以使用;请求
中出现了由HTTP1.1客户在Range(范围)报头中指定的“byteranges”(字节范围),
意味着客户可以解析"multipart/byteranges"应答。

如果1.0代理不能理解"multipart/byteranges"(多部份/位范围),范围报头字
段也可能会被向前传送;这样的话,服务器必须采用本节第1,3或5条定义的方式界
定信息体。

5.当服务器正在关闭连接。(关闭连接不能用来说明请求体的结束,因为它将
致使服务器没有可能再送回应答。)

为了与HTTP/1.0应用程序兼容,包含消息体的HTTP/1.1请求必须也包括一个有
效“Content-Length”(内容长度)报头字段,除非知道服务器兼容HTTP/1.1。如
果一个请求包含了消息体却没有给出内容长度,如果服务器不能判断消息长度的话,
将会应答400(错误的请求),或者如果它坚持想要收到一个有效内容的长度应答411
(要求长度)。

所有的HTTP/1.1应用程序必须接受"chunked"传输编码(3.6节),因此当消息的
长度不能事先确定的时候,允许使用这种机制来处理消息。

消息绝对不能同时包括Content-Length(内容长度)报头字段和不可识别的
transfer-coding(传输编码)。如果消息确实包括了一个不可识别的传输编码字段,
必须忽略Content-Length(内容长度)字段。

当一个Content-Length(内容长度)在消息体允许的地方给出时,这个字段的
值必须和消息体中字节数一致。当接受或者发现一个无效的长度时,HTTP/1.1用户
代理必须通告用户。

4.5 常规报头字段

有一些报头字段在一般的请求和应答消息中都适用,但是不适用于传输中的实
体。这些报头字段只应用于那些发送的消息。


[页码34]
------------------------------------------------------------------------
general-header = Cache-Control ; 14.9
| Connection ; 14.10
| Date ; 14.18节
| Pragma ; 14.32节
| Trailer ; 14.40节
| Transfer-Encoding ; 14.41节
| Upgrade ; 14.42节
| Via ; 14.45节
| Warning ; 14.46节

常规报头字段名字的扩展必须和协议版本的变化相结合。然而,当出现了新的
或实验性质的报头字段,如果信息传输中所有参与者都把它们看做常规报头字段的
话,也可以为它赋予常规报头字段的语义。未被承认的头一般被当做实体报头字段
对待。

5 请求

从客户机到服务器的请求,其首行包括:应用于资源的方法,资源的标识,以
及协议的版本号
Request = Request-Line ; 5.1节
*(( general-header ; 4.5节
| request-header ; 5.3节
| entity-header ) CRLF) ; 7.1节
CRLF
[ message-body ] ; 4.3节

5.1 请求行

请求行的开头是方法标识,接下来是请求URL和协议版本号,以回车换行结束。
各部分之间用空格符(SP)分隔,除了最后的CRLF(回车换行)外,不允许有回车
(CR)和换行(LF)。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

[页码35]
------------------------------------------------------------------------

5.1.1方法

方法标记指的是在请求URI对指定资源所使用的方法,方法名是大小写敏感的。

Method = "OPTIONS" ;9.2节
| "GET" ;9.3节
| "HEAD" ;9.4节
|"POST" ;9.5节
|"PUT" ;9.6节
|"DELETE" ;9.7节
|"TRACE" ;9.8节
|"CONNECT" ;9.9节
| extension-method
extension-method = token

资源允许的方法列表能由"Allow"(允许)报头字段说明(14.7节)。因为被允许
方法组可以动态改变,所以返回的应答码总是通知客户机当前方法是否被允许。如果
原服务器知道一个方法,但该方法不允许应用于请求的资源,原服务器应当返回状态
码405(方法不允许)。如果方法在原服务器中无法识别或者没有实现,原服务器应当
返回状态码501(没有实现)。所有的普通的服务器都必须支持GET(获取)和HEAD(报
头)方法。其他的方法都是可选的,然而,假若以上的方法实现了,他们就必须按照
第九章里所说明的语义来实现。

5.1.2 请求URL

  请求URL是一种全球统一的应用于资源请求的资源标识符(3.2 节)。
 
    Request-URI = "*" | absoluteURI | abs_path | authority

请求URI的四个选项是依赖于请求的特性的。星号"*"表示请求不是应用于某个
特别资源的,而是服务器本身,只有当所用的方法不是必须应用于某个资源时候,
("*")才是允许的。举例如下

OPTIONS * HTTP/1.1

对服务代理发出请求时,绝对URI地址是不可缺少的。请求服务代理转发请求,
或者利用有效期内的缓存进行服务,返回应答。注意:代理服务器可能会把请求转
发给另一个服务代理或直接转发给绝对URI地址指定的服务器。为了避免请求循环,
代理服务器必须能识别所有的服务器名字,包括任何别名,本地变异名,数字形式
的IP地址。请求行一般是这样的:

[页码36]
------------------------------------------------------------------------
     
     GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

为了在未来的HTTP版本的所有请求中转换绝对URL地址,所有基于HTTP/1.1的
服务器必须能接受绝对URL地址形式的请求,即便基于HTTP/1.1的客户机将只把这
样的请求发给服务代理。

授权形式只是在CONNECT(连接)方法中用到(9.9节)。

请求URI的最一般形式是用来标识原服务器或网关上的资源。这种情况下,绝对
URL路径必须作为请求URL传送(看3.2.1节,绝对路径),表示网络位置的部分必须
放在HOST报头字段传输。例如,希望一个客户想得到原服务器的资源,就要在
"www.w3.org"主机的80端口建立TCP连接发送以下行:
  
   GET /pub/WWW/TheProject.html HTTP/1.1
Host:www.w3.org

接下来是请求的其他部分,注意:绝对路径不能是空的;假如没有初始的URI,
必须给出"/"(服务器根目录)。

请求URL传输时候使用的格式在3.2.1节里有说明。如果用"%HEX HEX" [42]模
式编码,为了正确的解析请求,原服务器必须解码。对于无效的请求,服务器必须
给予一个带有合适状态码的应答。

当透明服务代理转发收到的请求URL给下一台网内的服务器时,绝对不可以重写
"绝对路径"部分,上面提到的用"/"代替空绝对地址情况除外。

注:当原服务器不恰当的使用"非保留URL字符"作保留使用时,"禁止重写"规则
防止代理服务器更改请求的含义。实现程序员应该知道,HTTP/1.1以前版本的服务
代理会改写请求URL。

[页码37]
------------------------------------------------------------------------

5.2"请求"定义的资源

一个因特网请求所标识的那个资源由请求URL和Host报头字段所决定。

在判定HTTP/1.1协议中标识的请求资源时,如果服务器不容许请求中的资源和
HOST字段不一样,那么原服务器就会忽略Host字段值。(查看19.6.1.1节了解HTTP
/1.1中 Host字段的其他要求)。

根据请求的主机区分资源的服务器,(有时指虚拟主机或无主机名情况),必须
用以下的规则判定"HTTP/1.1请求"中所请求的资源:

1.如果请求URI是绝对地址,主机是请求URI的一部分。任何Host报头字段都应
当被忽略。
2.假如请求URI不是绝对地址,且请求包括一个Host报头字段,则主机由该字段
的值所决定。
3.假如根据规定1或规定2得到主机是无效的,则应答当是一个400(错误请求)
的出错信息。

为了找出真正被请求的资源,对于一个缺乏主机标识字段的HTTP/1.0请求,接
收者可以尝试使用试探的方法。(例如:对于特定的主机,检测URI中某些唯一性的
东西)。

5.3"请求"报头字段

“请求”的报头字段允许客户传递关于请求的附加信息给服务器,还可以是有关
客户自己的信息。这些字段作为请求修饰成分,和程序语言中方法调用的参数有差不
多的含义。

[页码38]
------------------------------------------------------------------------

   请求报头 = 接收(Accept)           ;14.1节
|接收Charset (Accept-Charset) ;14.2节
|接收编码(Accept-Encoding) ;14.3节
|接收语言(Accept-Language) ;14.4节
|认证(Authorization) ;14.8节
|期望(Expect) ;14.20节
|源(From) ;14.22节
|主机(Host) ;14.23节
|假如匹配(If-Match) ;14.24节
|假如修改(If-Modified-Since) ;14.25节
|假如不匹(If-None-Match) ;14.26节
|假如归类(If-Range) ;14.27节
|假如不修改(If-Unmodified-Since ) ;14.28节
|最大转发量(Max-Forwards ;14.31节
|代理认证( Proxy-Authorization) ;14.34节
|范围(Range) ;14.35节
|提交者(Referer) ;14.36节
|TE ;14.39节
|用户代理(User-Agent) ;14.43节

随着协议版本的变化,“请求”报头字段的名字可以可靠的扩展。然而,如果
通信中的所有参与方都能识别新的或实验性的报头字段,那么这些字段就可以被赋
予报头字段的语义,不可识别的字段将被作为实体头来对待。

6 应答

接收和解析一个请求信息后,服务器发出一个HTTP应答消息。

     Response = Status-Line ; 6.1节
*(( general-header ; 4.5节
| response-header ; 6.2节
| entity-header ) CRLF) ; 7.1节
CRLF
[ message-body ] ; 7.2节

6.1 状态行

应答信息的第一行是状态行,由协议版本、数字状态码和相关的文本说明组成。
各部分间用空格符隔开,除了最后的CRLF回车换行外,中间不允许有回车或者换行。
     
   Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

6.1.1状态码与注解

状态码是试图理解和满足请求的一个三位数,这些码在第十章有完整定义。注
解短语是为了给出关于状态码的文本描述。状态码用于自动控制而注解短语是面向
用户的。客户机不需要检查或显示注解短语。


[页码39]
------------------------------------------------------------------------

状态码的第一位数字定义应答类型。后两位数字没有任何用来分类的任务。第
一位数字有五种值:

-1xx: 报告的 - 接收到请求,继续处理
-2xx 成功 - 操作成功的收到,理解和接受
-3xx 重定向 - 为了完成请求,必须采取进一步措施。
-4xx 客户端出错 - 请求的语法有错误或者不能完全被满足。
-5xx 服务器出错 - 服务器无法完成明显有效的请求。

为HTTP/1.1定义的状态码单个的值,和一个相应的一系列注解的例子介绍如下。
这儿列出的注解短语只是建议――它们可以被等价物取代而不会影响协议。

   Status-Code =
   "100" ; 10.1.1节: 继续
|"101" ; 10.1.2节: 转换协议
|"200" ; 10.2.1节: OK
|"201" ; 10.2.2节: 创建
|"202" ; 10.2.3节: 接受
   |"203" ; 10.2.4节: 非权威信息

|"204" ; 10.2.5节: 无内容
|"205" ; 10.2.6节: 重置内容
|"206" ; 10.2.7节: 局部内容
|"300" ; 10.3.1节: 多样选择
|"301" ; 10.3.2节: 永久移动
|"302" ; 10.3.3节: 创建
|"303" ; 10.3.4节: 观察别的部分
|"304" ; 10.3.5节: 只读
|"305" ; 10.3.6节: 用户代理
|"307" ; 10.3.8节 临时重发
|"400" ; 10.4.1节: 坏请求
|"401" ; 10.4.2节: 未授权的
|"402" ; 10.4.3节: 必要的支付
|"403" ; 10.4.4节: 禁用
|"404" ; 10.4.5节: 没找到
|"405" ; 10.4.6节: 不允许的方式
|"406" ; 10.4.7节: 不接受