Tag Archives: linux

Controle de Cache para páginas WEB

Cache-Control é um cabeçalho HTTP que consiste em um conjunto de configurações que permite com que você especifique como, quando e por quanto tempo um um cache acontecerá.

Quando você visita um website, seu browser copia partes dos componentes desse website para um diretório para que experiência seja mais rápida. Quando você revisita esse site muitas partes do site não são carregadas do servidor web, mas sim do cache que está na sua maquinas, você pode usar o Cache-Control para definir as regas de como esses conteúdo será carregado, como por quanto tempo o browser pode fazer cache, se ele vai fazer cache de algum componente ou algum tipo de arquivo específico.

É importante entender que cache é muito bom para a experiência do usuário final, fazê-lo ter que ir até seu servidor web para todas as requisições pode fazer a experiência com seu produto ser desagradável, mas é muito mais importante você entender o que realmente pode ficar na máquina do usuário e o que deve ser carregado dinamicamente desconsiderando o lado do usuário, afinal, dependendo do seu tipo de conteúdo, uma página mau configurada, um componente mau testado, ou um chat-bot onde precisa existir uma comunicação mais dinâmica pode ser impactado.

Cache-Control: no-cache

no-cache significa que o recurso não pode ser reutilizado sem primeiro ser checado se ele foi alterado ou atualizado em sua origem. Usualmente um cabeçalho ETag é usado para isso.

Cache-Control: no-store

no-store é similar ao no-cache onde o conteúdo não pode ser reutilizado nem cacheado. Entretanto, diferente da outra opção o no-store força que todo o conteúdo seja baixado novamente da fonte, desconsiderando a ETag.

Cache-Control: public

Uma resposta contendo public significa que está autorizado que o cache seja feito por qualquer parte envolvida, não apenas o cliente final, neste caso estamos falando de caches intermediários como proxys, gateways, CDN’s, etc.. Para essa situação é recomendado que seja adicionado o max-age afim de garantir que em algum momento o cache tando to usuário final quanto do intermediário sejam limpos.

Cache-Control: private

A opção private significa que apenas o browser do solicitante pode fazer cache do conteúdo, e os intermediários não devem fazer cache do conteúdo.

Cache-Control: max-age=<seconds>

Esta opção indica ao browser por quanto tempo ele deve considerar o conteúdo daquele cache como passível de utilização, após o termino desse tempo novas requisições devem recarregar todo o conteúdo.

Cache-Control: s-maxage=<seconds>

s-maxage é similar ao max-age. O “s” significa shared e é relevante apenas para os CDNs ou outro cache intermediário. Esta opção sobrescreve o max-age e expires.

Cache-Control: no-transform

Caches intermediários podem, as vezes, alterar o formato ou compressão das imagens para melhorar a performance. O no-transform diz aos intermediários para que não alterem o formato das imagens.

Exemplos de implementação:

Web Pages (HTML)

Para as páginas WEB (HTML) adicione as seguintes tags <meta> nas páginas que você quer que o controle de cache seja diferente do browser (lembrando que o código precisa estar na sessão  <head> da página):

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

.htaccess (Apache)

<IfModule mod_headers.c>
  Header set Cache-Control "no-cache, no-store, must-revalidate"
  Header set Pragma "no-cache"
  Header set Expires 0
</IfModule>

Java Servlet

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);

PHP

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

ASP

Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate"
Response.addHeader "Pragma", "no-cache"
Response.addHeader "Expires", "0"

ASP.NET

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "0");

Ruby on Rails

response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '0'

Python on Flask

resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"

Google Go

responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
responseWriter.Header().Set("Pragma", "no-cache")
responseWriter.Header().Set("Expires", "0")

Instalar o MSSQL-CLI

Já tem um tempo que a Microsoft disponibilizou via github outro cliente para administrar o SQL Server o MSSQL-CLI.

Esse cliente, como o SQL Ops Studio, vem com o conceito de multi plataforma (Linux, Windows e Mac).

Mas ao invés de focar em uma interface gráfica ele é a evolução do SQLCMD (para a alegria da turma do Shell).

Para instalar o cliente o processo é muito simples, isso se você não tiver um proxy na sua empresa, antes de tudo você precisa instalar o Phyton.

Após a instalação abra o prompt como administrador e digite:

pip install mssql-cli

Espere alguns minutos (dependendo da sua qualidade de Internet) e ele será instalado, você não tem opção de personalização da instalação.

Para abrir o cliente digite:

MSSQL-CLI -Sservidor

Existem outros parâmetros que você pode usar.

Já para quem está atrás de um firewall,,, lá vem a novela…

Primeiro que você precisa saber qual o endereço do seu proxy e porta.

Segundo que se você seguir a documentação pode acabar tendo alguns problemas com detalhes…

Na documentação do pip ele indica que você precisa passar o parâmetro – – proxy=username:password@proxy:port

Se você prestou atenção o caracter de separação do usuário da senha é “:” e o de separação entre a senha e o servidor é o “@”, logo, se sua senha possuir um desses 2 caracteres Vc vai receber um monte de erro estranho.

Para resolver isso configure 2 variáveis de ambiente a http_proxy e https_proxy da seguinte forma:

Tudo no prompt de comando

set http_proxy=dominio\usuário:senh%40@servidor:porta

set https_proxy=dominio\usuário:senh%40@servidor:porta

Você percebeu que o @ da senha ficou com %40?

A tabela é a seguinte :

@ – – > %40

$–>%24

!–>%21

Aí o resto é a mesma coisa para instalar :

pip install mssql-cli

Espero que tenha ajudo quem está tentando instalar através de um proxy.

Esse cliente tem um bom potencial para substituir o sqlcmd mas ainda tem muita coisa para melhorar…

SQL Server no Linux

Todos já devem estar sabendo dessa “novidade”

O link para o blog: https://blogs.microsoft.com/blog/2016/03/07/announcing-sql-server-on-linux

Se você quiser se cadastrar para “testar” o preview o link é: https://www.microsoft.com/en-us/server-cloud/sql-server-on-linux.aspx

Honestamente não sei se isso vai ser bom ou ruim,,, vejo muitas aplicações interessantes, mas também vejo muita dor de cabeça pela frente…

pode ser que eles usem isso para acabar com a versão Enterprise, forçando as empresas a usarem a nuvem caso queiram HA ou features avançadas? ou é uma forma de baratear o produto já que “em teoria” existem versões gratuitas de Linux? ainda mais pensando que ele vai ser distribuído por Docker,,,

Bom,,, de qualquer forma, mais uma coisa para relembrar,,, como faz tempo que não trabalho com linux… 🙁