PackageTrack
Sign in Get early access

guzzlehttp/psr7

PSR-7 message implementation that also provides common utility methods

3.0.0 1.1B downloads/mo #4 most downloaded on composer guzzle/psr7

What this package is like to depend on

Last release 1 months ago

20 Jul 2026

Release timing varies

gaps range from 8 days to 8 months

Most releases are documented

notes for 59 of 66 stable releases

Nothing withdrawn

no release was ever pulled

11 years old

68 releases · first in 2015

18 releases in the last 12 months

see the full history below

Release timeline

68 releases · May 2015 to Jul 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 68
  1. 3.0.0 20 Jul 2026
    Release notes

    Added

    • Add DiagnosticValue::escape() to escape controls and malformed UTF-8 in diagnostics
    • Add GuzzleHttp\Psr7\Exception\TimeoutException for timed-out stream operations
    • Add GuzzleHttp\Psr7\Utils::redactUserInfoInString() to redact the userinfo of a raw URI string within text
    • Promote GuzzleHttp\Psr7\Rfc3986 to public API with isValid*() predicates and canonicalizeIpv6()
    • Add GuzzleHttp\Psr7\UriNormalizer::CANONICALIZE_IPV6_HOST to PRESERVING_NORMALIZATIONS

    Changed

    • Require psr/http-message:^2.0 and add native parameter and return types
    • Require psr/http-factory:^1.1
    • Reject native PHP serialization of stream implementations
    • Preserve request method casing, except ServerRequest::fromGlobals() still uppercases
    • Reject empty arrays and non-string values as header values
    • Reject invalid uploaded file trees and invalid parsed body values
    • Reject uploaded file specs missing tmp_name, size, or error
    • Reject non-integer and negative uploaded file error values
    • Reject invalid stream/upload sizes, buffer high-water marks, and dropping-stream limits
    • Rewind seekable uploaded-file streams before copying in UploadedFile::moveTo()
    • Reject negative read() lengths across all stream implementations
    • Detect the + flag anywhere in a mode for Stream::isReadable()/isWritable()
    • Reject empty strings returned by PumpStream source callables
    • Discard buffered bytes on PumpStream close and detach
    • Restore the original stream position after Message::bodySummary()
    • Allow null for the Message::bodySummary() truncation length to use the default
    • Validate LimitStream offset/limit and track non-seekable offset by bytes skipped
    • Make FnStream close and detach terminal, calling close callbacks at most once
    • Suppress exceptions from FnStream close callbacks during destructor cleanup
    • Make CachingStream::close() idempotent, preserving remote cleanup after detach
    • Do not move the CachingStream cursor when a SEEK_END target on an unknown-size stream is rejected
    • Normalize multiple leading slashes in Uri::getPath() and origin-form request targets
    • Serialize authority-less file URIs with rootless paths without the // separator
    • Serialize authority-less file URIs with empty paths as file: instead of the unparseable file://
    • Remove dot segments above the root per RFC 3986, prefixing authority-less // paths with /.
    • Return a network-path reference from UriResolver::relativize() when an empty-path target requires one
    • Stop returning an empty reference from UriResolver::relativize() when it would inherit the base fragment
    • Stop throwing from UriResolver::relativize() when an equal-path target's last path segment contains a colon
    • Harden URI host validation (delimiters, backslashes, IPv6, embedded ports); require schemes to start with a letter
    • Validate Uri::fromParts() ports instead of casting them
    • Treat ports 80 and 443 as defaults for the ws and wss schemes
    • Use the ws and wss default ports in UriComparator::isCrossOrigin() port comparisons
    • Redact all non-empty URI userinfo in Utils::redactUserInfo()
    • Rebuild server request URIs from $_SERVER by REQUEST_METHOD, using target authority before SERVER_PORT
    • Remove userinfo from absolute-form REQUEST_URI targets in ServerRequest::fromGlobals()
    • Reject zero-port HTTP_HOST and malformed SERVER_PORT in ServerRequest::getUriFromGlobals()
    • Reject malformed REQUEST_METHOD and SERVER_PROTOCOL server values in ServerRequest::fromGlobals()
    • Reject zero-port Host and normalize leading-zero ports in Message::parseRequest()
    • Reject duplicate Host headers and validate present values for all request-target forms
    • Reject zero-port, hostless, and userinfo absolute-form request targets in Message::parseRequest()
    • Synchronize the Host header in Request::withUri() when the URI changes or Host is empty
    • Include the URI port in Host headers synthesized by Message::toString()
    • Validate the Host header synthesized by Message::toString() from the request URI
    • Include non-default URI ports in Host headers set by Utils::modifyRequest() URI changes
    • Accept OPTIONS * and CONNECT authority-form request targets in Message::parseRequest()
    • Hide credential-bearing URI, server, and cookie arguments in stack traces on PHP 8.2+
    • Reject malformed HTTP request/response start-lines
    • Unfold obsolete HTTP/1.0 line folding for all valid request method tokens
    • Reject empty and control-character request targets in Request::withRequestTarget()
    • Validate iterator chunks passed to Utils::streamFor()
    • Validate unsupported values passed to Query::build()
    • Reject non-finite float values in Query::build() and MultipartStream contents
    • Reject non-finite float values in iterator chunks passed to Utils::streamFor()
    • Utils::streamFor() now rejects non-string scalar bodies
    • Uri::withQueryValues() now rejects non-string values
    • Reject invalid Utils::modifyRequest() change values
    • Use PHP debug type names in type error messages
    • Changed Utils::copyToStream() to throw when destination streams cannot make progress
    • Throw TimeoutException from Stream read/write and Utils copy/hash/readLine on stream timeouts
    • Throw TimeoutException from AppendStream::read(), CachingStream::read(), and Utils::tryGetContents() on stream timeouts
    • Re-throw TimeoutException from InflateStream when the decoded source stream times out
    • Close the compressed source stream from InflateStream::close()
    • Return the number of bytes copied from Utils::copyToStream()
    • Throw OverflowException when stream byte counts or offsets exceed PHP_INT_MAX
    • Translate StreamWrapper runtime failures to PHP stream failure values
    • Stop adding default Content-Length to multipart/form-data parts (RFC 7578 §4.8)
    • Escape multipart Content-Disposition parameters and reject unsafe boundaries and part headers
    • Preserve trailing whitespace in custom MultipartStream part header values
    • Preserve explicit custom MultipartStream boundary '0' instead of replacing it with a generated boundary
    • Made static utility classes non-instantiable
    • Validate bracketed IP-literal hosts consistently between parsing and withHost(), including userinfo forms
    • Percent-encode raw control bytes in userinfo before bracketed IP-literal hosts instead of parsing mutated values
    • Reject invalid UTF-8 and preserve percent-sequences in userinfo before bracketed IP-literal hosts
    • Normalize percent-encoded octets in the URI host to uppercase hex
    • Canonicalize IPv6 hosts to RFC 5952 form in Uri construction, fromParts(), and withHost()
    • Canonicalize bracketed IPv6 hosts in UriComparator::isCrossOrigin()
    • Reject malformed percent-sequences and percent-encoded bytes forbidden by the URI host policy
    • Extend CAPITALIZE_PERCENT_ENCODING and DECODE_UNRESERVED_CHARACTERS to userinfo and host
    • Trim header list elements with only spaces, horizontal tabs, and line terminators in Header::splitList()
    • Report header parameter PCRE failures explicitly in Header::parse()
    • Escape controls and malformed UTF-8 consistently in generated exception messages

    Removed

    • Dropped support for PHP 7.2 and 7.3
    • Removed the ralouphie/getallheaders dependency
    • Removed deprecated Header::normalize() method
    Open source →
    Release notes

    Added

    • Add DiagnosticValue::escape() to escape controls and malformed UTF-8 in diagnostics
    • Add GuzzleHttp\Psr7\Exception\TimeoutException for timed-out stream operations
    • Add GuzzleHttp\Psr7\Utils::redactUserInfoInString() to redact the userinfo of a raw URI string within text
    • Promote GuzzleHttp\Psr7\Rfc3986 to public API with isValid*() predicates and canonicalizeIpv6()
    • Add GuzzleHttp\Psr7\UriNormalizer::CANONICALIZE_IPV6_HOST to PRESERVING_NORMALIZATIONS

    Changed

    • Require psr/http-message:^2.0 and add native parameter and return types
    • Require psr/http-factory:^1.1
    • Reject native PHP serialization of stream implementations
    • Preserve request method casing, except ServerRequest::fromGlobals() still uppercases
    • Reject empty arrays and non-string values as header values
    • Reject invalid uploaded file trees and invalid parsed body values
    • Reject uploaded file specs missing tmp_name, size, or error
    • Reject non-integer and negative uploaded file error values
    • Reject invalid stream/upload sizes, buffer high-water marks, and dropping-stream limits
    • Rewind seekable uploaded-file streams before copying in UploadedFile::moveTo()
    • Reject negative read() lengths across all stream implementations
    • Detect the + flag anywhere in a mode for Stream::isReadable()/isWritable()
    • Reject empty strings returned by PumpStream source callables
    • Discard buffered bytes on PumpStream close and detach
    • Restore the original stream position after Message::bodySummary()
    • Allow null for the Message::bodySummary() truncation length to use the default
    • Validate LimitStream offset/limit and track non-seekable offset by bytes skipped
    • Make FnStream close and detach terminal, calling close callbacks at most once
    • Suppress exceptions from FnStream close callbacks during destructor cleanup
    • Make CachingStream::close() idempotent, preserving remote cleanup after detach
    • Do not move the CachingStream cursor when a SEEK_END target on an unknown-size stream is rejected
    • Normalize multiple leading slashes in Uri::getPath() and origin-form request targets
    • Serialize authority-less file URIs with rootless paths without the // separator
    • Serialize authority-less file URIs with empty paths as file: instead of the unparseable file://
    • Remove dot segments above the root per RFC 3986, prefixing authority-less // paths with /.
    • Return a network-path reference from UriResolver::relativize() when an empty-path target requires one
    • Stop returning an empty reference from UriResolver::relativize() when it would inherit the base fragment
    • Stop throwing from UriResolver::relativize() when an equal-path target's last path segment contains a colon
    • Harden URI host validation (delimiters, backslashes, IPv6, embedded ports); require schemes to start with a letter
    • Validate Uri::fromParts() ports instead of casting them
    • Treat ports 80 and 443 as defaults for the ws and wss schemes
    • Use the ws and wss default ports in UriComparator::isCrossOrigin() port comparisons
    • Redact all non-empty URI userinfo in Utils::redactUserInfo()
    • Rebuild server request URIs from $_SERVER by REQUEST_METHOD, using target authority before SERVER_PORT
    • Remove userinfo from absolute-form REQUEST_URI targets in ServerRequest::fromGlobals()
    • Reject zero-port HTTP_HOST and malformed SERVER_PORT in ServerRequest::getUriFromGlobals()
    • Reject malformed REQUEST_METHOD and SERVER_PROTOCOL server values in ServerRequest::fromGlobals()
    • Reject zero-port Host and normalize leading-zero ports in Message::parseRequest()
    • Reject duplicate Host headers and validate present values for all request-target forms
    • Reject zero-port, hostless, and userinfo absolute-form request targets in Message::parseRequest()
    • Synchronize the Host header in Request::withUri() when the URI changes or Host is empty
    • Include the URI port in Host headers synthesized by Message::toString()
    • Validate the Host header synthesized by Message::toString() from the request URI
    • Include non-default URI ports in Host headers set by Utils::modifyRequest() URI changes
    • Accept OPTIONS * and CONNECT authority-form request targets in Message::parseRequest()
    • Hide credential-bearing URI, server, and cookie arguments in stack traces on PHP 8.2+
    • Reject malformed HTTP request/response start-lines
    • Unfold obsolete HTTP/1.0 line folding for all valid request method tokens
    • Reject empty and control-character request targets in Request::withRequestTarget()
    • Validate iterator chunks passed to Utils::streamFor()
    • Validate unsupported values passed to Query::build()
    • Reject non-finite float values in Query::build() and MultipartStream contents
    • Reject non-finite float values in iterator chunks passed to Utils::streamFor()
    • Utils::streamFor() now rejects non-string scalar bodies
    • Uri::withQueryValues() now rejects non-string values
    • Reject invalid Utils::modifyRequest() change values
    • Use PHP debug type names in type error messages
    • Changed Utils::copyToStream() to throw when destination streams cannot make progress
    • Throw TimeoutException from Stream read/write and Utils copy/hash/readLine on stream timeouts
    • Throw TimeoutException from AppendStream::read(), CachingStream::read(), and Utils::tryGetContents() on stream timeouts
    • Re-throw TimeoutException from InflateStream when the decoded source stream times out
    • Close the compressed source stream from InflateStream::close()
    • Return the number of bytes copied from Utils::copyToStream()
    • Throw OverflowException when stream byte counts or offsets exceed PHP_INT_MAX
    • Translate StreamWrapper runtime failures to PHP stream failure values
    • Stop adding default Content-Length to multipart/form-data parts (RFC 7578 §4.8)
    • Escape multipart Content-Disposition parameters and reject unsafe boundaries and part headers
    • Preserve trailing whitespace in custom MultipartStream part header values
    • Preserve explicit custom MultipartStream boundary '0' instead of replacing it with a generated boundary
    • Made static utility classes non-instantiable
    • Validate bracketed IP-literal hosts consistently between parsing and withHost(), including userinfo forms
    • Percent-encode raw control bytes in userinfo before bracketed IP-literal hosts instead of parsing mutated values
    • Reject invalid UTF-8 and preserve percent-sequences in userinfo before bracketed IP-literal hosts
    • Normalize percent-encoded octets in the URI host to uppercase hex
    • Canonicalize IPv6 hosts to RFC 5952 form in Uri construction, fromParts(), and withHost()
    • Canonicalize bracketed IPv6 hosts in UriComparator::isCrossOrigin()
    • Reject malformed percent-sequences and percent-encoded bytes forbidden by the URI host policy
    • Extend CAPITALIZE_PERCENT_ENCODING and DECODE_UNRESERVED_CHARACTERS to userinfo and host
    • Trim header list elements with only spaces, horizontal tabs, and line terminators in Header::splitList()
    • Report header parameter PCRE failures explicitly in Header::parse()
    • Escape controls and malformed UTF-8 consistently in generated exception messages

    Removed

    • Dropped support for PHP 7.2 and 7.3
    • Removed the ralouphie/getallheaders dependency
    • Removed deprecated Header::normalize() method
    Open source →
  2. 2.13.0 16 Jul 2026
    Release notes

    Added

    • Add Utils:: asciiToLower, asciiToUpper, asciiUcFirst, caselessEquals, caselessContains

    Changed

    • Use locale-independent ASCII case folding everywhere case is normalized
    • Trigger a runtime deprecation for previously deprecated functionality in 2.3.0
    Open source →
    Release notes

    Added

    • Add Utils:: asciiToLower, asciiToUpper, asciiUcFirst, caselessEquals, caselessContains

    Changed

    • Use locale-independent ASCII case folding everywhere case is normalized
    • Trigger a runtime deprecation for previously deprecated functionality in 2.3.0
    Open source →
  3. 2.12.5 13 Jul 2026
    Release notes

    Fixed

    • Compare header names and hosts with locale-independent ASCII lowercasing
    • Compare hosts without locale sensitivity when detecting cross-origin redirects
    Open source →
    Release notes

    Fixed

    • Compare header names and hosts with locale-independent ASCII lowercasing
    • Compare hosts without locale sensitivity when detecting cross-origin redirects
    Open source →
  4. 2.12.4 08 Jul 2026
    Release notes

    Changed

    • Pass explicit trim characters ahead of the PHP 8.6 trim default change
    Open source →
    Release notes

    Changed

    • Pass explicit trim characters ahead of the PHP 8.6 trim default change

    Fixed

    • Anchor server port and response start-line patterns to the true end of input
    • Treat host-less origin-form request targets starting with // as paths in Message::parseRequest()
    • Reject raw DEL bytes in bracketed IP-literal hosts instead of parsing a mutated host
    • Reject invalid bytes after a bracketed IP-literal host instead of reparsing a different host
    Open source →
  5. 2.12.3 23 Jun 2026
    Release notes

    Security

    Open source →
    Release notes

    Security

    • Validate the URI host so getHost() matches the URI authority (GHSA-c2w2-prh8-qm98)
    Open source →
  6. 2.12.2 23 Jun 2026
    Release notes

    Fixed

    • Report URI parsing, filtering, and normalization PCRE failures explicitly
    • Report HTTP message parser PCRE failures explicitly
    • Fail closed when PCRE validation fails for request targets and hosts
    Open source →
    Release notes

    Fixed

    • Report URI parsing, filtering, and normalization PCRE failures explicitly
    • Report HTTP message parser PCRE failures explicitly
    • Fail closed when PCRE validation fails for request targets and hosts
    Open source →
  7. 2.12.1 18 Jun 2026
    Release notes

    Security

    Open source →
    Release notes

    Security

    • Reject CR/LF in HTTP method, protocol version, and reason phrase (GHSA-vm85-hxw5-5432)
    Open source →
  8. 2.12.0 16 Jun 2026
    Release notes

    Deprecated

    • Deprecated non-finite float values in Query::build() that guzzlehttp/psr7 3.0 rejects
    • Deprecated non-finite float multipart contents that guzzlehttp/psr7 3.0 rejects
    • Deprecated non-string scalar bodies in Utils::streamFor(); cast them to a string for 3.0
    • Deprecated non-string Uri::withQueryValues() values; cast them to a string for 3.0
    Open source →
    Release notes

    Deprecated

    • Deprecated non-finite float values in Query::build() that guzzlehttp/psr7 3.0 rejects
    • Deprecated non-finite float multipart contents that guzzlehttp/psr7 3.0 rejects
    • Deprecated non-string scalar bodies in Utils::streamFor(); cast them to a string for 3.0
    • Deprecated non-string Uri::withQueryValues() values; cast them to a string for 3.0
    Open source →
  9. 2.11.1 12 Jun 2026
    Release notes

    Fixed

    • Fixed non-finite float values emitting coercion warnings on PHP 8.5
    Open source →
    Release notes

    Fixed

    • Fixed non-finite float values emitting coercion warnings on PHP 8.5
    Open source →
  10. 2.11.0 02 Jun 2026
    Release notes

    Changed

    • Changed Utils::modifyRequest() to reject conflicting URI and Host header changes in the same call
    • Changed Header::parse() to split semicolon-separated parameters without repeated regular expression lookaheads
    • Changed UriComparator::isCrossOrigin() so only HTTP and HTTPS missing ports receive implicit default ports

    Deprecated

    • Deprecated invalid PSR-7 arguments that guzzlehttp/psr7 3.0 will require native types for
    • Deprecated non-string header values that guzzlehttp/psr7 3.0 will reject
    • Deprecated empty header value arrays that guzzlehttp/psr7 3.0 will reject
    • Deprecated URI schemes that do not match guzzlehttp/psr7 3.0 syntax requirements
    • Deprecated multipart boundary and custom part header metadata that guzzlehttp/psr7 3.0 will reject
    • Deprecated reliance on automatic uppercasing of request methods; guzzlehttp/psr7 3.0 preserves method casing
    • Deprecated invalid Utils::modifyRequest() change values that guzzlehttp/psr7 3.0 will reject

    Fixed

    • Fixed Utils::copyToStream() to retry short destination writes instead of dropping the unwritten remainder
    • Fixed Header::parse() splitting of semicolon-separated parameters with escaped quotes
    Open source →
    Release notes

    Changed

    • Changed Utils::modifyRequest() to reject conflicting URI and Host header changes in the same call
    • Changed Header::parse() to split semicolon-separated parameters without repeated regular expression lookaheads
    • Changed UriComparator::isCrossOrigin() so only HTTP and HTTPS missing ports receive implicit default ports

    Deprecated

    • Deprecated invalid PSR-7 arguments that guzzlehttp/psr7 3.0 will require native types for
    • Deprecated non-string header values that guzzlehttp/psr7 3.0 will reject
    • Deprecated empty header value arrays that guzzlehttp/psr7 3.0 will reject
    • Deprecated URI schemes that do not match guzzlehttp/psr7 3.0 syntax requirements
    • Deprecated multipart boundary and custom part header metadata that guzzlehttp/psr7 3.0 will reject
    • Deprecated reliance on automatic uppercasing of request methods; guzzlehttp/psr7 3.0 preserves method casing
    • Deprecated invalid Utils::modifyRequest() change values that guzzlehttp/psr7 3.0 will reject

    Fixed

    • Fixed Utils::copyToStream() to retry short destination writes instead of dropping the unwritten remainder
    • Fixed Header::parse() splitting of semicolon-separated parameters with escaped quotes
    Open source →
  11. 2.10.4 29 May 2026
    Release notes

    Fixed

    • Apply UriNormalizer percent-encoding normalizations to URI fragments
    • Make LimitStream::getSize() return 0 for slices past the underlying stream end
    • Make AppendStream::read() return an empty string when no streams are attached
    • Make CachingStream::read() throw on an incomplete cache-target write instead of silently corrupting replays
    • Prevent CachingStream::seek() from looping indefinitely when the remote stream makes no progress
    Open source →
  12. 2.10.3 27 May 2026
    Release notes

    Fixed

    • Fixed URI parsing for IPv6 literals containing embedded IPv4 addresses
    • Fixed malformed UTF-8 URI strings being parsed as empty URIs
    Open source →
  13. 2.10.2 25 May 2026
    Release notes

    Security

    • Reject control and whitespace characters in URI host components (GHSA-hq7v-mx3g-29hw)
    • Reject malformed Host values when constructing request URIs (GHSA-34xg-wgjx-8xph)

    Fixed

    • Make ServerRequest::fromGlobals() robust against unexpected HTTP header value types in $_SERVER
    Open source →
  14. 2.10.1 20 May 2026
    Release notes

    Fixed

    • Fix Utils::modifyRequest() with numeric header names
    Open source →
  15. 2.10.0 19 May 2026
    Release notes

    Changed

    • Harden ServerRequest::fromGlobals() against malformed $_SERVER values
    • Prevent custom stream metadata from affecting internal size handling
    • Throw when StreamWrapper::getResource() cannot create a resource
    • Preserve custom request implementations in Utils::modifyRequest()
    • Preserve custom URI implementations in UriResolver::resolve()
    • Make Uri::__toString() side-effect-free
    Open source →
  16. 2.9.1 19 May 2026
    Release notes

    Fixed

    • Fix parsing of relative path references containing a colon in a non-initial path segment
    • Fix CachingStream::detach() returning an incomplete resource before the decorated stream has been fully read
    • Fix Message::bodySummary() returning null when truncating printable UTF-8 bodies inside a multibyte character
    Open source →
  17. 2.9.0 10 Mar 2026
    Release notes

    Added

    • Added nested array expansion support to MultipartStream
    • Added @return static to MessageTrait methods

    Changed

    • Updated MIME type mappings
    Open source →
  18. 2.8.1 10 Mar 2026
    Release notes

    Fixed

    • Encode + signs in Uri::withQueryValue() and Uri::withQueryValues() to prevent them being interpreted as spaces
    Open source →
  19. 2.8.0 23 Aug 2025
    Release notes

    Added

    • Allow empty lists as header values

    Changed

    • PHP 8.5 support
    Open source →
  20. 2.7.1 27 Mar 2025
    Release notes

    Fixed

    • Fixed uppercase IPv6 addresses in URI

    Changed

    • Improve uploaded file error message
    Open source →
  21. 2.7.0 18 Jul 2024
    Release notes

    Added

    • Add Utils::redactUserInfo() method
    • Add ability to encode bools as ints in Query::build
    Open source →
  22. 2.6.3 18 Jul 2024
    Release notes

    Fixed

    • Make StreamWrapper::stream_stat() return false if inner stream's size is null

    Changed

    • PHP 8.4 support
    Open source →
  23. 2.6.2 03 Dec 2023
    Release notes

    Fixed

    • Fixed another issue with the fact that PHP transforms numeric strings in array keys to ints

    Changed

    • Updated links in docs to their canonical versions
    • Replaced call_user_func* with native calls
    Open source →
  24. 2.6.1 27 Aug 2023
    Release notes

    Fixed

    • Properly handle the fact that PHP transforms numeric strings in array keys to ints
    Open source →
  25. 2.6.0 03 Aug 2023
    Release notes

    Changed

    • Updated the mime type map to add some new entries, fix a couple of invalid entries, and remove an invalid entry
    • Fallback to application/octet-stream if we are unable to guess the content type for a multipart file upload
    Open source →
  26. 2.5.1 03 Aug 2023
    Release notes

    Fixed

    • Corrected mime type for .acc files to audio/aac

    Changed

    • PHP 8.3 support
    Open source →
  27. 2.5.0 17 Apr 2023
    Release notes

    Changed

    • Adjusted psr/http-message version constraint to ^1.1 || ^2.0
    Open source →
  28. 2.4.5 17 Apr 2023
    Release notes

    Fixed

    • Prevent possible warnings on unset variables in ServerRequest::normalizeNestedFileSpec
    • Fixed Message::bodySummary when preg_match fails
    • Fixed header validation issue
    Open source →
  29. 2.4.4 09 Mar 2023
    Release notes

    Changed

    • Removed the need for AllowDynamicProperties in LazyOpenStream
    Open source →
  30. 2.4.3 26 Oct 2022
    Release notes

    Changed

    • Replaced sha1(uniqid()) by bin2hex(random_bytes(20))
    Open source →
  31. 2.4.2 25 Oct 2022
    Release notes

    Fixed

    • Fixed erroneous behaviour when combining host and relative path
    Open source →
  32. 2.4.1 28 Aug 2022
    Release notes

    Fixed

    • Rewind body before reading in Message::bodySummary
    Open source →
  33. 2.4.0 20 Jun 2022
    Release notes

    Added

    • Added provisional PHP 8.2 support
    • Added UriComparator::isCrossOrigin method
    Open source →
  34. 2.3.0 09 Jun 2022
    Release notes

    Fixed

    • Added Header::splitList method
    • Added Utils::tryGetContents method
    • Improved Stream::getContents method
    • Updated mimetype mappings
    Open source →
  35. 2.2.2 08 Jun 2022
    Release notes

    Fixed

    • Fix Message::parseRequestUri for numeric headers
    • Re-wrap exceptions thrown in fread into runtime exceptions
    • Throw an exception when multipart options is misformatted
    Open source →
  36. 2.2.1 20 Mar 2022
    Release notes

    Fixed

    • Correct header value validation
    Open source →
  37. 2.2.0 20 Mar 2022
    Release notes

    Added

    • A more compressive list of mime types
    • Add JsonSerializable to Uri
    • Missing return types

    Fixed

    • Bug MultipartStream no uri metadata
    • Bug MultipartStream with filename for data:// streams
    • Fixed new line handling in MultipartStream
    • Reduced RAM usage when copying streams
    • Updated parsing in Header::normalize()
    Open source →
  38. 2.1.2 20 Mar 2022

    Nothing published for this version

  39. 2.1.1 20 Mar 2022
    Release notes

    Fixed

    • Validate header values properly
    Open source →
  40. 2.1.0 06 Oct 2021
    Release notes

    Changed

    • Attempting to create a Uri object from a malformed URI will no longer throw a generic InvalidArgumentException, but rather a MalformedUriException, which inherits from the former for backwards compatibility. Callers relying on the exception being thrown to detect invalid URIs should catch the new exception.

    Fixed

    • Return null in caching stream size if remote size is null
    Open source →
  41. 2.0.0 30 Jun 2021
    Release notes

    Identical to the RC release.

    Open source →
  42. 2.0.0-rc1 29 Apr 2021 pre-release

    Nothing published for this version

  43. 2.0.0-beta1 21 Mar 2021 pre-release

    Nothing published for this version

  44. 1.9.1 17 Apr 2023

    Nothing published for this version

  45. 1.9.0 20 Jun 2022

    Nothing published for this version

  46. 1.8.5 20 Mar 2022

    Nothing published for this version

  47. 1.8.4 20 Mar 2022

    Nothing published for this version

  48. 1.8.3 05 Oct 2021

    Nothing published for this version

  49. 1.8.2 26 Apr 2021

    Nothing published for this version

  50. 1.8.1 21 Mar 2021
    Release notes

    Fixed

    • Issue parsing IPv6 URLs
    • Issue modifying ServerRequest lost all its attributes
    Open source →
  51. 1.8.0 21 Mar 2021
    Release notes

    Added

    • Locale independent URL parsing
    • Most classes got a @final annotation to prepare for 2.0

    Fixed

    • Issue when creating stream from php://input and curl-ext is not installed
    • Broken Utils::tryFopen() on PHP 8
    Open source →
  52. 1.7.0 30 Sep 2020
    Release notes

    Added

    • Replaced functions by static methods

    Fixed

    • Converting a non-seekable stream to a string
    • Handle multiple Set-Cookie correctly
    • Ignore array keys in header values when merging
    • Allow multibyte characters to be parsed in Message:bodySummary()

    Changed

    • Restored partial HHVM 3 support
    Open source →
  53. 1.6.1 01 Jul 2019
    Release notes

    Fixed

    • Accept null and bool header values again
    Open source →
  54. 1.6.0 30 Jun 2019
    Release notes

    Added

    • Allowed version ^3.0 of ralouphie/getallheaders dependency (#244)
    • Added MIME type for WEBP image format (#246)
    • Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272)

    Changed

    • Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262)
    • Accept port number 0 to be valid (#270)

    Fixed

    • Fixed subsequent reads from php://input in ServerRequest (#247)
    • Fixed readable/writable detection for certain stream modes (#248)
    • Fixed encoding of special characters in the userInfo component of an URI (#253)
    Open source →
  55. 1.5.2 04 Dec 2018
    Release notes

    Fixed

    • Check body size when getting the message summary
    Open source →
  56. 1.5.1 04 Dec 2018
    Release notes

    Fixed

    • Get the summary of a body only if it is readable
    Open source →
  57. 1.5.0 03 Dec 2018
    Release notes

    Added

    • Response first-line to response string exception (fixes #145)
    • A test for #129 behavior
    • get_message_body_summary function in order to get the message summary
    • 3gp and mkv mime types

    Changed

    • Clarify exception message when stream is detached

    Deprecated

    • Deprecated parsing folded header lines as per RFC 7230

    Fixed

    • Fix AppendStream::detach to not close streams
    • InflateStream preserves isSeekable attribute of the underlying stream
    • ServerRequest::getUriFromGlobals to support URLs in query parameters

    Several other fixes and improvements.

    Open source →
  58. 1.4.2 20 Mar 2017
    Release notes

    Fixed

    • Reverted BC break to Uri::resolve and Uri::removeDotSegments by removing calls to trigger_error when deprecated methods are invoked.
    Open source →
  59. 1.4.1 27 Feb 2017
    Release notes

    Added

    • Rriggering of silenced deprecation warnings.

    Fixed

    • Reverted BC break by reintroducing behavior to automagically fix a URI with a relative path and an authority by adding a leading slash to the path. It's only deprecated now.
    Open source →
  60. 1.4.0 21 Feb 2017
    Release notes

    Added

    • Added common URI utility methods based on RFC 3986 (see documentation in the readme):
      • Uri::isDefaultPort
      • Uri::isAbsolute
      • Uri::isNetworkPathReference
      • Uri::isAbsolutePathReference
      • Uri::isRelativePathReference
      • Uri::isSameDocumentReference
      • Uri::composeComponents
      • UriNormalizer::normalize
      • UriNormalizer::isEquivalent
      • UriResolver::relativize

    Changed

    • Ensure ServerRequest::getUriFromGlobals returns a URI in absolute form.
    • Allow parse_response to parse a response without delimiting space and reason.
    • Ensure each URI modification results in a valid URI according to PSR-7 discussions. Invalid modifications will throw an exception instead of returning a wrong URI or doing some magic.
      • (new Uri)->withPath('foo')->withHost('example.com') will throw an exception because the path of a URI with an authority must start with a slash "/" or be empty
      • (new Uri())->withScheme('http') will return 'http://localhost'

    Deprecated

    • Uri::resolve in favor of UriResolver::resolve
    • Uri::removeDotSegments in favor of UriResolver::removeDotSegments

    Fixed

    • Stream::read when length parameter <= 0.
    • copy_to_stream reads bytes in chunks instead of maxLen into memory.
    • ServerRequest::getUriFromGlobals when Host header contains port.
    • Compatibility of URIs with file scheme and empty host.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive