Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Responses that produce a HTTP/1.1 chunked stream #13

Open
weierophinney opened this issue Dec 31, 2019 · 1 comment
Open

Comments

@weierophinney
Copy link
Member

HTTP/1.1 provides 'Transfer-encoding: chunked' for sending a stream of data from the server.

Zend Diactoros currently doesn't seem to provide out-of-the-box support for this.

  • There's no existing Response that sets the required headers for you.
  • There's no existing implementation of StreamInterface that supports dynamic content and is compatible with the requirements of SapiStreamEmitter.

Possible solution for out-of-the-box support could be:

  • Add a DynamicStreamInterface interface that extends StreamInterface, for type-hinting in a moment
  • Add a GeneratorStream class that implements DynamicStreamInterface, and its read() method gets the required data from a PHP generator
  • Add another class that implements DynamicStreamInterface, and its read() method gets the required data from a PHP callback
  • Add a StreamResponse class that requires a DynamicStreamInterface in the constructor, sets the necessary headers for chunked stream delivery

It leaves questions around handling $maxBufferLength, and where the code goes to write the actual chunked blocks (trait? helper class?).

I have to build a solution for this, and I'm happy to contribute it back to Diactoros, if we can agree a design :)


Originally posted by @stuartherbert at zendframework/zend-diactoros#261

@weierophinney
Copy link
Member Author

Honestly, this looks like a combination of:

  • A stream type
  • A custom emitter type

As such, it may make sense as a bridge package between Diactoros and zend-httphandlerrunner that provides the stream and the associated emitter. We would definitely promote it, and potentially offer to bring it into the zendframework organization if you wished.


Originally posted by @weierophinney at zendframework/zend-diactoros#261 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants