Two more problems with Mojolicious

Valentin V. Bartenev vbart at
Mon Mar 4 15:34:52 UTC 2019

On Monday 04 March 2019 17:27:10 Александр Поволоцкий wrote:
> I mean reply, body.
> Well, I thought that my application does not do any assumption, but 
> write_chunk seems to be not portable. So I need to patch Mojolicious to 
> determine PSGI, HTTP/1.1 and HTTP/2 and write data properly, or in my 
> app use write instead of write_chunk?

Indeed, write_chunk() function doesn't look portable at all.  It looks
like that it even doesn't check if a client supports chunked transfer
encoding (i.e. speaks HTTP/1.1) when working over HTTP:

sub write_chunk {
  my ($self, $chunk, $cb) = @_;
  $self->headers->transfer_encoding('chunked') unless $self->is_chunked;
  $self->write(defined $chunk ? $self->_build_chunk($chunk) : $chunk, $cb);
  $self->{eof} = 1 if defined $chunk && !length $chunk;
  return $self;

sub _build_chunk {
  my ($self, $chunk) = @_;

  # End
  return "\x0d\x0a0\x0d\x0a\x0d\x0a" unless length $chunk;

  # First chunk has no leading CRLF
  my $crlf = $self->{chunks}++ ? "\x0d\x0a" : '';
  return $crlf . sprintf('%x', length $chunk) . "\x0d\x0a$chunk";

You can just use write() with Unit.

> And the problem with double encoding concerns me even more. Looks like 
> either PSGI in Mojolicious is broken, or Mojo and unit just speaks 
> different dialects...

We'll try to reproduce and look what happens in this case.

But from the code above, it seems Mojo authors don't care much
about protocols other than particular version of HTTP/1.1.

  wbr, Valentin V. Bartenev

More information about the unit mailing list