当nc收到HTTP时,HTTP响应不正确

时间:2018-04-13 07:50:44

标签: http curl request netcat

当我使用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 ,这对于真正的页面源不可用。
有人能告诉我它为什么会发生。

1 个答案:

答案 0 :(得分:2)

因为响应是使用Transfer-Encoding: chunked发回的,所以 17b 是第一个数据块的大小(以十六进制表示)。 curl,作为一个HTTP / 1.1兼容的客户端,将为您解码,只有实际的正文内容。

有关格式的详细信息,请参阅RFC 7230 section 4.1