Neos\Flow\Http\Response::makeStandardsCompliant PHP Method

makeStandardsCompliant() public method

It is recommended to call this method before the response is sent and Flow does so by default in its built-in HTTP request handler.
public makeStandardsCompliant ( Request $request ) : void
$request Request The corresponding request
return void
    public function makeStandardsCompliant(Request $request)
    {
        if ($request->hasHeader('If-Modified-Since') && $this->headers->has('Last-Modified') && $this->statusCode === 200) {
            $ifModifiedSinceDate = $request->getHeader('If-Modified-Since');
            $lastModifiedDate = $this->headers->get('Last-Modified');
            if ($lastModifiedDate <= $ifModifiedSinceDate) {
                $this->setStatus(304);
                $this->content = '';
            }
        } elseif ($request->hasHeader('If-Unmodified-Since') && $this->headers->has('Last-Modified') && ($this->statusCode >= 200 && $this->statusCode <= 299 || $this->statusCode === 412)) {
            $unmodifiedSinceDate = $request->getHeader('If-Unmodified-Since');
            $lastModifiedDate = $this->headers->get('Last-Modified');
            if ($lastModifiedDate > $unmodifiedSinceDate) {
                $this->setStatus(412);
            }
        }
        if (in_array($this->statusCode, [100, 101, 204, 304])) {
            $this->content = '';
        }
        if ($this->headers->getCacheControlDirective('no-cache') !== null || $this->headers->has('Expires')) {
            $this->headers->removeCacheControlDirective('max-age');
        }
        if ($request->getMethod() === 'HEAD') {
            if (!$this->headers->has('Content-Length')) {
                $this->headers->set('Content-Length', strlen($this->content));
            }
            $this->content = '';
        }
        if (!$this->headers->has('Content-Length')) {
            $this->headers->set('Content-Length', strlen($this->content));
        }
        if ($this->headers->has('Transfer-Encoding')) {
            $this->headers->remove('Content-Length');
        }
    }

Usage Example

 /**
  * RFC 2616 / 14.28 (If-Unmodified-Since)
  *
  * @test
  */
 public function makeStandardsCompliantReturns412StatusIfUnmodifiedSinceDoesNotMatch()
 {
     $request = Request::create(new Uri('http://localhost'));
     $response = new Response();
     $unmodifiedSince = \DateTime::createFromFormat(DATE_RFC2822, 'Tue, 15 May 2012 09:00:00 GMT');
     $lastModified = \DateTime::createFromFormat(DATE_RFC2822, 'Sun, 20 May 2012 08:00:00 UTC');
     $request->setHeader('If-Unmodified-Since', $unmodifiedSince);
     $response->setHeader('Last-Modified', $lastModified);
     $response->makeStandardsCompliant($request);
     $this->assertSame(412, $response->getStatusCode());
     $response = new Response();
     $unmodifiedSince = \DateTime::createFromFormat(DATE_RFC2822, 'Tue, 15 May 2012 09:00:00 GMT');
     $lastModified = \DateTime::createFromFormat(DATE_RFC2822, 'Tue, 15 May 2012 08:00:00 UTC');
     $request->setHeader('If-Unmodified-Since', $unmodifiedSince);
     $response->setHeader('Last-Modified', $lastModified);
     $response->makeStandardsCompliant($request);
     $this->assertSame(200, $response->getStatusCode());
 }