#http #ssl #https #rust
#http #ssl #https #Ржавчина
Вопрос:
Отправка HTTP-запроса с использованием примера клиентского кода rustls
let mut config = rustls::ClientConfig::new();
config.root_store.add_server_trust_anchors(amp;webpki_roots::TLS_SERVER_ROOTS);
let dns_name = webpki::DNSNameRef::try_from_ascii_str("google.com").unwrap();
let mut sess = rustls::ClientSession::new(amp;Arc::new(config), dns_name);
let mut sock = TcpStream::connect("google.com:443").unwrap();
let mut tls = rustls::Stream::new(amp;mut sess, amp;mut sock);
tls.write(concat!("GET / HTTP/1.1rn",
"Host: google.comrn",
"Connection: closern",
"Accept-Encoding: identityrn",
"rn")
.as_bytes())
.unwrap();
let ciphersuite = tls.sess.get_negotiated_ciphersuite().unwrap();
writeln!(amp;mut std::io::stderr(), "Current ciphersuite: {:?}", ciphersuite.suite).unwrap();
let mut plaintext = Vec::new();
tls.read_to_end(amp;mut plaintext).unwrap();
stdout().write_all(amp;plaintext).unwrap();
в результате появляется сообщение о перенаправлении:
Current ciphersuite: TLS13_CHACHA20_POLY1305_SHA256
HTTP/1.1 301 Moved Permanently
Location: https://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 05 Sep 2020 13:56:25 GMT
Expires: Mon, 05 Oct 2020 13:56:25 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 220
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Alt-Svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Connection: close
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>
Является ли это правильным поведением для данного примера кода? Что я должен изменить, чтобы получить положительный ответ?
Ответ №1:
Является ли это правильным поведением для этого примера кода?
ДА. Это также можно проверить при попытке такого же запроса с использованием других инструментов:
$ curl -v https://google.com
...
< HTTP/1.1 301 Moved Permanently
< Location: https://www.google.com/
Что я должен изменить, чтобы получить ответ OK?
Вместо этого просто используйте URL, указанный в перенаправлении, т.Е. https://www.google.com
а не https://google.com
.
$ curl -v https://www.google.com
...
< HTTP/1.1 200 OK