webserv
mandatory part
basic explanation
- [ ] HTTP server
- [ ] functions used for I/O multiplexing
basic checklist
- [ ] kqueue and
kevent()
- [ ] 하나의
kqueue()
만이 있어야한다.
- [ ] fd에 대한 READ/WRITE가
kqueue()
를 거치지 않고 수행하지 말아야한다.
- [ ] 하나의 클라이언트에 대해
kqueue()
당 하나의 read()
와 하나의 write()
가 존재해야한다.
- [ ] read/recv/write/send
- [ ] 에러가 발생할 경우 client가 제거되어야 한다.
- [ ] the returned value is well checked. (checking only -1 or 0 is not good you should check both)
- [ ] errono에 대한 검사가 위 함수 이후에 진행되지 않아야 한다.
configuration
- [ ] HTTP response status code가 잘못되어서는 안된다.
- [ ] multiple servers with:
- [ ] different port
- [ ] different hostname
- [ ] ex)
: curl --resolve example.com:80:127.0.0.1
http://example.com/
- [ ] default error page <- [ ] 404 error page를 변경해 보도록 한다.
- [ ] client body size
- [ ] ex)
curl -X POST -H "Content-Type: plain/text" --data "BODY IS HERE write something shorteror longer than body limit"
- [ ] directory and file
- [ ] 서로 다른 directory(route -> location?) 설정해본다.
- [ ] directory 요청 시의 default file이 있어야한다.
- [ ] 특정 location에 대한 method를 설정해보고, method를 실행해본다.
basic features
- [ ] method (이때 status code도 함께 체크해보도록 한다.)
- [ ]
GET
: 반드시 작동해야 한다.
- [ ]
POST
: 반드시 작동해야 한다.
- [ ]
DELETE
: 반드시 작동해야 한다.
- [ ]
UNKNOWN
: crash가 일어나지 않아야한다.
- [ ] upload some file to the server and get it back
- [ ] siege test (availibility higher than 99.5%)
check with browser
- [ ] 특정 브라우저에서 서버로의 접속이 가능해야한다.
- [ ] request header와 response header를 확인해본다.
- [ ] 정적 웹사이트(fully static website)와 호환이 되어야한다.
- [ ] directory list -> auto-index?
- [ ] redirected URL
- [ ] 그 외의 여러가지를 시도해볼 수 있다.
port issues
- [ ] multiple ports에 대해 제대로 동작해야한다.
- [ ] 같은 포트를 사용하려고 시도하더라도 동작하지 않아야한다.
- [ ] In the configuration try to setup the same port multiple times. It should not work.
- [ ] 서로 다른 conf를 가지지만 같은 port를 사용하는 여러 서버들을 실행했을 때, 서버가 만약 작동한다면 그 이유에 대해서도 설명할 수 있어야한다.
siege/stress test
- [ ] siege
- [ ]
siege -b
:빈페이지를 얻는 test에서 99.5% 이상의 availibility를 보여야한다.
- [ ] 서버를 재시작하지 않고 siege를 계속 사용할 수 있어야한다.
- [ ] memory leaks가 있어서는 안된다.
- [ ] hanging connection이 없어야한다...?
bonus part