release 2.6.0
[m6w6/ext-http] / CHANGELOG.md
1 # ChangeLog v2
2
3 ## 2.6.0, 2016-12-12
4
5 + Added http\Client\Curl\User interface for userland event loops
6 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
7 + Added http\Client::setDebug(callable $debug)
8 + Added http\Client\Curl\FEATURES constants and namespace
9 + Added http\Client\Curl\VERSIONS constants and namespace
10 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
11 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
12 + Improved configure checks for default CA bundles
13 + Improved negotiation precision
14 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
15 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
16 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
17 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
18 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
19 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
20 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
21 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
22 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
23 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
24 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
25 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
26 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
27 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
28
29 Changes from beta1:
30 * Fixed PHP-5.3 compatibility
31 * Fixed recursive calls to the event loop dispatcher
32
33 Changes from beta2:
34 * Fix bug #73055: crash in http\QueryString (Mike, @rc0r) (CVE-2016-7398)
35 * Fix bug #73185: Buffer overflow in HTTP parse_hostinfo() (Mike, @rc0r) (CVE-2016-7961)
36 * Fix HTTP/2 version parser for older libcurl versions (Mike)
37
38 ## 2.6.0RC1, 2016-10-04
39
40 + Added http\Client\Curl\User interface for userland event loops
41 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
42 + Added http\Client::setDebug(callable $debug)
43 + Added http\Client\Curl\FEATURES constants and namespace
44 + Added http\Client\Curl\VERSIONS constants and namespace
45 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
46 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
47 + Improved configure checks for default CA bundles
48 + Improved negotiation precision
49 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
50 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
51 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
52 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
53 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
54 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
55 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
56 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
57 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
58 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
59 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
60 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
61 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
62 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
63
64 Changes from beta1:
65 * Fixed PHP-5.3 compatibility
66 * Fixed recursive calls to the event loop dispatcher
67
68 Changes from beta2:
69 * Fix bug #73055: crash in http\QueryString (Mike, @rc0r) (CVE-2016-7398)
70 * Fix bug #73185: Buffer overflow in HTTP parse_hostinfo() (Mike, @rc0r) (CVE-2016-7961)
71 * Fix HTTP/2 version parser for older libcurl versions (Mike)
72
73 ## 2.6.0beta2, 2016-09-07
74
75 + Added http\Client\Curl\User interface for userland event loops
76 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
77 + Added http\Client::setDebug(callable $debug)
78 + Added http\Client\Curl\FEATURES constants and namespace
79 + Added http\Client\Curl\VERSIONS constants and namespace
80 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
81 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
82 + Improved configure checks for default CA bundles
83 + Improved negotiation precision
84 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
85 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
86 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
87 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
88 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
89 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
90 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
91 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
92 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
93 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
94 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
95 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
96 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
97 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
98
99 Changes from beta1:
100 * Fixed PHP-5.3 compatibility
101 * Fixed recursive calls to the event loop dispatcher
102
103 ## 2.6.0beta1, 2016-08-22
104
105 + Added http\Client\Curl\User interface for userland event loops
106 + Added http\Url::IGNORE_ERRORS, http\Url::SILENT_ERRORS and http\Url::STDFLAGS
107 + Added http\Client::setDebug(callable $debug)
108 + Added http\Client\Curl\FEATURES constants and namespace
109 + Added http\Client\Curl\VERSIONS constants and namespace
110 + Added share_cookies and share_ssl (libcurl >= 7.23.0) options to http\Client::configure()
111 + http\Client uses curl_share handles to properly share cookies and SSL/TLS sessions between requests
112 + Improved configure checks for default CA bundles
113 + Improved negotiation precision
114 * Fixed regression introduced by http\Params::PARSE_RFC5987: negotiation using the params parser would receive param keys without the trailing asterisk, stripped by http\Params::PARSE_RFC5987.
115 * Fix gh-issue #50: http\Client::dequeue() within http\Client::setDebug() causes segfault (Mike, Maik Wagner)
116 * Fix gh-issue #47: http\Url: Null pointer deref in sanitize_value() (Mike, @rc0r)
117 * Fix gh-issue #45: HTTP/2 response message parsing broken with libcurl >= 7.49.1 (Mike)
118 * Fix gh-issue #43: Joining query with empty original variable in query (Mike, Sander Backus)
119 * Fix gh-issue #42: fatal error when using punycode in URLs (Mike, Sebastian Thielen)
120 * Fix gh-issue #41: Use curl_version_info_data.features when initializing options (Mike)
121 * Fix gh-issue #40: determinde the SSL backend used by curl at runtime (Mike, @rcanavan)
122 * Fix gh-issue #39: Notice: http\Client::enqueue(): Could not set option proxy_service_name (Mike, @rcanavan)
123 * Fix gh-issue #38: Persistent curl handles: error code not properly reset (Mike, @afflerbach)
124 * Fix gh-issue #36: Unexpected cookies sent if persistent_handle_id is used (Mike, @rcanavan, @afflerbach)
125 * Fix gh-issue #34: allow setting multiple headers with the same name (Mike, @rcanavan)
126 * Fix gh-issue #33: allow setting prodyhost request option to NULL (Mike, @rcanavan)
127 * Fix gh-issue #31: add/improve configure checks for default CA bundle/path (Mike, @rcanavan)
128
129 ## 2.5.6, 2016-03-09
130
131 * Fix php-bug #71719: Buffer overflow in HTTP url parsing functions (Mike, rc0r)
132 * Fix gh-issue #28: Possible null pointer dereference in php_http_url_mod() (rc0r)
133 * Fix gh-issue #22: Fix PHP5 config.w32 (Jan Ehrhardt)
134 * Fix gh-issue #20: setSslOptions notice with curl 7.43 (Mike, Vitaliy Demidov)
135
136 ## 2.5.5, 2015-12-07
137
138 * Fixed gh-issue #16: No Content-Length header with empty POST requests
139
140 ## 2.5.3, 2015-09-25
141
142 * Fixed gh-issue #12: crash on bad url passed to http\Message::setRequestUrl()
143 * The URL parser now fails on empty labels
144
145 ## 2.5.2, 2015-09-10
146
147 * Fixed regression with HEAD requests always warning about a partial file transfer
148 + Added "path_as_is" request option (libcurl >= 7.42)
149
150 ## 2.5.1, 2015-07-28
151
152 * Fixed VC11 build (Jan Erhardt)
153 * Fixed gh-issue #2: comparison of obsolete pointers in the header parser (xiaoyjy)
154 * Fixed gh-issue #6: allow RFC1738 unsafe characters in query/fragment
155 * Fixed gh-issue #7: crash with querystring and exception from error handler
156 + SSL certinfo is available for libcurl >= 7.42 with gnutls (openssl has already been since 7.19.1)
157 + Added "falsestart" SSL request option (available with libcurl >= 7.42 and darwinssl/NSS)
158 + Added "service_name" and "proxy_service_name" request options for SPNEGO (available with libcurl >= 7.43)
159 + Enabled "certinfo" transfer info on all supporting SSL backends (OpenSSL: libcurl v7.19.1, NSS: libcurl v7.34.0, GSKit: libcurl v7.39.0, GnuTLS: libcurl v7.42.0)
160
161 ## 2.5.0, 2015-07-09
162
163 + Added RFC5988 (Web Linking) support to http\Params
164 + Added http\Url::SANITIZE_PATH to default flags of http\Url::mod()
165 * Fixed overly aggressive response caching to only consider 2xx cachable
166
167 ## 2.5.0RC1, 2015-05-21
168
169 * Added RFC5988 (Web Linking) support to http\Params
170 * Added http\Url::SANITIZE_PATH to default flags of http\Url::mod()
171 * Fixed overly aggressive response chaching to only consider 2xx cachable
172
173 ## 2.4.3, 2015-04-08
174
175 * Fixed bug #69357 (HTTP/1.1 100 Continue overriding subsequent 200 response code with PUT request)
176
177 ## 2.4.2, 2015-04-03
178
179 * Fixed bug 69076 (http\Url throws Exception on empty querystring) (p at wspnr dot com)
180 * Fixed bug 69313 (http\Client doesn't send GET body)
181 + Added libidn2 and UIDNA as fallbacks for IDN support
182 - Deferred warnings/exceptions of the client, so callbacks for the currently failing requests will still be called
183
184 ## 2.4.1, 2015-03-18
185
186 * Fixed build with PHP <= 5.4 (Remi)
187
188 ## 2.4.0, 2015-03-18
189
190 * Split off pecl/apfd and pecl/json_post
191
192 ## 2.3.2, 2015-03-12
193
194 * Fixed bug with http\QueryString::offsetSet() resetting the complete query string
195
196 ## 2.3.1, 2015-03-02
197
198 * Fixed build on platforms that need stddef.h to define ptrdiff_t (e.g. CentOS 7.5)
199
200 ## 2.3.0, 2015-03-01
201
202 + Preliminiary HTTP2 support for http\Client (libcurl with nghttp2 support)
203 + Improved performance of HTTP info parser (request/response line)
204 + Improved performance of updating client observers
205 + Improved performance of http\Env\Response output to streams
206 + Improved the error messages of the header parser
207 + Added http\Header\Parser class
208 + Added http\Client::configure() method accepting an array with the following options for libcurl:
209 . maxconnects (int, size of the connection cache)
210 . max_host_connections (int, max number of connections to a single host, libcurl >= 7.30.0)
211 . max_pipeline_length (int, max number of requests in a pipeline, libcurl >= 7.30.0)
212 . max_total_connections (int, max number of simultaneous open connections of this client, libcurl >= 7.30.0)
213 . pipelining (bool, whether to enable HTTP/1.1 pipelining)
214 . chunk_length_penalty_size (int, chunk length threshold for pipelining, libcurl >= 7.30.0)
215 . content_length_penalty_size (int, size threshold for pipelining, libcurl >= 7.30.0)
216 . pipelining_server_bl (array, list of server software names to blacklist for pipelining, libcurl >= 7.30.0)
217 . pipelining_site_bl (array, list of server host names to blacklist for pipelining, libcurl >= 7.30.0)
218 . use_eventloop (bool, whether to use libevent, libcurl+libevent)
219 + Added http\Client::getAvailableOptions() and http\Client::getAvailableConfiguration() methods
220 + Added support for HTTP2 if libcurl was built with nghttp2 support.
221 + Added http\Client\Curl\HTTP_VERSION_2_0 constant (libcurl >= 7.33.0)
222 + Added http\Client\Curl\TLS_AUTH_SRP constant (libcurl >= 7.21.4)
223 + Added pinned_publickey SSL request option (libcurl >= 7.39.0)
224 + Added tlsauthtype, tlsauthuser and tlsauthpass SSL request option (libcurl >= 7.21.4)
225 + Added verifystatus (a.k.a OCSP) SSL request option (libcurl >= 7.41.0)
226 + Added proxyheader request option (libcurl >= 7.37.0)
227 + Added unix_socket_path request option (libcurl >= 7.40.0)
228 * Fixed compress request option
229 * Fixed parsing authorities of CONNECT messages
230 * Fixed parsing Content-Range messages
231 * Fixed http\Env\Response to default to chunked encoding over streams
232 * Fixed superfluous output of Content-Length:0 headers
233 * Fixed persistent easy handles to be only created for persistent multi handles
234 * Fixed the header parser to accept not-yet-complete header lines
235 * Fixed http\Message::toStream() crash in ZTS mode
236 * Fixed the message stream parser to handle intermediary data bigger than 4k
237 * Fixed the message stream parser to handle single header lines without EOL
238 * Fixed http\Message\Body to not generate stat based etags for temporary streams
239 - Deprecated http\Client::enablePipelining(), use http\Client::configure(["pipelining" => true]) instead
240 - Deprecated http\Client::enableEvents(), use http\Client::configure(["use_eventloop" => true]) instead
241 - Removed the cookies entry from the transfer info, wich was very slow and generated a Netscape formatted list of cookies
242 - Changed the header parser to reject illegal characters
243
244 Changes from RC1:
245 * Fixed a shutdown crash with chunked encoded stream responses
246
247 ## 2.3.0RC1, 2015-02-19
248
249 + Preliminiary HTTP2 support for http\Client (libcurl with nghttp2 support)
250 + Improved performance of HTTP info parser (request/response line)
251 + Improved performance of updating client observers
252 + Improved performance of http\Env\Response output to streams
253 + Improved the error messages of the header parser
254 + Added http\Header\Parser class
255 + Added http\Client::configure() method accepting an array with the following options for libcurl:
256 . maxconnects (int, size of the connection cache)
257 . max_host_connections (int, max number of connections to a single host, libcurl >= 7.30.0)
258 . max_pipeline_length (int, max number of requests in a pipeline, libcurl >= 7.30.0)
259 . max_total_connections (int, max number of simultaneous open connections of this client, libcurl >= 7.30.0)
260 . pipelining (bool, whether to enable HTTP/1.1 pipelining)
261 . chunk_length_penalty_size (int, chunk length threshold for pipelining, libcurl >= 7.30.0)
262 . content_length_penalty_size (int, size threshold for pipelining, libcurl >= 7.30.0)
263 . pipelining_server_bl (array, list of server software names to blacklist for pipelining, libcurl >= 7.30.0)
264 . pipelining_site_bl (array, list of server host names to blacklist for pipelining, libcurl >= 7.30.0)
265 . use_eventloop (bool, whether to use libevent, libcurl+libevent)
266 + Added http\Client::getAvailableOptions() and http\Client::getAvailableConfiguration() methods
267 + Added support for HTTP2 if libcurl was built with nghttp2 support.
268 + Added http\Client\Curl\HTTP_VERSION_2_0 constant (libcurl >= 7.33.0)
269 + Added http\Client\Curl\TLS_AUTH_SRP constant (libcurl >= 7.21.4)
270 + Added pinned_publickey SSL request option (libcurl >= 7.39.0)
271 + Added tlsauthtype, tlsauthuser and tlsauthpass SSL request option (libcurl >= 7.21.4)
272 + Added verifystatus (a.k.a OCSP) SSL request option (libcurl >= 7.41.0)
273 + Added proxyheader request option (libcurl >= 7.37.0)
274 + Added unix_socket_path request option (libcurl >= 7.40.0)
275 * Fixed compress request option
276 * Fixed parsing authorities of CONNECT messages
277 * Fixed parsing Content-Range messages
278 * Fixed http\Env\Response to default to chunked encoding over streams
279 * Fixed superfluous output of Content-Length:0 headers
280 * Fixed persistent easy handles to be only created for persistent multi handles
281 * Fixed the header parser to accept not-yet-complete header lines
282 * Fixed http\Message::toStream() crash in ZTS mode
283 * Fixed the message stream parser to handle intermediary data bigger than 4k
284 * Fixed the message stream parser to handle single header lines without EOL
285 * Fixed http\Message\Body to not generate stat based etags for temporary streams
286 - Deprecated http\Client::enablePipelining(), use http\Client::configure(["pipelining" => true]) instead
287 - Deprecated http\Client::enableEvents(), use http\Client::configure(["use_eventloop" => true]) instead
288 - Removed the cookies entry from the transfer info, wich was very slow and generated a Netscape formatted list of cookies
289 - Changed the header parser to reject illegal characters
290
291 ## 2.2.1, 2015-02-07
292
293 * Fixed Bug #69000 (http\Url breaks down with very long URL query strings)
294
295 ## 2.2.0, 2015-01-26
296
297 - var_dump(http\Message) no longer automatically creates an empty body
298 + Added http\Message\Parser class
299 + Made http\Client::once() and http\Client::wait() available when using events
300 + Added http\Url::PARSE_MBLOC, http\Url::PARSE_MBUTF8, http\Url::PARSE_TOIDN and http\Url::PARSE_TOPCT constants
301 + Added http\Env\Response::setCookie()
302 + Added http\Env\Request::getCookie()
303
304 ## 2.2.0RC1, 2014-11-12
305
306 - var_dump(http\Message) no longer automatically creates an empty body
307 + Added http\Message\Parser class
308 + Made http\Client::once() and http\Client::wait() available when using events
309 + Added http\Url::PARSE_MBLOC, http\Url::PARSE_MBUTF8, http\Url::PARSE_TOIDN and http\Url::PARSE_TOPCT constants
310 + Added http\Env\Response::setCookie()
311 + Added http\Env\Request::getCookie()
312
313 ## 2.1.4, 2014-11-06
314
315 * Fixed bug #68353 (QsoSSL support removed in libcurl 7.39)
316 * Fixed bug #68149 (duplicate content-length with libcurl < 7.23)
317 * Fixed bug #66891 (Unexpected HTTP 401 after NTLM authentication)
318
319 ## 2.1.3, 2014-10-16
320
321 * Fix build with libcurl < 7.26 (Remi)
322
323 ## 2.1.2, 2014-09-25
324
325 + Added missing request option constants:
326 POSTREDIR_303, AUTH_SPNEGO (libcurl >= 7.38.0), SSL_VERSION_TLSv1_{0,1,2} (libcurl >= 7.34)
327 * Fixed bug #68083 (PUT method not working after DELETE)
328 * Fixed bug #68009 (Segmentation fault after calling exit(0) after a request)
329 * Fixed bug #68000 (Extension does not build on FreeBSD)
330
331 ## 2.1.1, 2014-09-09
332
333 * Fix httpVersion retrieval on bigendian (Remi)
334 * Fix etag/crc32b on bigendian (Remi)
335
336 ## 2.1.0, 2014-09-01
337
338 - Removed port and scheme guessing of http\Url for portability
339 * Fixed PHP-5.3 compatibility
340 * Fixed PHP-5.4 compatibility
341 * Fixed possible bus error on shutdown when using events
342 * Fixed sovereignty of clients when using events
343 * Fixed a possible crash with http\Encoding\Stream\Dechunk::decode($unencoded)
344 * Fixed a leak in http\Client\Curl options
345 * Fixed bug #67733 (Compile error with libevent 2.x)
346 + Added RFC5987 support in http\Params
347 + Improved synthetic HTTP message parsing performace for ~20%
348 + Added request options if libcurl has builtin c-ares support:
349 dns_interface, dns_local_ip4, dns_local_ip6 (all libcurl >= 7.33.0)
350 + Added request options:
351 expect_100_timeout (libcurl >= 7.36.0), tcp_nodelay
352 + Added transfer info:
353 curlcode, tls_session (libcurl >= 7.34.0), only available during transfer
354
355 ## 2.1.0RC3, 2014-08-19
356
357 Changes from RC2:
358 * Fixed PHP-5.3 compatibility
359 * Fixed possible bus error on shutdown when using events
360 + Added curlcode transfer info
361 - Removed port and scheme guessing of http\Url for portability
362
363 ## 2.1.0RC2, 2014-08-05
364
365 Changes from RC1:
366 * Fixed a possible crash with http\Encoding\Stream\Dechunk::decode($unencoded)
367 * Fixed a leak in http\Client\Curl options
368 * Fixed PHP-5.4 compatibility
369
370 ## 2.1.0RC1, 2014-08-01
371
372 * Fixed bug #67733 (Compile error with libevent 2.x)
373 + Added RFC5987 support in http\Params
374 + Improved synthetic HTTP message parsing performace for ~20%
375 + Added request options if libcurl has builtin c-ares support:
376 dns_interface, dns_local_ip4, dns_local_ip6 (all libcurl >= 7.33.0)
377 + Added request options:
378 expect_100_timeout (libcurl >= 7.36.0)
379 tcp_nodelay
380 + Added transfer info:
381 tls_session (libcurl >= 7.34.0), only available during transfer
382
383 ## 2.0.7, 2014-07-11
384
385 * General improvements to the test suite
386 * Fixed http\Env\Response::send() ignoring some write errors
387 * Fixed bug #67528 (RFC compliant default user agent)
388 * Fixed a garbage collector issue with JSON POSTs
389 * Fixed refcount issue and double free of message bodies
390 * Fixed use after free if the http\Client::enqueue() closure returns TRUE
391 * Fixed bug #67584 (http\Client\Response not initialized as response on failure)
392
393 ## 2.0.6, 2014-04-24
394
395 + Added "uploaded" progress state
396 * Fixed bug #67089 (Segmentaion fault with ZTS)
397 * Fixed compatibility with PHP-5.6+
398 * Fixed re-use of request messages which content length remained untouched when the body was reset
399
400 ## 2.0.5, 2014-04-04
401
402 * Fix rare crash with uninitialized CURLOPT_HTTPHEADER
403 * Fix build with -Werror=format-security (Remi)
404 * Fix build with extenal libs needed by libcurl
405
406 ## 2.0.4, 2014-01-02
407
408 * Removed the pecl/event conflict
409 * Fixed bug #66388 (Crash on POST with Content-Length:0 and untouched body)
410
411 ## 2.0.3, 2013-12-10
412
413 * Fixed typo
414
415 ## 2.0.2, 2013-12-10
416
417 * Fixed bug #66250 (shutdown crash as shared extension)
418
419 ## 2.0.1, 2013-11-26
420
421 * Fixed a bug with multiple ob_start(http\Env\Response) while replacing the body
422 * Fixed build on Windows with libevent2
423
424 ## 2.0.0, 2013-11-22
425
426 Extended HTTP support. Again.
427
428 Keep in mind that it's got the major version 2, because it's incompatible with pecl_http v1.
429
430 ## 2.0.0beta5, 2013-08-12
431
432 Extended HTTP support. Again. Keep in mind that it's got the major version 2, because it's incompatible with pecl_http v1.
433
434 * Introduces the http namespace.
435 * Message bodies have been remodeled to use PHP temporary streams instead of in-memory buffers.
436 * The utterly misunderstood HttpResponse class has been reimplemented as http\Env\Response inheriting http\Message.
437 * Currently, there's only one Exception class left, http\Exception.
438 * Errors triggered by the extension can be configured statically by http\Object::$defaultErrorHandling or inherited http\Object->errorHandling.
439 * The request ecosystem has been modularized to support different libraries, though for the moment only libcurl is supported.
440
441 ## 2.0.0beta4, 2012-12-31
442
443 ! >80% test coverage http://goo.gl/VmyIW
444 * Fixed build with libcurl <= 7.21.3
445 * Fixed var_dump of http\Message with inherited userland properties with increased access level
446 + Added http\Header::getParams()
447 + Added simple support for escapes and quotes in the params parser
448 + Added support for sending http\Env\Response over PHP streams
449 + Added message body reference counting
450
451 ## 2.0.0beta3, 2012-12-13
452
453 ! >80% test coverage http://goo.gl/YCV74
454 * Fixed http\Env\Response throttling
455 * Fixed http\Env\Response caching by last-modified
456 * Fixed http\Message::addBody()
457 * Fixed http\Message::parentMessage write access
458 * Fixed crash with freed but not nulled event_base pointer
459 * Fixed crash with null pointer dereference on http\Encoding\Stream::flush()
460 * Fixed some memory leaks
461 + Added http\Header::negotiate()
462 + Added http\Header::parse()
463
464 ## 2.0.0beta2, 2012-11-29
465
466 ! >80% test coverage
467 * Fixed http\Request\Pool with libevent2
468 * Fixed http\Env\Request::getFiles() with multiple-file-uploads
469 * Fixed PHP-5.3 compatibility
470 * Fixed reference handling of http\Message\Body::getResource()
471 * Fixed reading stream filters to correctly detect EOF of tmp and mem streams
472 - Change: merge message headers with the same key
473 - Change: the stream message parser can optionally return after each message
474 - Change: you have to care yourself for Content headers if a message's body has a reading stream filter attached
475 + Added http\Env::getResponseStatusForAllCodes()
476
477 ## 2.0.0beta1, 2012-10-11
478
479 * PHP-5.3 compatibility by Anatoly Belsky
480 * Fixed http\Client's history handling
481 * Disallow serialization of non-serializable objects
482 * Fixed parsing of folded headers
483 * Fixed the parsing HTTP messages from streams
484 * Fixed leak in persistent handles cleanup routine
485 + Added http\Url::SANITIZE_PATH; URL paths are not sanitized by default anymore
486 + Added JSON Content-Type handler for request body processing if ext/json is present
487 + Added missing IANA HTTP response codes
488 + Added http\Message\Body::getResource()
489 + Added QueryString proxy methods to http\Env\Request
490 + Added Serializable to http\Message\Body's interfaces
491
492 ## 2.0.0alpha1, 2012-04-13
493
494 + Added http\Client\AbstractClient::request(string method, string url[, array headers=null[, mixed body=null[, array options=null]]])
495 + Added constants http\Params::PARSE_RAW, ::PARSE_DEFAULT, ::PARSE_URLENCODED, ::PARSE_DIMENSION, ::PARSE_QUERY
496 + Added fourth parameter 'flags' to http\Params' constructor, which defaults to http\Params::PARSE_DEFAULT
497 * Fixed bug #61444 (query string converts . to _ in param names)
498
499 ## 2.0.0dev10, 2012-03-30
500
501 + This release contains the http\Request to http\Client refactoring triggered by Benjamin Eberlei. Many thanks.
502
503 ## 2.0.0dev9, 2012-03-23
504
505 + Added population of $_POST and $_FILES for non-POST requests
506 - Renamed http\Env\Request::getPost() to ::getForm()
507 - Changed http\Env\Response::setContentDisposition() to take an http\Params like array as argument
508 - Removed http\Env\Response::CONTENT_DISPOSOTION_* constants
509 - Removed http\Request\Method class; request methods are now used as simple strings
510
511 ## 2.0.0dev8, 2012-03-16
512
513 * Fixed build failure and compiler warnings
514 * Fixed logical errors in http\Env\Response::isCachedBy{Etag,LastModified}()
515 * Fixed memory leaks in http\Env\Response::isCachedByLastModified()
516 * Fixed memory leaks in http\Env::getResponseHeader()
517 * Fixed erroneous trailing CRLF of http\Message strings
518 - Renamed http\Message\Body::add() to ::addForm()
519 + Added http\Message\Body::addPart(http\Message $part)
520 + Added http\Env\Response::__invoke() output buffering handler
521
522 ## 2.0.0dev7, 2012-03-09
523
524 + Added multipart support to http\Message, which can now splitMultipartBody()
525 to a http\Message chain, f.e. of a ranges response or file upload request.
526 + Added primitive quoting/escaping capabilities to http\Params.
527 + Reworked and improved negotiation support, added asterisk (*) matching etc.
528
529 ## 2.0.0dev6, 2012-03-01
530
531 + Added stream parsing capability to http\Message
532 + Added http\Env\Request methods: getQuery(), getPost(), getFiles()
533 * Changed http\Env\Response to only cache responses to GET or HEAD requests without authorization
534 * Fixed possible crash when http\Url was initialized with empty urls
535
536 ## 2.0.0dev5, 2012-02-17
537
538 * Improved test coverage [1] and fixed a lot of issues with the cookie, params, querystring,
539 persistent handles, request factory, etag, stream filters, encoding streams, negotiation
540 and HTTP message info code.
541
542 [1] http://dev.iworks.at/ext-http/lcov/ext/http/index.html
543
544 ## 2.0.0dev4, 2012-01-23
545
546 This is to become v2 of the known pecl_http extension.
547 It is completely incompatible to previous version.
548 Try it, or let it be. If you are not sure, let it be. Really.
549
550 List of changes (TBD):
551 * Everything lives below the http namespace
552 * The message body is implemented as a temp stream instead of a chunk of memory
553 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
554 * There's only http\Exception
555 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
556 * You have to use the http\Request\Factory to create your requests/pools/datashares
557
558 ## 2.0.0dev3, 2012-01-16
559
560 This is to become v2 of the known pecl_http extension.
561 It is completely incompatible to previous version.
562 Try it, or let it be. If you are not sure, let it be. Really.
563
564 List of changes (TBD):
565 * Everything lives below the http namespace
566 * The message body is implemented as a temp stream instead of a chunk of memory
567 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
568 * There's only http\Exception
569 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
570 * You have to use the http\Request\Factory to create your requests/pools/datashares
571
572 ## 2.0.0dev2, 2011-06-14
573
574 This is to become v2 of the known pecl_http extension.
575 It is completely incompatible to previous version.
576 Try it, or let it be. If you are not sure, let it be. Really.
577
578 List of changes (TBD):
579 * Everything lives below the http namespace
580 * Supported request libraries: curl, neon
581 * The message body is implemented as a temp stream instead of a chunk of memory
582 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
583 * There's only http\Exception
584 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself
585
586 ## 2.0.0dev1, 2011-06-02
587
588 This is to become v2 of the known pecl_http extension.
589 It is completely incompatible to previous version.
590 Try it, or let it be. If you are not sure, let it be. Really.
591
592 List of changes (TBD):
593 * Everything lives below the http namespace
594 * Supported request libraries: curl, neon
595 * The message body is implemented as a temp stream instead of a chunk of memory
596 * The utterly misunderstood HttpResponse class has been reimplemented in the http\env namespace
597 * There's only http\Exception
598 * Every instance follows http\Object::$defaultErrorHandling or inherited http\Object->errorHandling, but only for errors generated by the extension itself