关闭

往resin 服务器中发送post 报 POST requires content-length

884人阅读 评论(0) 收藏 举报

目前项目在开发环境使用的是tomcat  预发布环境和生产环境使用的是resin

在调用预发布中post接口中发现一直报 POST requires content-length 很是郁闷

通过查看resin源码发现一个很有意思的代码

com.caucho.server.http.HttpRequest

[java] view plaincopy
  1. public boolean initStream(ReadStream readStream, ReadStream rawRead)  
  2.     throws IOException  
  3.   {  
  4.     rawRead.setSibling(null);  
  5.   
  6.     if (getConnection().isDuplex()) {  
  7.       this._rawInputStream.init(rawRead);  
  8.       readStream.init(this._rawInputStream, null);  
  9.       return true;  
  10.     }  
  11.   
  12.     long contentLength = getLongContentLength();  
  13.   
  14.     if ((contentLength < 0L) && (257 <= getVersion()) && (getHeader("Transfer-Encoding") != null))  
  15.     {  
  16.       this._chunkedInputStream.init(rawRead);  
  17.       readStream.init(this._chunkedInputStream, null);  
  18.       return true;  
  19.     }  
  20.   
  21.     if (contentLength >= 0L) {  
  22.       this._contentLengthStream.init(rawRead, contentLength);  
  23.       readStream.init(this._contentLengthStream, null);  
  24.   
  25.       return true;  
  26.     }  
  27.     if (getMethod().equals("POST")) {  
  28.       this._contentLengthStream.init(rawRead, 0L);  
  29.       readStream.init(this._contentLengthStream, null);  
  30.   
  31.       throw new BadRequestException("POST requires content-length");  
  32.     }  
  33.   
  34.     this._contentLengthStream.init(rawRead, 0L);  
  35.     readStream.init(this._contentLengthStream, null);  
  36.   
  37.     return false;  
  38.   }  

从这个方法中可以看出只要前面的3个条件没有进去直接到第4个条件时只要是post请求直接抛异常

处理方式直接在发送http请求时在header中加上

Transfer-Encoding = utf-8


以上只是自己碰到这个问题的一个处理方式。

欢迎访问我的技术群425783133

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2030440次
    • 积分:17147
    • 等级:
    • 排名:第592名
    • 原创:188篇
    • 转载:790篇
    • 译文:0篇
    • 评论:156条
    最新评论