当我使用nc命令获得HTTP响应时,结果不正确。 例如
$nc site.it 80
GET / HTTP/1.1
Host: site.it
User-Agent: curl/7.54.0
Accept: */*
HTTP/1.1 200 OK
Date: Fri, 13 Apr 2018 07:34:31 GMT
Server: Apache/2.4.29 (Debian)
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html;charset=UTF-8
17b
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Index of /</title>
但是当我使用curl命令结果是
时$curl -v site.it
* Rebuilt URL to: site.it/
* Trying 1.2.3.4...
* TCP_NODELAY set
* Connected to site.it (1.2.3.4) port 80 (#0)
> GET / HTTP/1.1
> Host: site.it
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 13 Apr 2018 07:39:44 GMT
< Server: Apache/2.4.29 (Debian)
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
< Content-Type: text/html;charset=UTF-8
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Index of /</title>
在这种情况下,使用nc
命令的第一个请求会有一个额外的字符 17b
,这对于真正的页面源不可用。
有人能告诉我它为什么会发生。
答案 0 :(得分:2)
因为响应是使用Transfer-Encoding: chunked
发回的,所以 17b 是第一个数据块的大小(以十六进制表示)。 curl,作为一个HTTP / 1.1兼容的客户端,将为您解码,只有实际的正文内容。
有关格式的详细信息,请参阅RFC 7230 section 4.1。