http/1.0 과 http/1.1 의 차이??

googlejoa의 이미지

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 일때 어떻게 해야 하는지 혹시 아시는 분 계신가요?

nthroot의 이미지

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에선 주어야 되네요.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

nthroot의 이미지

테스트 예제 입니다.

[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

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

정태영의 이미지

googlejoa wrote:

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-type:text/html\r\n\r\n");

네임기반 버춰호스트는 HTTP/1.1부터 지원되는 내용입니다 :)
Host: ...를 빼거나 HTTP/1.1 로 하심 될겁니다 :)

HTTP/1.1 에선.. keep-alive같은것도 있고 =3=33
하튼 이것저것 추가된게 많이 있습니다 :D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

lkjt의 이미지

1.1 에서는
필수 로 들어가야 할것이

Host 입니다.

googlejoa의 이미지

우선, 답변들 감사합니다.

그런데, 제가 여쭤 본 것은 위에 표시된 그대로 하면 잘 실행이 되는데 HTTP/1.1 로 수정하면 시간이 무진장 오래 걸린다는 겁니다.

즉, HOST 를 써주는 것은 HTTP/1.0 으로 보내는 경우에도 아무런 문제 없습니다.

다만 telnet 으로 검사해 보더라도 HTTP/1.0 으로 보낼때 보다 HTTP/1.1 로 보낼때가 훨씬 시간이 오래 걸린다는 것입니다. (서버에서 연결을 끊는 시간이 말이죠.)

그래서 HTTP/1.1 일 경우에는 혹시 다른 처리과정을 거쳐야 하는가 궁금했습니다.
(참, 무슨 제어문자들도 추가 되더군요..)

정태영의 이미지

keep-alive 때문에 다음 요청을 기다리고 있어서 그렇습니다..

connection: close를 붙여보세요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

소타의 이미지

Connection: close
라는 요청 헤더를 포함시켜보세요..
keep-alive라는 아주 좋은 기능때문에 그렇습니다.. ^^;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.