Não é possível obter recurso usando o openssl s_client

0

Eu tentei seguir o comando openssl s_client -connect google.com:443 e consegui me conectar com o google.com em SSL.

Mas quando tentei obter algum recurso usando GET /?q=cats HTTP/1.1 <enter> Host google.com <enter><enter> , recebi a mensagem abaixo:

HTTP/1.1 400 Bad Request
Date: Wed, 19 Aug 2015 21:12:02 GMT
Server: Apache
Content-Length: 307
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
Host google.com</pre>
</p>
</body></html>
closed

Se eu não especificar nenhuma versão HTTP e usar GET /?q=cats <enter> , obtenho abaixo da resposta. Na resposta, posso ver o URL correto https://www.google.co.in/?q=cats&gws_rd=cr&ei=yPPUVYeVApGzuATIkpuQCw e, se usar o mesmo no navegador, ele funciona.

Estou sentindo falta de alguns cabeçalhos ou outra coisa?

HTTP/1.0 302 Found
Location: https://www.google.co.in/?q=cats&gws_rd=cr&ei=yPPUVYeVApGzuATIkpuQCw
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Date: Wed, 19 Aug 2015 21:23:20 GMT
Server: gws
Content-Length: 273
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1440019400:LM=1440019400:V=1:S=fdzyHaeMMBcBYPPy; expires=Fri, 18-Aug-2017 21:23:20 GMT; path=/; domain=.google.com
Set-Cookie: NID=70=Xxap0a_fYjPIwnvwUuyUqKaT6UH6ZjttA6zv6CYv8qVGMCuOEyNRc8hR2JCi1X_8522QMF2OpsG9dDrWphQh-df0orBmG-DC0WCTF9A_YVJYp3YSgQyap5GlL11EBjff; expires=Thu, 18-
Feb-2016 21:23:20 GMT; path=/; domain=.google.com; HttpOnly
Alternate-Protocol: 443:quic,p=1
Alt-Svc: quic=":443"; p="1"; ma=604800

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.in/?q=cats&amp;gws_rd=cr&amp;ei=yPPUVYeVApGzuATIkpuQCw">here</A>.
</BODY></HTML>
read:errno=0

Outro tipo de resposta 302.

**GET / HTTP/1.1
Host: www.google.com**

HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: https://www.google.co.in/?gfe_rd=cr&ei=7_3UVfDeCuPI8AeMkZzwDQ
Content-Length: 262
Date: Wed, 19 Aug 2015 22:06:39 GMT
Server: GFE/2.0
Alternate-Protocol: 443:quic,p=1
Alt-Svc: quic=":443"; p="1"; ma=604800

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.in/?gfe_rd=cr&amp;ei=7_3UVfDeCuPI8AeMkZzwDQ">here</A>.
</BODY></HTML>
    
por hagrawal 19.08.2015 / 23:19

1 resposta

5

Quando o Google diz

Request header field is missing ':' separator.

O que eles realmente querem dizer é que o campo de cabeçalho na solicitação precisa usar um separador ':'.

Então, em vez de enviar isso:

GET /?q=cats HTTP/1.1<enter> 
Host google.com<enter>
<enter>

Você precisa enviar isto:

GET /?q=cats HTTP/1.1<enter> 
Host: google.com<enter>
<enter>

(observe: separando "Host" e "google.com")

Uma vez fora do caminho, você ganha um 302:

HTTP/1.0 302 Found
Location: https://www.google.co.in/?q=cats&gws_rd=cr&ei=yPPUVYeVApGzuATIkpuQCw

Na verdade, recebo um 301 na mesma solicitação:

HTTP/1.1 301 Moved Permanently
Location: https://www.google.com/?q=cats

Estas não são respostas de erro, são respostas de redirecionamento. O Google ouviu nossa solicitação e deseja que nós a solicitemos de forma diferente. No meu caso, ele me disse que eu não deveria perguntar "google.com", eu deveria perguntar "www.google.com", e eu deveria ter isso em mente para a próxima vez. No seu caso, queria que você acessasse www.google.co.in e usasse uma string de consulta diferente - presumivelmente, você está na Índia e quer que você acesse uma versão local do Google. Quanto a querer que você use uma string de consulta diferente, eles são normais, com parâmetros de string de consulta do Google (gws_rd, ei); eles estão apenas preparando sua consulta para você.

Esse é o comportamento normal do aplicativo da web. Você criou uma consulta à mão. O Web App (Google) não gostou de alguns aspectos de sua consulta e a reescreveu para ficar mais compatível com o que teria acontecido se você tivesse ido em um navegador comum e pesquisado por "gatos". Em seguida, eles entregaram essa nova URL ao seu cliente (neste caso, openssl) e disseram para ela perguntar novamente. Mas desde que você está fazendo isso manualmente, você não perguntou de novo, e ao invés disso você interpretou erroneamente como uma condição de erro.

Se eu fizer o que eles pedem e repetir minha consulta, mas com Host: www.google.com em vez de Host: google.com , obtenho os resultados esperados se você estivesse procurando gatos.

    
por 19.08.2015 / 23:56

Tags