/** * Sets the specified HTTP header * * DateTime objects will be converted to a string representation internally but * will be returned as DateTime objects on calling getHeader(). * * Please note that dates are normalized to GMT internally, so that getHeader() will return * the same point in time, but not necessarily in the same timezone, if it was not * GMT previously. GMT is used synonymously with UTC as per RFC 2616 3.3.1. * * @param string $name Name of the header, for example "Location", "Content-Description" etc. * @param array|string|\DateTime $values An array of values or a single value for the specified header field * @param boolean $replaceExistingHeader If a header with the same name should be replaced. Default is TRUE. * @return \TYPO3\Flow\Http\Message This message, for method chaining * @api */ public function setHeader($name, $values, $replaceExistingHeader = TRUE) { switch ($name) { case 'Content-Type': if (stripos($values, 'charset') === FALSE && stripos($values, 'text/') === 0) { $values .= '; charset=' . $this->charset; } break; } $this->headers->set($name, $values, $replaceExistingHeader); return $this; }
/** * Sets the specified HTTP header * * DateTime objects will be converted to a string representation internally but * will be returned as DateTime objects on calling getHeader(). * * Please note that dates are normalized to GMT internally, so that getHeader() will return * the same point in time, but not necessarily in the same timezone, if it was not * GMT previously. GMT is used synonymously with UTC as per RFC 2616 3.3.1. * * @param string $name Name of the header, for example "Location", "Content-Description" etc. * @param array|string|\DateTime $values An array of values or a single value for the specified header field * @param boolean $replaceExistingHeader If a header with the same name should be replaced. Default is TRUE. * @return self This message, for method chaining * @throws \InvalidArgumentException * @api */ public function setHeader($name, $values, $replaceExistingHeader = true) { switch ($name) { case 'Content-Type': if (is_array($values)) { if (count($values) !== 1) { throw new \InvalidArgumentException('The "Content-Type" header must be unique and thus only one field value may be specified.', 1454949291); } $values = (string) $values[0]; } if (stripos($values, 'charset') === false && stripos($values, 'text/') === 0) { $values .= '; charset=' . $this->charset; } break; } $this->headers->set($name, $values, $replaceExistingHeader); return $this; }
/** * Creates a response from the given raw, that is plain text, HTTP response. * * @param string $rawResponse * @param \TYPO3\Flow\Http\Response $parentResponse Parent response, if called recursively * * @throws \InvalidArgumentException * @return \TYPO3\Flow\Http\Response */ public static function createFromRaw($rawResponse, Response $parentResponse = NULL) { $response = new static($parentResponse); $lines = explode(chr(10), $rawResponse); $firstLine = array_shift($lines); if (substr($firstLine, 0, 5) !== 'HTTP/') { throw new \InvalidArgumentException('The given raw HTTP message is not a valid response.', 1335175601); } list(, $statusCode, $statusMessage) = explode(' ', $firstLine, 3); $response->setStatus((int) $statusCode, trim($statusMessage)); $parsingHeader = TRUE; $contentLines = array(); $headers = new Headers(); foreach ($lines as $line) { if ($parsingHeader) { if (trim($line) === '') { $parsingHeader = FALSE; continue; } $fieldName = trim(substr($line, 0, strpos($line, ':'))); $fieldValue = trim(substr($line, strlen($fieldName) + 1)); if (strtoupper(substr($fieldName, 0, 10)) === 'SET-COOKIE') { $cookie = Cookie::createFromRawSetCookieHeader($fieldValue); if ($cookie !== NULL) { $headers->setCookie($cookie); } } else { $headers->set($fieldName, $fieldValue, FALSE); } } else { $contentLines[] = $line; } } $content = implode(chr(10), $contentLines); $response->setHeaders($headers); $response->setContent($content); return $response; }
/** * @test * * Note: This is a fix for https://jira.neos.io/browse/FLOW-324 (see https://code.google.com/p/chromium/issues/detail?id=501095) */ public function setExceptsHttpsHeaders() { $headers = new Headers(); $headers->set('HTTPS', 1); // dummy assertion to suppress PHPUnit warning $this->assertTrue(TRUE); }
/** * Allows to add headers to be sent with every request the browser executes. * * @param string $name Name of the header, for example "Location", "Content-Description" etc. * @param array|string|\DateTime $values An array of values or a single value for the specified header field * @return void * @see Message::setHeader() */ public function addAutomaticRequestHeader($name, $values) { $this->automaticRequestHeaders->set($name, $values, true); }
/** * @test */ public function setOverridesAnyPreviouslyDefinedCacheControlDirectives() { $headers = new Headers(); $headers->setCacheControlDirective('public'); $headers->set('Cache-Control', 'max-age=600, must-revalidate'); $this->assertEquals('max-age=600, must-revalidate', $headers->get('Cache-Control')); }