RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传输数据失败
先列出 HessianPHP 的错误提示:
CURL transport error: transfer closed with outstanding read data remaining
如果 client 预期等待“100-continue”的应答,那么它发的请求必须包含一个 "Expect: 100-continue" 的头域!
这也就是 Laruence 在 2011 年撰文所写的:
在使用 curl 做 POST 的时候,当要 POST 的数据大于 1024 字节的时候,curl 并不会直接就发起 POST 请求,而是会分为两步:1. 发送一个请求,包含一个 "Expect: 100-continue" 头域,询问 Server 是否愿意接收数据;2. 接收到 Server 返回的 100-continue 应答以后,才把数据 POST 给 Server;这是 libcurl 的行为。
第一,libcurl 在发送大于 1024 字节的 POST 请求时采用了这种方法,但是相对的,它会引起请求延迟的加大。
第二,并不是所有的 web server 都能正确处理并应答“100-continue”,比如 lighttpd,就会返回417”Expectation Failed“,造成请求逻辑出错。(郑昀注1:lighttpd 1.4 版本有此严重问题,于1.5版本修复。郑昀注2:Resin 于 3.0.5 版本增加了对 Expect: 100-continue 的支持。)
<?php
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
?>
pooy示范代码如下所示:

- 根据 HessianTransport 代码所述,”Hessian request using the CURL library“。
通信协议是 Hessian。调用接口时所传参数在某种极端条件下,POST 的数据长度超过 1024 字节,hessian 报错“CURL transport error: transfer closed with outstanding read data remaining”。



RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传输数据失败的更多相关文章
- php cURL library is not loaded
问题: php 在命令行里面可以找到 curl 模块,但是用apache 没有找到 curl 模块. 表现内容为: extension_loaded('curl')cURL library is no ...
- pycurl,Python cURL library
pycurl — A Python interface to the cURL library Pycurl包是一个libcurl的Python接口.pycurl已经成功的在Python2.2到Pyt ...
- php curl下载文件由于空格导致下载文件失败
<?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($ ...
- php 未配置curl
用到PHP的curl功能,发现服务器上的PHP并没有配置curl,进而查询PHP官方文档,得知编译PHP时需要带上 –with-curl参数,才能把curl模块编译进去.我现在PHP已经编译安装进服务 ...
- Elasticsearch之curl创建索引库和索引时注意事项
前提, Elasticsearch之curl创建索引库 Elasticsearch之curl创建索引 注意事项 1.索引库名称必须要全部小写,不能以下划线开头,也不能包含逗号 2.如果没有明确指定索引 ...
- curl查看http请求消息的时长
1. -X 指定请求方式GET请求curl -X GET http://www.jackyops.com/search?data=123 # -X GET是可选的 POST请求curl -X POS ...
- 使用Curl进行抓取远程内容时url中文编码问题
PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只 ...
- Rendering Problems Failed to load platform rendering library 为何打开布局页面时手机预览页面显示不出来?
看到图片右上角的 android图标没有?把它改为低版本的就可以了,如我的是21就可以了.原因我想是因为sdk版本更新了不兼容导致的吧.
- JSON(未完待续,等讲到对象时再加)
1 定义 JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Jav ...
随机推荐
- PMP 第九章 项目人力资源管理
1制定人力资源计划 2组建项目团队 3建设项目团队 4管理项目团队 1.规划人力资源管理的作用是什么?组织图和职位描述的表现形式有哪些?RAM和RACI的关系是什么?人力资源管理计划的内容有哪些? 人 ...
- C++读取txt文件
1. 逐行读入 void readTxt(string file) { ifstream infile; infile.open(file.data()); //将文件流对象与文件连接起来 asser ...
- [转]svn常用命令
谢谢原作者:http://blog.sina.com.cn/s/blog_963453200101eiuq.html 1.检出svn co http://路径(目录或文件的全路径) [本地目录全路 ...
- android:layout_weight属性详解 (转)
在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...
- POJ 1625 Censored!(AC自动机+DP+高精度)
Censored! Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 6956 Accepted: 1887 Descrip ...
- git warning: LF will be replaced by CRLF in...
如果你有git项目,在提交代码的过程中可能会碰到上面的警告,特别是的项目中包含序列化对象的时候,你可能要小心!! 警告的含义是说换行符的,不同的操作系统的换行符是不一致的,如果你不清楚,真得看看这个 ...
- Apache Tomcat配置
- ffmpeg处理RTMP流媒体的命令 发送流媒体的命令(UDP,RTP,RTMP)
将文件当做直播送至live ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName re限制输出速率,按照 ...
- POJ 1743 后缀数组
题目链接:http://poj.org/problem?id=1743 题意:给定一个钢琴的音普序列[值的范围是(1~88)],现在要求找到一个子序列满足 1,长度至少为5 2,序列可以转调,即存在两 ...
- MVVM datatemplate 下button.contextmenu的command 失效解决方案
<Button CommandParameter="{Binding}" Tag="{Binding RelativeSource={RelativeSource ...