Assim, você pode fazer isso com uma combinação de um proxy da Web e um servidor ICAP. Estou mais familiarizado com o Squid Proxy & GreasySpoon para o ICAP. Eu estou usando o Squid v3.2.1 & GreasySpoon 1.0.8.
- Squid: link
- GreasySpoon: extinta! :( A idéia será a mesma em outros servidores ICAP apenas com impls diferentes. Ela costumava ser hospedada no sourceforge, então talvez o Wayback Machine vai ter isso. Não tenho certeza.
Configuração do Squid
De qualquer forma, configure o Squid para atuar como um cache padrão. Aqui está uma configuração de amostra. Para mais detalhes sobre a configuração adequada do squid, confira os documentos extensos que estão por aí. A seção que você gosta para essa pergunta é a # ICAP Configurations
na parte inferior.
cache_effective_user squid
cache_effective_group squid
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 81 # http - public
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny blocksites
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128 transparent
# Leave coredumps in the first cache dir
core dump_dir /var/cache/squid
# ICAP Configurations
icap_enable on
icap_preview_enable on
icap_service service_req reqmod_precache bypass=0 icap://127.0.0.1:1344/reqmod
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=0 icap://127.0.0.1:1344/respmod
adaptation_access service_resp allow all
Note que o servidor ICAP que eu usei estava no mesmo host que o proxy squid, então usei 127.0.0.1. Se seu proxy & ICAP estão em hosts diferentes, então certifique-se de trocar o loopback pelo nome do servidor ou IP do outro servidor.
Configuração ICAP
Essa é a parte fácil.
Novamente, estou usando o agora extinto servidor ICAP "Greasy Spoon". Eu achei muito simples e fiz o que eu queria com um mínimo de dor de cabeça. Além disso, enquanto outras opções estão disponíveis, eu uso os recursos do plug-in Java.
Para o caso do GreasySpoon, acabei de criar um pequeno script Java (não javascript, embora isso seja possível com muitos servidores ICAP) que direciona a solicitação HTTP e adiciona o cabeçalho necessário (observe que os comentários principais fornecem metadados para o Servidor GS. Provavelmente não é necessário para outros):
//-------------------------------------------------------------------
// ==ServerScript==
// @name Add_Header
// @status on
// @description
// @include .*
// @exclude
// @order 0
// ==/ServerScript==
// --------------------------------------------------------------------
public void main(HttpMessage httpMessage){
// Add the "my-header" header with a value of "test.server.com"
httpMessage.addHeader("my-header", "test.server.com");
}
Isso adiciona o elemento de cabeçalho do cabeçalho do meu cabeçalho a todas as solicitações.