Pergunta

Eu estou construindo um WebClient biblioteca.Agora estou a implementação de um recurso de proxy, então eu estou fazendo algumas pesquisas e vi alguns usando o código CONNECT método para solicitar um URL.

Mas, verificando se ela está dentro do meu navegador da web, ele não usa o CONNECT o método, mas chama o método GET em vez disso.

Então, eu estou confuso.Quando eu devo usar os dois métodos?

Foi útil?

Solução

Uma solicitação de conexão insta o seu proxy para estabelecer um HTTP túnel remoto ponto final.Normalmente é usado para conexões SSL, mas pode ser utilizado com o HTTP, assim como o utilizado para fins de proxy encadeamento e encapsulamento)

CONNECT www.google.com:443 

A linha acima abre uma conexão a partir do seu proxy para www.google.com na porta 443.Após isso, o conteúdo que é enviado pelo cliente é encaminhado pelo proxy www.google.com:443.

Se um usuário tenta recuperar uma página http://www.google.com, o proxy pode enviar o exato mesmo pedido e obter resposta para ele, em seu nome.

Com o SSL(HTTPS), apenas o remoto dois pontos finais de compreender as solicitações, e o proxy não pode decifrá-los.Portanto, tudo o que ele faz é abrir o túnel usando a LIGAR, e permite que os dois pontos de extremidade (servidor e cliente) falar diretamente uns aos outros.

O Encadeamento De Proxy:

Se o encadeamento de 2 servidores proxy, esta é a sequência de solicitações para ser emitido.

GET1 is the original GET request (HTTP URL)
CONNECT1 is the original CONNECT request (SSL/HTTPS URL or Another Proxy)

User Request ==CONNECT1==> (Your_Primary_Proxy ==CONNECT==> AnotherProxy-1 ... ==CONNECT==> AnotherProxy-n) ==GET1(IF is http)/CONNECT1(IF is https)==> Destination_URL

Outras dicas

TL;DR um cliente da web usa CONNECT só quando ele sabe que fala a um proxy e o final URI começa com https://.

Quando um navegador diz:

CONNECT www.google.com:443 HTTP/1.1

isso significa que:

Oi proxy, por favor, abra uma conexão TCP raw para o google;qualquer seguintes bytes que eu escrevo, você apenas repetir através de ligação sem qualquer interpretação.Ah, e mais uma coisa.Faça isso somente se você falar O Google diretamente, mas se você usar outro proxy-se, em vez disso, você basta dizer-lhes a mesma CONNECT.

Observe como isso não diz nada sobre TLS (https).Na verdade CONNECT é ortogonal a TLS;você pode ter apenas uma, você pode ter outros, ou você pode ter ambos.

O que está sendo dito, a intenção de CONNECT é permitir que end-to-end encriptado TLS sessão, assim os dados ilegíveis para um proxy (ou de toda uma cadeia de proxy).Ele funciona mesmo se o proxy não entender o TLS em todas, porque CONNECT pode ser emitido dentro simples HTTP e requer do proxy, nada mais do que copiar matérias bytes redor.

Mas a conexão para o primeiro proxy pode ser TLS (https), embora ela significa uma dupla de criptografia de tráfego entre você e o primeiro proxy.

Obviamente, não faz sentido CONNECT quando se fala diretamente para a final do servidor.Você acabou de começar a falar TLS e, em seguida, emitir HTTP GET.O final servidores normalmente desativar CONNECT completamente.

Para um proxy, CONNECT suporte adiciona riscos de segurança.Todos os dados podem ser passados através de CONNECT, mesmo ssh tentativa de invasão a um servidor 192.168.1.*, mesmo SMTP de envio de spam.Mundo exterior vê esses ataques regulares de conexões TCP iniciada por um proxy.Eles não se importam com o que é a razão, eles não podem verificar se HTTP CONNECT é a culpa.Portanto, cabe a proxies para proteger-se contra o uso indevido.

Como regra geral é usado para HTTP simples e conectar para https

Há mais detalhes, por isso, você provavelmente deseja ler o RFC-S relevante

http://www.ietf.org/rfc/rfc2068.txt http://www.ietf.org/rfc/rfc2817.txt

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top