zoukankan      html  css  js  c++  java
  • 转载:Apache1.1 post请求无body的bug

    起因
    开发者在论坛发贴说php sdk有个问题,并初步定位,找到了解决方案,但不明白原因,详见:http://open.taobao.com/bbs/read.php?tid=18801

    解决过程
    因为我看到帖子后在正式环境和沙箱都不能重现,留言让开发者旺旺远程协助
    下午5点,技术支持旺旺联系上了开发者,经过1个半小时远程桌面调试,最终找到问题原因,解决方法已经告诉开发者,SDK也已更新。

    技术分析
    这是一个HTTP通信的细节,php curl向top发起请求的时候,默认设置了HTTP POST方式,但又没设置POST的内容,结果导致libcurl发出了一个HTTP请求,包含这样的HEADER:
    Expect: 100-continue
    Content-Length: -1
    Apache看到这样的请求,就给扔了一个302回来了。

    Expect: 100-continue是干嘛的?
    正常情况下,只有当post body超过1024字节的时候,才需要http client发出带Expect: 100-continue的请求,web server给出一个100-Continue的响应,client再发送请求的内容。

    为什么会有Content-Length: -1?
    因为php sdk设了POST方式(curl_setopt($ch, CURLOPT_POST, true);)却没给它POST内容,所以长度就成-1了

    为什么我无法重现?
    因为我用的是php 5.2.12/libcurl 7.19.3,这个curl版本是不会出这个错的,把这个错误兼容掉了。
    而开发者用的是php5.2.13/libcurl 7.20.0,这个curl版本支持http协议比较严格,不再兼容了,就出错了。
    环境导致的问题不好查,所以远程协助搞了90分钟。

    结论
    结合上次multipart的问题来看,HTTP通信对多数开发者(不管是java还是php)都是比较难的技术点,还是用官方的SDK省事

    ps: java sdk不存在这个问题

  • 相关阅读:
    Bugku-CTF之各种绕过
    算法竞赛入门经典 第四章 学习笔记 2
    时钟周期,CPU周期,指令周期,CPU时间片
    big-endian和little-endian
    android px,dp,sp大小转换工具
    SharedPreferences漏洞, 无法避免,所以不要在里面存储敏感信息
    java正则表达式入门
    adb命令
    android largeheap 的设定
    关于java中接口定义常量和类定义常量的区别
  • 原文地址:https://www.cnblogs.com/lovelili/p/2177750.html
Copyright © 2011-2022 走看看