+ -
当前位置:首页 → 问答吧 → apache 返回的content-length不对

apache 返回的content-length不对

时间:2009-09-01

来源:互联网

写后台的cgi程序,生成了一个html页面。这个html的size大概有25000那么大,但是从浏览器看,返回的content-length却只有24000左右,导致页面显示不全。 已经焦头烂额的搞了几天了,望哪个大虾鼎力相助。

cgi已经测试过,printf出来的结果是对的。就是通过apache返回来,内容少了一截,是不是跟系统的配置有关呢?

用的apache服务器,2.2.11版本,2.2.11,2.0.6版本都换过了,一样的结果。

作者: zubasha   发布时间: 2009-09-01

25000 字节还是K字节?

用C写的CGI? 牛。
content-length是在CGI里面设置的?还是Apache自动完成的?

作者: code_killer   发布时间: 2009-09-03

25000byte

content-length是apache自动完成的。

用过printf,打印出来的html源码是完整的,但是从apache吐出来以后,就不正确。

作者: zubasha   发布时间: 2009-09-03

编码?

作者: gundamff   发布时间: 2009-09-03

发现一个特点,无论我吐出的东西长度为多少,apache能吐出的固定长度为24520,超过了的字节就吐不出来了。 也就是最大的content-length 为24520,是不是哪里配置搞错了什么

作者: zubasha   发布时间: 2009-09-03

引用 3 楼 gundamff 的回复:
编码?



这个非常值得楼主关注。
如果是Apache自动完成content-length,有可能是因为CGI输出的文件中包含当前编码不支持的字符,导致计算出错误长度。

作者: code_killer   发布时间: 2009-09-06

我也在考虑是不是这个问题。我检查了一下同事的iconv库,到同事someone的目录ldd了一下他的apache,发现他的apache并不需要加载libiconv.so,但是我的apache安装完成后,就需要加载libiconv.so,这是为什么呢? 这是我同事的ldd结果 

  linux-gate.so.1 => (0xbfffe000) 
  libm.so.6 => /lib/libm.so.6 (0xb7ee7000) 
  libaprutil-1.so.0 => /home/someone/lib/libaprutil-1.so.0 (0xb7ed2000) 
  libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7eb3000) 
  libapr-1.so.0 => /home/someone/lib/libapr-1.so.0 (0xb7e90000) 
  libuuid.so.1 => /home/someone/lib/libuuid.so.1 (0xb7e8c000) 
  librt.so.1 => /lib/librt.so.1 (0xb7e83000) 
  libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7e50000) 
  libpthread.so.0 => /lib/libpthread.so.0 (0xb7e3c000) 
  libdl.so.2 => /lib/libdl.so.2 (0xb7e38000) 
  libc.so.6 => /lib/libc.so.6 (0xb7d18000) 

再去找另外一个同事的apache,他安装的apache,也不需要加载iconv的so,有什么静态库的安装方式吗? 
我的版本是2.2.13,用了内嵌的apr装的。 



如果我需要去检查编码的问题,应该有什么检查步骤?大虾指导一下。

作者: zubasha   发布时间: 2009-09-07

让你的CGI输出同样长度的HTML文件,内容全是英文字母。
如果这样能让客户端正常接收,就说明是编码的问题。

作者: code_killer   发布时间: 2009-09-09

使用 POSt

作者: unling   发布时间: 2010-09-20