CURLOPT_POSTFIELDSIZE Post

最近用libcurl向某商web服务器作登录校验踩了一坑。 事情的表象是这样的,在windows上没有问题,linux上投递过去的数据乱码。但是如果将curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data)中的data写死,即写成字符串常量,也是没有问题的。 开始以为一些参数和环境的问题,查了半天问题依旧,才怀疑到变量生存周期的问题,将data生命期拉长,就好了。

Supporting IPv6 DNS64/NAT64 Networks

从6月1日起,苹果审核要求支持IPv6 DNS64/NAT64网络了。 我们服务器和客户端都是Socket编程,IPv4地址。最后参照https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1,在客户端处理下即可。 需要说明的是, 在上述文档Apple给出的Listing 10-1  Using getaddrinfo to resolve an IPv4 address literal中,error = getaddrinfo(ipv4_str, “http”, &hints, &res0); 经测试,在IOS下,第一个参数为IPv4地址的情况下,第二个参数为http,ftp等常用字符串,服务器此时监听端口需改为协议默认端口才可能;或者第一个参数为域名,第二个参数为数字端口; 不支持第一个参数为IPv4地址,第二个参数为数字端口。坑爹。有两种方法解决这个问题 : 1) 域名+数字端口。 2) 先getaddrinfo, 再获取sockaddr_in或者sockaddr_in6,设置sin_port或sin6_port。 关于IPv6,可以参考下几篇文章: https://tools.ietf.org/html/rfc4038 https://github.com/WeMobileDev/article/blob/master/IPv6%20socket编程.md

初识HTTP/2

前几天,HTTP/2正式通过了IETF组织的批准得以正式发布。 大致上,HTTP/2设计的主要目的是为了提升效率,更新主要体现在: 以帧为基本单位 每一帧的组成:Length(24),Type(8),Flags(8),R(1),Stream Identifier(31),Frame Payload(…). 流与多路复用 流由序列帧构成; 流具体这些状态:idle, reserved(local), reserved(remote),open,half closed(local),half closed(remote),closed; 流由31位无符号整形标识;客户端使用奇数,服务器使用偶数; 可以对单个流或者整个连接进行流量控制; 流具有优先级,可以改变; 服务器推送 服务器将会在客户端需要前提前将数据发送给客户端Cache。当然,也可以取消这一设置。 Header压缩与解压   具体参考这里:http://http2.github.io/http2-spec/index.html