protected function generateRequestHeaders(
        $verb,
        $resourceType,
        $resourceId,
        $isQuery = false,
        $contentLength = 0,
        array $extraHeaders = []
    ){
        $xMsDate = gmdate('D, d M Y H:i:s T');
        $headers = [
            'Accept: application/json',
            'User-Agent: ' . static::USER_AGENT,
            'Cache-Control: no-cache',
            'x-ms-date: ' . $xMsDate,
            'x-ms-version: ' . $this->apiVersion,
            'Authorization: ' . $this->generateAuthHeader($verb, $xMsDate, $resourceType, $resourceId)
        ];

        if (in_array($verb, [Verbs::POST, Verbs::PUT])) {
            $headers[] = 'Content-Length: ' . $contentLength;

            if ($isQuery === true) {
                $headers[] = 'Content-Type: application/query+json';
                $headers[] = 'x-ms-documentdb-isquery: True';
            } else {
                $headers[] = 'Content-Type: application/json';
            }
        }

        return array_merge($headers, $extraHeaders);
    }