웹서버를만들고있읍니다

jjjjrr의 이미지

안녕하세요
웹서버를만들고있읍니다
브라우저의 요청이오면 내용을 분석해서
요청한내용을 보내줍니다
단일 페이지일경우는 잘되는데여
페이지에 다른파일(그림파일,플래시파일등등)이 포함되어있을경우가 안됩니다
제가한방법은
요청이 오면 파일을 보내줍니다
다시요청이 오면 또다시보내주는데여
다 보내주어도 브라우저에서는
처음보내준페이지만 인식을 하고 두번째부터는 인식하지를못하는것같읍니다
테스트를해보면
페이지에 다른파일(그림파일,플래시파일등등)이 포함되어있을경우
일반페이지요청이 오면 보내주구여
다시그림파일이나 다른파일요청이오면 (다시소켓이 억셉트됩니다)
다시보내주는데 브라우저에서는 못받느모양입니다
브라우저에서는 처음페이지만받은상태에서 계속기다리고있읍니다
처음요청이왔을때 보내주고 소켓연결을 끊어버리면
다음요청이 오지를않읍니다
소켓연결을 끊을시기가 언제인지....
왜 위와같은현상이 일어날까여
조언부탁드립니다

소타의 이미지

Connection: close
라는 응답 헤더를 보내보시기 바랍니다.
HTTP/1.1 표준에는 keep-alive라는게 있는데 접속을 끊지 않고 연속적으로 요청과 응답이 일어납니다. keep-alive가 사실 구현하기가 까다로운 편인데 당장 잘 동작하는지 확인하기 위해서는 저런 응답헤더를 보내서 클라이언트에게 이 세션은 종료되었으니 다시 연결하라고 알려줘야 합니다.
이 문제가 아니라면 구조적인 어떤 다른 문제가 있는 것 입니다.
특히나 소켓을 nonblock으로 한 후에 저 헤더 없이 응답없이 일방적으로 끊어버리면 클라이언트가 삽질할 수 있습니다.

jjjjrr의 이미지

안녕하세요
답변감사합니다
아래가 테스트하면서 기록한 요청 응답 메세지내용입니다
두파트인데 같은요청을 한번은 응답뒤 소켓을 강제로 끊은경우이고
또한번은 소켓을 닫지않은채로 보낸겁니다
한번더살펴봐주시면감사하겠읍니다
그리구 아래에서
OPTIONS / HTTP/1.1
translate: f
User-Agent: Microsoft-WebDAV-MiniRedir/5.1.2600
Host: 220.76.242.48
Content-Length: 0
Connection: Keep-Alive
이부분은 어떤요청인가여
메소드가 OPTIONS 이라는것은 처음 들어보는것같읍니다

GET /loginmem.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ko
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: 220.76.242.48
Connection: Keep-Alive

HTTP/1.0 200 OK
Server: da-mcf63urt8l91
Connection: close
Date: Thu, 10 Mar 2005 06:30:49 GMT

GET /loginmem.swf HTTP/1.1
Accept: */*
x-flash-version: 7,0,19,0
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: 220.76.242.48
Connection: Keep-Alive

HTTP/1.0 200 OK
Server: da-mcf63urt8l91
Connection: close
Date: Thu, 10 Mar 2005 06:30:50 GMT

OPTIONS / HTTP/1.1
translate: f
User-Agent: Microsoft-WebDAV-MiniRedir/5.1.2600
Host: 220.76.242.48
Content-Length: 0
Connection: Keep-Alive

HTTP/1.0 200 OK
Server: da-mcf63urt8l91
Connection: close
Date: Thu, 10 Mar 2005 06:31:45 GMT

GET /loginmem.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ko
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: 220.76.242.48
Connection: Keep-Alive

HTTP/1.0 200 OK
Server: da-mcf63urt8l91
Connection: close
Date: Thu, 10 Mar 2005 06:32:48 GMT

GET /loginmem.swf HTTP/1.1
Accept: */*
x-flash-version: 7,0,19,0
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
Host: 220.76.242.48
Connection: Keep-Alive

HTTP/1.0 200 OK
Server: da-mcf63urt8l91
Connection: close
Date: Thu, 10 Mar 2005 06:32:49 GMT

cwyang의 이미지

웹서버를 만드시려면 HTTP 1.1 RFC를 숙독하셔야될겁니다.

근데 기억이 가물거리는데 HTTP 1.0으로 답변보낼경우

1.0에는 persistent connection이 없어서 제대로 되어야 될

것도 같습니다만... 역시 해답은 RFC안에 있읍니다.

소타의 이미지

네.. RFC가 정답입니다 -.-;
지금은 잠수중인 웹서버 프로젝트입니다..
http://kldp.net/projects/nhttpd

jjjjrr의 이미지

항상그런것은 아닌데여
어떤경우엔 브라우저에서요청이 오면
아래페이지를 보낼경우가 있읍니다
서버에서는 전혀 보낸적이 없는페이지인데
브라우저에서 지맘대로 만든모양입니다
어떤경우에 아래페이지가 나타나는걸까여
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type
content="text/html; charset=ks_c_5601-1987"></HEAD>
<BODY></BODY></HTML>

그리구
브라우저의 캐쉬기능이 어떻게되는지모르겠읍니다
보통 같은요청이있을경우
브라우저에서 헤드에 If-Modified-Since 항목을 보내면
서버에서 검사해서 파일이 변경되었는지를 검사해서
변경되었으면 다시보내고 아니면 변경되지않았다는응답만하면되는데여
새로고침을 눌러도 서버로 요청이 가지를 않을경우가 많읍니다
브라우저내에서 캐쉬된내용을 그대로보여주는모양인데여
어떻게 새로고침을 눌러도 안되는지....
브라우저에서 서버에 요청하게만들려면 어떻게해야되나여
그리구
브라우저의 캐쉬기능은 어떻게작용하는지가 궁금합니다
부탁합니다

progcom의 이미지

첫번째의 아무것도 없는 페이지는... 브라우저 따라 다르겠지만, 상태 코드 (HTTP/1.0 200 OK)만 보내고, 보내진 데이터가 없을 경우에 나타나는 걸로 알고 있습니다.

새로고침은.. IE라면 Ctrl을 누르고 해보세요.

브라우저 캐쉬의 작동에 관한건 RFC에 다 적혀있습니다. 잘 읽어보세요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.