最近在使用python 的 pcurl 发送 post 请求到服务端的时候【服务端使用的服务是Lighttpd】,发现只要 post 请求的数据超过 1024 之后,就会返回如下错误:

* Hostname was NOT found in DNS cache
* Trying 10.8.2.54...
* Connected to 10.8.2.54 (10.8.2.54) port 9997 (#11)
> POST /rest/cm/changeconfig HTTP/1.1
User-Agent: PycURL/7.43.0 libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Host: 10.8.2.54:9997
Accept: application/json
Authorization: Basic YXJyYXk6YWRtaW4=
Content-Length: 1025
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue < HTTP/1.1 417 Expectation Failed
< Content-Type: text/html
< Content-Length: 363
< Connection: close
< Date: Wed, 26 Apr 2017 17:34:58 GMT
* Server lighttpd/1.4.34 is not blacklisted
< Server: lighttpd/1.4.34
<
* Closing connection 11

百思不得其解,post 的数据为 1024 的时候,可以正常使用,于是乎在客户端和服务端分别抓包看了一眼。10.8.2.68:客户端  10.8.2.54:服务端

从数据包可以看出,首先客户端和服务端三次握手成功之后,由于post数据超过了1024,超过了链路最大传输单元,需要分片。此时客户端发送一个发送一个请求, 包含一个Expect:100-continue, 询问Server使用愿意接受数据,客户端接收到Server返回的100-continue应答以后, 才把数据POST给Server。于是,这样就有了一个问题, 并不是所有的Server都会正确应答100-continue, 比如lighttpd, 就会返回417 “Expectation Failed”, 则会造成逻辑出错。

查询一下说是lighttpd v1.4.x不支持“Expect: 100-continue”HTTP头,解决的方法如下:

一:使用 Lighttpd 1.50

二:lighttpd 1.4.21或以上版本(即最新的realease版本),只要在lighttpd配置文件中加入server.reject-expect-100-with-417="disable"即可

【网络编程】——Lighttpd 返回HTTP/1.1 417 Expectation Failed的更多相关文章

  1. visual studio 远程服务器返回了意外响应:(417)expectation failed

    解决方法: 修改devenv.exe.config文件,添加 <servicePointManager expect100Continue="false" /> C:\ ...

  2. 关于HTTP请求返回417 “Expectation Failed”

    在使用HttpClient默认情况下做POST的时候, HttpClient并不会直接就发起POST请求, 而是会分为俩步, 1.发送一个请求, 包含一个Expect:100-continue, 询问 ...

  3. php curl报错:417 - Expectation Failed

    当我在post提交的数据增加一段内容后会报错:417 - Expectation Failed. 查资料发现在使用curl做POST时,当post的数据大于1024字节时,curl并不会直接发起pos ...

  4. 网络编程懒人入门(六):深入浅出,全面理解HTTP协议

    本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广 ...

  5. Java-Runoob-高级编程:Java 网络编程

    ylbtech-Java-Runoob-高级编程:Java 网络编程 1.返回顶部 1. Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.n ...

  6. Expect:100-Continue & HTTP 417 Expectation[转]

    Expect:100-Continue & HTTP 417 Expectation 背景:今天调试火车票查询的代码,发现一个奇怪的事情,如果使用公司本地的代理,那么一切正常,如果使用的是公司 ...

  7. Muduo 网络编程示例之零:前言

    陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/ ...

  8. 11. Go 语言网络编程

    Go 语言网络编程 Go语言在编写 web 应用方面非常得力.因为目前它还没有 GUI(Graphic User Interface 图形化用户界面)的框架,通过文本或者模板展现的 html 界面是目 ...

  9. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

随机推荐

  1. 如何避免Android程序的ANR?

    In Android, the system guards against applications that are insufficiently responsive for a period o ...

  2. nodejs,koa2常用模块

    "dependencies": { "multer": "^1.2.0", "node-schedule": " ...

  3. [联赛可能考到]图论相关算法——COGS——联赛试题预测

    COGS图论相关算法 最小生成树 Kruskal+ufs int ufs(int x) { return f[x] == x ? x : f[x] = ufs(f[x]); } int Kruskal ...

  4. [SP10628]Count on a tree

    Description: 给定一颗n个点的树,有m个询问,求任意两点路径上点权第k小的点 Hint: \(n,m<=1e5\) Solution: 比较水 以每个点到根节点的数的前缀和建主席树 ...

  5. Marked Ancestor [AOJ2170] [并查集]

    题意: 有一个树,有些节点染色,每次有两种操作,第一,统计该节点到离它最近的染色父亲结点的的号码(Q),第二,为某一个节点染色(M),求第一种操作和. 输入: 输入由多个数据集组成.每个数据集都有以下 ...

  6. 判断浏览器的类型$_SERVER['HTTP_USER_AGENT']和语言$_SERVER['HTTP_ACCEPT_LANGUAGE']

    判断浏览器类型: $_SERVER["HTTP_USER_AGENT"] 判断浏览器类型的具体程序如下: <?php if(strpos($_SERVER["HTT ...

  7. C#自动识别文件编码

    以下代码源自:http://www.cnblogs.com/stulzq/p/6116627.html /// <summary> /// 用于取得一个文本文件的编码方式(Encoding ...

  8. 【网站seo优化】SEO优化每天的工作内容是什么?

    [网站seo优化]SEO优化每天的工作内容是什么?从未知的领域来到seo,感到搜索引擎无比神奇,接触seo久了,有每天必做的工作内容,大量的seo从业者,每天的工作内容大同小异,主要做的工作有通过相应 ...

  9. python2中urllib2模块带cookies使用方法

    #!/usr/bin/python # coding=utf-8 #############方式1######################### import urllib2 cookie = & ...

  10. JS膏集04

    JS膏集04 1.apply和call方法 可以改变this的指向,可以用于函数的调用 apply和call方法中如果没有传入参数,或者传入null,那么调用该方法的函数中的this就是window ...