http/1.0 과 http/1.1 의 차이??
글쓴이: googlejoa / 작성시간: 토, 2004/05/15 - 8:31오후
php 에서 소켓 연결 하는 것을 보면 다음과 같이 하면 됩니다.
$domain="url.com"; $port="80"; $query="/index.html"; function getPage($domain,$port,$query) { $fp = @fsockopen($domain, $port, &$errno, &$errstr, 1024); if($fp) { fputs($fp, "GET $query HTTP/1.0\r\n"); fputs($fp, "HOST $domain\r\n"); fputs($fp, "User-Agent Mozilla/4.0\r\n"); fputs($fp, "content-typetext/html\r\n\r\n"); while(!feof($fp)) { $temp=fgets($fp,128); $str.=$temp; } } else { echo $errno."".$errstr."\n"; } @fclose($fp); return $str; }
그런데 위에서 프로토콜을 http/1.0 이 아니라 http/1.1 로 바꾸면 제대로 작동이 안 되는 것 같습니다.
http/1.1 일때 어떻게 해야 하는지 혹시 아시는 분 계신가요?
Forums:
http://www.ietf.org/rfc/rfc1945.txt?numb
http://www.ietf.org/rfc/rfc1945.txt?number=1945
http://www.ietf.org/rfc/rfc2616.txt?number=2616
400 Bad Request 가 발생하네요.
그리고..
14.23 Host
The Host request-header field specifies the Internet host and port
number of the resource being requested, as obtained from the original
URL given by the user or referring resource (generally an HTTP URL,
as described in section 3.2.2). The Host field value MUST represent
the network location of the origin server or gateway given by the
original URL. This allows the origin server or gateway to
differentiate between internally-ambiguous URLs, such as the root "/"
URL of a server for multiple host names on a single IP address.
Host = "Host" ":" host [ ":" port ] ; Section 3.2.2
A "host" without any trailing port information implies the default
port for the service requested (e.g., "80" for an HTTP URL). For
example, a request on the origin server for
<http://www.w3.org/pub/WWW/> MUST include:
GET /pub/WWW/ HTTP/1.1
Host: www.w3.org
A client MUST include a Host header field in all HTTP/1.1 request
messages on the Internet (i.e., on any message corresponding to a
request for a URL which includes an Internet host address for the
service being requested). If the Host field is not already present,
an HTTP/1.1 proxy MUST add a Host field to the request message prior
to forwarding it on the Internet. All Internet-based HTTP/1.1 servers
MUST respond with a 400 status code to any HTTP/1.1 request message
which lacks a Host header field.
See sections 5.2 and 19.5.1 for other requirements relating to Host.
호스트 네임을 위 처럼 1.1에선 주어야 되네요.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
테스트 예제 입니다.[root@madnom wowgirl]# te
테스트 예제 입니다.
[root@madnom wowgirl]# telnet yahoo.com 80
Trying 66.218.71.114...
Connected to yahoo.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: madnom.com
HTTP/1.0 200 OK
Date: Sat, 15 May 2004 11:49:17 GMT
P3P: policyref="http://p3p.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Connection: close
Content-Type: text/html
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
Re: http/1.0 과 http/1.1 의 차이??
네임기반 버춰호스트는 HTTP/1.1부터 지원되는 내용입니다 :)
Host: ...를 빼거나 HTTP/1.1 로 하심 될겁니다 :)
HTTP/1.1 에선.. keep-alive같은것도 있고 =3=33
하튼 이것저것 추가된게 많이 있습니다 :D
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
1.1 에서는 필수 로 들어가야 할것이Host 입니다.
1.1 에서는
필수 로 들어가야 할것이
Host 입니다.
우선, 답변들 감사합니다.그런데, 제가 여쭤 본 것은 위에 표시된
우선, 답변들 감사합니다.
그런데, 제가 여쭤 본 것은 위에 표시된 그대로 하면 잘 실행이 되는데 HTTP/1.1 로 수정하면 시간이 무진장 오래 걸린다는 겁니다.
즉, HOST 를 써주는 것은 HTTP/1.0 으로 보내는 경우에도 아무런 문제 없습니다.
다만 telnet 으로 검사해 보더라도 HTTP/1.0 으로 보낼때 보다 HTTP/1.1 로 보낼때가 훨씬 시간이 오래 걸린다는 것입니다. (서버에서 연결을 끊는 시간이 말이죠.)
그래서 HTTP/1.1 일 경우에는 혹시 다른 처리과정을 거쳐야 하는가 궁금했습니다.
(참, 무슨 제어문자들도 추가 되더군요..)
keep-alive 때문에 다음 요청을 기다리고 있어서 그렇습니다..
keep-alive 때문에 다음 요청을 기다리고 있어서 그렇습니다..
connection: close를 붙여보세요 ;)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
Connection: close라는 요청 헤더를 포함시켜보세요..
Connection: close
라는 요청 헤더를 포함시켜보세요..
keep-alive라는 아주 좋은 기능때문에 그렇습니다.. ^^;
댓글 달기