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