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不存在这个问题

  • 相关阅读:
    pip 最新版 发布(Python包安装和管理工具)
    Python使用cookie 免密登录了解一下
    夯实根基,必知必会的 Python 基础知识
    10个关于文件操作的小功能,都很实用~
    总结一些网站加密和混淆技术
    接口加密如何测试?
    艰难的这年,程序员的未来在哪里?
    警惕“职场PUA”!
    Python面试题及答案汇总
    Python实例练手项目汇总(附源码)
  • 原文地址:https://www.cnblogs.com/lovelili/p/2177750.html
Copyright © 2011-2022 走看看