public function composeHeaders(RestException $e = null) { //only GET method should be cached if allowed by API developer $expires = $this->requestMethod == 'GET' ? Defaults::$headerExpires : 0; if (!is_array(Defaults::$headerCacheControl)) { Defaults::$headerCacheControl = array(Defaults::$headerCacheControl); } $cacheControl = Defaults::$headerCacheControl[0]; if ($expires > 0) { $cacheControl = $this->apiMethodInfo->accessLevel ? 'private, ' : 'public, '; $cacheControl .= end(Defaults::$headerCacheControl); $cacheControl = str_replace('{expires}', $expires, $cacheControl); $expires = gmdate('D, d M Y H:i:s \\G\\M\\T', time() + $expires); } @header('Cache-Control: ' . $cacheControl); @header('Expires: ' . $expires); @header('X-Powered-By: Luracast Restler v' . Restler::VERSION); if (Defaults::$crossOriginResourceSharing && isset($_SERVER['HTTP_ORIGIN'])) { header('Access-Control-Allow-Origin: ' . (Defaults::$accessControlAllowOrigin == '*' ? $_SERVER['HTTP_ORIGIN'] : Defaults::$accessControlAllowOrigin)); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); } $this->responseFormat->setCharset(Defaults::$charset); $charset = $this->responseFormat->getCharset() ?: Defaults::$charset; @header('Content-Type: ' . (Defaults::$useVendorMIMEVersioning ? 'application/vnd.' . Defaults::$apiVendor . "-v{$this->requestedApiVersion}" . '+' . $this->responseFormat->getExtension() : $this->responseFormat->getMIME()) . '; charset=' . $charset); @header('Content-Language: ' . Defaults::$language); if (isset($this->apiMethodInfo->metadata['header'])) { foreach ($this->apiMethodInfo->metadata['header'] as $header) { @header($header, true); } } $code = 200; if (!Defaults::$suppressResponseCode) { if ($e) { $code = $e->getCode(); } elseif (isset($this->apiMethodInfo->metadata['status'])) { $code = $this->apiMethodInfo->metadata['status']; } } $this->responseCode = $code; @header("{$_SERVER['SERVER_PROTOCOL']} {$code} " . (isset(RestException::$codes[$code]) ? RestException::$codes[$code] : '')); }
public function composeHeaders(RestException $e = null) { //only GET method should be cached if allowed by API developer $expires = $this->requestMethod == 'GET' ? Defaults::$headerExpires : 0; if (!is_array(Defaults::$headerCacheControl)) { Defaults::$headerCacheControl = array(Defaults::$headerCacheControl); } $cacheControl = Defaults::$headerCacheControl[0]; if ($expires > 0) { $cacheControl = $this->apiMethodInfo->accessLevel ? 'private, ' : 'public, '; $cacheControl .= end(Defaults::$headerCacheControl); $cacheControl = str_replace('{expires}', $expires, $cacheControl); $expires = gmdate('D, d M Y H:i:s \\G\\M\\T', time() + $expires); } $this->headerData->set(new HeaderKey('Cache-Control', $cacheControl)); $this->headerData->set(new HeaderKey('Expires', $expires)); $this->headerData->set(new HeaderKey('X-Powered-By', 'Luracast Restler v' . Restler::VERSION)); $server_origin = null; if (is_null($this->requestFromObject)) { if (\array_key_exists('HTTP_ORIGIN', $_SERVER)) { $server_origin = $_SERVER['HTTP_ORIGIN']; } } else { $server_origin = $this->requestFromObject->getHeader()->get('Origin'); if (!is_null($server_origin)) { $server_origin = $server_origin->getValue(); } } if (Defaults::$crossOriginResourceSharing && !is_null($server_origin)) { $this->headerData->set(new HeaderKey('Access-Control-Allow-Origin', Defaults::$accessControlAllowOrigin == '*' ? $server_origin : Defaults::$accessControlAllowOrigin)); $this->headerData->set(new HeaderKey('Access-Control-Allow-Credentials', 'true')); $this->headerData->set(new HeaderKey('Access-Control-Max-Age', '86400')); } $this->responseFormat->setCharset(Defaults::$charset); $charset = $this->responseFormat->getCharset() ?: Defaults::$charset; $this->headerData->set(new HeaderKey('Content-Type', (Defaults::$useVendorMIMEVersioning ? 'application/vnd.' . Defaults::$apiVendor . "-v{$this->requestedApiVersion}" . '+' . $this->responseFormat->getExtension() : $this->responseFormat->getMIME()) . '; charset=' . $charset)); $this->headerData->set(new HeaderKey('Content-Language', Defaults::$language)); if (isset($this->apiMethodInfo->metadata['header'])) { foreach ($this->apiMethodInfo->metadata['header'] as $header) { if (strpos(':', $header) !== false) { $header = \explode(':', $header); $this->headerData->set(new HeaderKey($header[0], $header[1]), true); continue; } $this->headerData->set(new HeaderKey(null, $header), true); } } $code = 200; if (!Defaults::$suppressResponseCode) { if ($e) { $code = $e->getCode(); } elseif (isset($this->apiMethodInfo->metadata['status'])) { $code = $this->apiMethodInfo->metadata['status']; } } $this->responseCode = $code; if (is_null($this->requestFromObject)) { $this->headerData->setVersion($_SERVER['SERVER_PROTOCOL']); } else { $this->headerData->setVersion($this->requestFromObject->getVersion()); } $this->headerData->setStatusCode($code); }