웹 서버는 작동 원리를 이해하기 어렵지 않다:
- 클라이언트(브라우저)가 웹서버와 접속을 하고 HTTP GET 혹은 POST 방식으로 request 를 전송한다 (요청하고자 하는 url(경로)와 쿠키 등 의 정보가 request에 포함된다)
- 서버측에서는 전송된 request를 파징한다. (경로 (예. /some/file), 쿠키 등.) 그리고 HTTP 코드로 respond 를 전송하며 (404 코드 : 찾을 수 없음, 200 코드 : 완료) 웹 페이지의 내용도 전송한다 (html 소스, 이미지...)
브라우저 (HTTP 클라이언트) | GET /path/hello.html HTTP/1.1 | 서버 (HTTP 서버) |
HTTP/1.1 200 OK <html><body>Hello, world !</body></html> | ||
파이썬의 BaseHTTPServer 모듈을 사용하면 위의 프로세스를 쉽게 작성할 수 있다.
아래의 웹서버 소스는 http://localhost:8088/ 로 접속시 "Hello, world !" 를 출력하는 예제다.
#!/usr/bin/python
import BaseHTTPServer
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200) # 200 코드 : request 를 잘 받았다는 의미
self.send_header('Content-type','text/html') # respond 헤더 추가
self.end_headers() # respond 헤더의 끝을 추가 ( "\n\r" )
self.wfile.write('<html><body>Hello, world !</body></html>')
return
print "Listening on port 8088..."
server = BaseHTTPServer.HTTPServer(('', 8088), MyHandler)
server.serve_forever()
import BaseHTTPServer
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200) # 200 코드 : request 를 잘 받았다는 의미
self.send_header('Content-type','text/html') # respond 헤더 추가
self.end_headers() # respond 헤더의 끝을 추가 ( "\n\r" )
self.wfile.write('<html><body>Hello, world !</body></html>')
return
print "Listening on port 8088..."
server = BaseHTTPServer.HTTPServer(('', 8088), MyHandler)
server.serve_forever()
- MyHandler 가 우리가 만들고자 하는 웹서버 응답 핸들러이며, 정해진 포트로 request가 들어온 경우 그에 대한 응답을 돌려 준다.
- GET 방식의 request 만 처리한다 (do_GET).
- 코드 200의 의미는 request를 잘 받았다는 뜻이다. (self.send_response(200)).
- 헤더를 추가해서 브라우저에 request 를 전송한다고 알려준다 (self.send_header('Content-type','text/html')).
- 그리고 HTML 소스 자체를 출력한다 (self.wfile.write(...))
댓글 없음:
댓글 쓰기