使用telnet的HTTP请求没有得到任何响应

时间:2012-12-04 08:29:33

标签: linux http telnet

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

**

  • 方法一:

**

  

(printf“GET /test.jsp HTTP / 1.0 \ nAccept:* / * \ nUser-Agent:WatchDog \ n \ n”; sleep 9)| telnet xx.xx.xx.xx 8093       试试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)| telnet 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不能只在一个环境中运行?我们需要检查那个环境中的某些东西吗?

请提出你的建议......

谢谢, Sekhar

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

除了must be \r\n和您的接受标题(*/*而不是/的行结尾外,您的第一个请求没有主机名。

HTTP 1.1服务器可以在绝对请求URI或主机头中拒绝没有主机集的HTTP请求。