2012-12-04 2 views
0

텔넷 메커니즘을 사용하여 서버에 http 요청을 보내고 응답을받습니다. HTTP GET 요청을 보내기 위해 텔넷을 사용할 때 이상한 점을 발견했습니다. 첫 번째 방법은 대부분의 환경에서 작동하지만 환경 중 하나에서 작동하지 않습니다. 그러나 두 번째 방법 (상대 경로 대신 전체 경로 사용)이이 환경에서 올바르게 작동합니다.텔넷을 사용하는 HTTP 요청이 응답을 얻지 못했습니다.

**

  • 방법 항목 :

**

(printf와 "GET /test.jsp HTTP/1.0 \ nAccept : */* \ nUSER 님 에이전트 : WatchDog \ n \ n "; 잠 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 님 에이전트 : 워치 독 \ 없음 **

  • 방법 2

    \ n "; 수면 9) | 방법 항목은 하나의 환경에서 실행되지 왜 텔넷은

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. 

8093을 xx.xx.xx.xx? 우리는 그 환경에서 어떤 것을 확인해야합니까?

Pls는이 ...

감사합니다, Sekhar

답변

1

HTTP/1.0 (1945 RFC) CR LF로 끝나는 라인을 지정을 제안을 제공합니다. 일부 서버는이 규칙을 엄격하게 적용 할 수 있습니다. \ r \ n 라인 엔딩으로 요청을 보내보십시오. 절대 URI를 보내는 것은 프록시 (RFC 1945의 섹션 5.1.2)에서 사용하도록 예약되어 있습니다.

하면 다양한 행 끝 나는 라인 엔딩 1.

1

외에 방법 잘못 아무것도 볼 수없는 것처럼, 서버 구성/구현에보고해야 도움이되지 않습니다 URI 스타일있는 must be \r\n 그리고 수락 헤더는 / 대신 */*이어야합니다. 첫 번째 요청에는 호스트 이름이 없습니다.

HTTP 1.1 서버는 절대 요청 URI 또는 ​​호스트 헤더에 호스트 집합이없는 HTTP 요청을 거부 할 수 있습니다.

+0

"HTTP 1.1 서버가 절대 요청 URI 또는 ​​호스트 헤더에 호스트 집합이없는 HTTP 요청을 거부 할 수 있습니다."-> 어떤 경우에이를 알 수 있습니까? 왜냐하면 우리는 호스트가없는 HTTP 1.1 서버로 HTTP 요청을 보내고 있으며 대부분의 환경에서 잘 작동하는 상대 경로를 사용하기 때문입니다. – Sekhar

+0

@Sekhar no, 이는 웹 서버 제조업체에 확인해야하는 구현 세부 사항입니다. RFC에 따르면 정확한 서버 리소스가 무엇인지 확인하기 위해 서버에서 발견 된 (예 : 의 URI 경로를 조사한 결과) 특정 서버에 고유 한 무언가를 발견하려고 시도 할 수 있습니다. "_] (http : // tools .ietf.org/html/rfc2616 # section-5.2). 요청을 수정 한 경우 (예 : 헤더 또는 URL에 호스트가 포함 된 유효한 HTTP 요청을 작성하고 헤더를 구분하는'\ r \ n ') 모든 서버에서 작동해야합니다. – CodeCaster

관련 문제