0

我们正在使用 telnet 机制向服务器发送 http 请求并获得响应。在使用 telnet 发送 HTTP GET 请求时,我们注意到了一件奇怪的事情。第一种方法适用于大多数环境,但不适用于其中一个环境。但是第二种方法(而不是相对路径,使用完整路径)在这种环境下工作正常。

**

  • 方法1:

**

(printf "GET /test.jsp HTTP/1.0\nAccept: */*\nUser-Agent: WatchDog\n\n"; sleep 9) | telnet xx.xx.xx.xx 8093 Trying xx.xxx.xx.xx... 连接到 xx.xx.xx.xx。转义字符是 '^]'。

外部主机关闭连接。

**

  • 方法2:

**

(printf "GET http://xx.xx.xx.xx:8093/test.jsp HTTP/1.0\nAccept: */*\nUser-Agent: WatchDog\n\n"; sleep 9) | 远程登录 xx.xx.xx.xx 8093

Trying xx.xx.xx.xx... 
Connected to xx.xx.xx.xx. 
Escape character is '^]'. 
HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=91643475E80038EA8770CE6803EE320C; Path=/ 
Content-Type: text/html;charset=UTF-8 
Content-Language: zh-US 
Content-Length: 42 
Date: Mon, 03 Dec 2012 04:25:09 GMT 
Connection: close 

The Server is Running 

Connection closed by foreign host. 

为什么 method1 不是只在一个环境中运行?我们需要在那个环境中检查一些东西吗?

请给你的建议...

谢谢, 塞卡

4

2 回答 2

1

除了必须是 \r\n的行尾和应该*/*代替的接受标头之外/,您的第一个请求没有主机名。

HTTP 1.1 服务器可以拒绝没有设置主机的 HTTP 请求,无论是在绝对请求 URI 中还是在主机头中。

于 2012-12-04T10:14:06.360 回答
1

HTTP/1.0 (RFC 1945) 指定以 CR LF 结尾的行。某些服务器可能会严格应用此规则。尝试以 \r\n 作为行尾发送请求。发送绝对 URI 也保留供代理使用(RFC 1945 的第 5.1.2 节)。

如果不同的行尾和 URI 样式对您没有帮助,您将不得不查看服务器配置/实现,因为我看不出方法 1 有什么问题。

于 2012-12-04T10:01:06.177 回答