我们正在使用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. 逃脱角色是'^]'。
连接被外国主机关闭。
**
**
(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
答案 0 :(得分:1)
HTTP / 1.0(RFC 1945)指定结束为CR LF的行。某些服务器可能严格应用此规则。尝试使用\ r \ n作为行结尾发送请求。发送绝对URI也保留供代理使用(RFC 1945的第5.1.2节)。
如果不同的行结尾和URI样式没有帮助,你将不得不查看服务器配置/实现,因为我看不出方法1有什么问题。
答案 1 :(得分:1)
除了must be \r\n和您的接受标题(*/*
而不是/
的行结尾外,您的第一个请求没有主机名。
HTTP 1.1服务器可以在绝对请求URI或主机头中拒绝没有主机集的HTTP请求。