Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

criatividade zero

cabeçalho header

Recommended Posts

quais são os cabeçalhos necessários?

 

a minha header contém

Array

(

[0] => X-Powered-By: PHP/5.3.4

[1] => content-type: text/html; charset=utf-8

)

 

 

é necessário setar os outros?

header('Content-language: en');

header('HTTP/1.1 200 OK');

header('content-length...

header('last-modified...

 

 

em caso de página não encontrada, é preciso setar 404?

header('HTTP/1.1 404 Not Found');

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geralmente os headers que marcam a resposta da requisição (200/404/550/etc) são enviados automativamente pelo servidor (Apache/IIS/ngix/lighthttp/etc). Você só precisa programar isso se estiver usando SEO e em seu .htaccess você estiver colocando tudo para o index.php.

 

 

Eu acho melhor setar idioma através de metatags, já que essa informação só é aproveitada por robôs/crawlers:

<meta http-equiv="Content-Language" content="pt">

 

O cabeçalho 'last-modified' é usado para definir a validade do cache, quando se coloca uma data anterior, força o navegador a não fazer cache da página:

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header('Pragma: no-cache');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Content-Language pela metatag não seria uma boa pq o site é multi idioma, então o template teria que fazer uma chamada para retornar o idioma, então fica mais facil sendo tudo configurado na hora de renderizar a view:

charset, lang, cache...

 

 

to dando uma olhada no Kohana FW e ele tem uma saida para todas as requisições

public static $messages = array(
	200 => 'OK',
	201 => 'Created',
	202 => 'Accepted',
	203 => 'Non-Authoritative Information',
	204 => 'No Content',
	205 => 'Reset Content',
	206 => 'Partial Content',
	[...]
);

protected $_status = 200;

 

 

header(content-type: text/html; charset=utf-8content-length: 7)

header($protocol.' '.$this->_status.' '.Response::$messages[$this->_status]);

 

Array

(

[0] => X-Powered-By: PHP/5.3.4

[1] => content-type: text/html; charset=utf-8

[2] => content-length: 7

)

 

HTTP/1.1 200 OK

 

 

no caso de erros, o status não é util?

se eu não usar no header o server vai enviar corretamente o status 200, 404, 301 [...]?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, como eu disse:

Você só precisa programar isso se estiver usando SEO e em seu .htaccess você estiver colocando tudo para o index.php.

 

Frameworks já são desenvolvidos pensando-se em SEO, e eles colocam o .htaccess como o abaixo:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/application/) [OR]
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

 

Isto é, qualquer que seja a url da requisição, o servidor irá chamar o arquivo index.php, que irá então analizar a requisição e despachar os eventos programados para ela.

 

Em sites que não usam isso, esse gerenciamento do status da resposta fica a cargo do servidor, que simplesmente verifica se o arquivo existe, se não retorna 404, se nao há restrições, se há retorna 401, e assim por diante.

 

 

Content-Language pela metatag não seria uma boa pq o site é multi idioma, então o template teria que fazer uma chamada para retornar o idioma, então fica mais facil sendo tudo configurado na hora de renderizar a view:

charset, lang, cache...

 

Template não faz chamadas. O template é um elemento estático (geralmente um arquivo .ptml, .tpl ou .html). Você tem uma classe construtora/renderizadora (o Smarty, por exemplo) que irá receber uma chamada do controller, pegar o conteúdo do template da página solicitada, substituir as marcações no template pelas variáveis e retornar o HTML pronto para que o controller envie para o navegador para ser renderizada a página. Uma dessas variáveis pode ser o idioma, que será então colocada na meta-tag pela classe construtora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então pela regra do htaccess, qualquer URL sera representada pala index.php, e isso sempre vai retornar status 200, mesmo quando o sistema der os parametros como invalidos - o que deveria representar 404

 

ex

RewriteRule (.*) index.php

 

http://localhost/index/

o sistema interpreta `index` como uma regra válida

[200]

 

http://localhost/indeks/

o sistema interpreta `indeks` como falso

[404]

 

 

embora o status de ambos serem diferentes, o servidor retornaria status-200 ja que a regra do htaccess encaminhou para a index.php e esta existe

 

não é isso que acontece?

por isso a necessidade de alterar o status do header conforme a validade da regra

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não necessariamente, ele simplesmente delegará essa responsabilidade ao seu programa. Ou seja você terá que programar o envio dos headers.

 

Pode-se fazer sef-urls (urls amigáveis para motores de busca) de duas maneiras.

 

Uma é definir todas as regras já no arquivo .htaccess. Ex.:

RewriteEngine On
RewriteRule ^([a-z]+)/([0-9]+)\-([a-z\-]+) http://www.meusite.com.br/index.php?categoria=$1&id_objeto=$2&titulo=$3 [NC]
# ...

 

Assim, se o servidor recebesse por exemplo:

/noticias/1044-obama-mata-osama

 

Ele irá redirecionar para:

http://www.meusite.com.br/index.php?categoria=noticias&id_objeto=1044&titulo=obama-mata-osama

 

Outra maneira é usar o .htaccess apenas para encaminhar todas as requisições para o arquivo index.php (exemplo que dei no post anterior) onde nessa url será feito um 'parse' e uma verificação sobre sua validade, depois é executada a ação relativa àquela url.

 

Frameworks e CMSs usam geralmente esta última.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou seja você terá que programar o envio dos headers.

 

então

quais seriam os parametros necessários?

 

Content-Type

Content-Length

protocolo, status e mensagem HTTP/1.1 200 OK

...

[???]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você só precisa usar 'Content-type' se o servidor for retornar a saída em outro formato que não HTML, como json ou xml por exemplo. 'Content-Lenght' é desnecessário... basta fazer um 'parser' na requisição e verificar se a url é válida, se for retornar o objeto relacionado a ela, caso contrário retorna 404. Aprofundando, se a url for válida, é bom verificar também se o usuário tem permissão de acesso para aquele objeto, se não, retorna 401. E por aí vai... para páginas HTML só a mensagem de status mesmo.

 

Eu não sei qual o servidor você está usando, mas pelo menos com o Apache ele já manda todos os headers necessários, só precisa se preocupar com a mensagem de status e o tipo de conteúdo (apenas se não for html, pois os navegadores sabem se virar, mas é bom mandar por garantia). Ele já retorna algo como:

 

HTTP/1.1 200 OK
Server: ...
X-Powered-By: ...
Date: ... GMT
Connection: close

 

E se você definir 'Content-type' ele também retorna esse parâmetro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uso apache sim

 

e o resto dos status?

"403": "Forbidden"
"408": "Request Time-out"
"500": "Internal Server Error"
"502": "Bad Gateway"

 

são irrelevantes?

 

 

outra questão

404 seria para página não encontrada

se eu tenho uma pagina que exibe uma noticia, e for passado um parametro inválido, a noticia não será encontrada...

mesmo assim 'recomenda-se' o 404, mas sempre é exibida uma mensagem amigavel, então isso não torna o status 404 desnecessário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esses status que você citou são para uso exclusivo do servidor.

 

Programando um sistema trabalhariamos apenas com os status 200, 404, 401 (Acesso não autorizado) e 301-3.

 

É necessário enviar o header status 404 mesmo se estiver usando custom error pages pois embora para o usuário humano na faça diferença, os crawlers precisa dessa informação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.