[slighttpd]lighttpd 구 조 를 바탕 으로 하 는 서버 프로젝트 실전(6)-예비 지식의 Http

다음은 http 부분의 개발 을 시작 합 니 다.그 전에 HTTP 프로 토 콜 을 배 울 필요 가 있 습 니 다~
http 1.1 rfc 문서:http://www.ietf.org/rfc/rfc2616.txt
간단 한 소개
하이퍼텍스트 전송 프로 토 콜(Hypertext Transfer Protocol,HTTP 로 약칭)은 응용 층 프로 토 콜 로 요청/응답 식 프로 토 콜 입 니 다.즉,클 라 이언 트 가 서버 와 연결 한 후에 서버 에 요청 을 보 내 고 서버 가 요청 을 받 은 후에 해당 하 는 응답 정 보 를 제공 합 니 다.
HTTP 요청 메시지
HTTP 요청 메 시 지 는 요청 줄,요청 머리,빈 줄,요청 체 4 개 부분 으로 구성 되 어 있 습 니 다.
|      | URL |      | ->   
|     (Request Header) |
|    |
| body |

[요청 줄]:방법 필드,URL 필드,HTTP 프로 토 콜 버 전 필드 세 부분 으로 구성 되 어 있 으 며 빈 칸 으로 구분 되 어 있 습 니 다.자주 사용 하 는 HTTP 요청 방법 은 GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,CONNECT 가 있 습 니 다.
예:GET/index.jsp?id=100&op=bind HTTP/1.1
●GET:클 라 이언 트 가 서버 에서 자원 을 읽 으 려 면 GET 방법 을 사용 합 니 다.GET 방법 은 서버 에 URL 포 지 셔 닝 자원 을 메시지 에 응답 하 는 데이터 부분 에 두 고 클 라 이언 트 에 게 돌려 달라 고 요구 합 니 다.즉,클 라 이언 트 가 서버 에 자원 을 요청 하 는 것 입 니 다.GET 방법 을 사용 할 때 요청 인자 와 대응 하 는 값 을 URL 뒤에 추가 하고 물음표("?")를 사용 합 니 다.URL 의 끝 과 요청 매개 변수의 시작 을 나타 내 며 전달 매개 변수의 길이 가 제한 되 어 있 습 니 다.예 를 들 어,/index.jsp?id=100&op=bind.
●POST:클 라 이언 트 가 서버 에 정 보 를 많이 제공 할 때 POST 방법,POST 방법 으로 서버 에 데 이 터 를 제출 할 수 있 습 니 다.예 를 들 어 폼 데이터 의 제출 을 완성 하고 데 이 터 를 서버 에 제출 할 수 있 습 니 다.GET 는 일반적으로 자원 정 보 를 얻 거나 조회 하 는 데 사용 되 며 POST 는 사용자 데 이 터 를 첨부 하여 자원 정 보 를 업데이트 하 는 데 사용 된다.POST 방법 은 요청 파 라 메 터 를 HTTP 요청 데이터 에 밀봉 하여 이름/값 으로 나타 나 대량의 데 이 터 를 전송 할 수 있 습 니 다.
●PUT:어떤 내용 을 수정 하 는 데 사용 합 니 다.
●DELETE:어떤 내용 을 삭제 합 니 다.
●CONNECT:SSL 을 사용 하 는 등 프 록 시 전송 에 사용 합 니 다.
●OPTIONS:어떤 방법 을 실행 할 수 있 는 지 물 어보 기;
●PATCH:일부 문서 변경;
●PROFFIND,(wedav):속성 보기;
●PROPPATCH,(wedav):속성 설정;
●MKCOL,(wedav):집합(폴 더)만 들 기;
●복사,(wedav):복사;
●MOVE,(wedav):이동;
●LOCK,(wedav):잠 금 추가;
●UNLOCK(wedav):잠 금 해제;
●TRACE:원 격 진단 서버 에 사용;
●HEAD:GET 와 유사 하지만 body 정 보 를 되 돌려 주지 않 고 대상 이 존재 하 는 지,대상 의 메타 데 이 터 를 얻 는 데 사용 합 니 다.
[요청 머리]:요청 머리 는 key/value 쌍 으로 구성 되 어 있 으 며,줄 마다 키워드 와 값 은 영문 콜론":"으로 구 분 됩 니 다.요청 헤드 알림 서버 에 클 라 이언 트 요청 에 대한 정보 가 있 습 니 다.전형 적 인 요청 헤드 는 다음 과 같 습 니 다.
●User-agent:요청 한 브 라 우 저 형식 생 성;
●Accept:클 라 이언 트 가 식별 할 수 있 는 응답 내용 유형 목록;별표"*"는 범위 에 따라 유형 을 나 누 는 데 사용 되 며,"*/*"로 모든 유형 을 받 아들 일 수 있 으 며,"type/*"로 type 형식의 모든 하위 유형 을 받 아들 일 수 있 음 을 표시 합 니 다.
●Accept-language:클 라 이언 트 가 받 아들 일 수 있 는 자연 언어;
●Accept-Encoding:클 라 이언 트 가 받 아들 일 수 있 는 인 코딩 압축 형식;
●Accept-Charset:응답 할 수 있 는 문자 집합;
●Host:요청 한 호스트 이름 으로 여러 도 메 인 이름 이 같은 IP 주소,즉 가상 호스트 를 사용 할 수 있 도록 합 니 다.
●connection:연결 방식(close 또는 keepalive);
close:WEB 서버 나 프 록 시 서버 에 이번 요청 의 응답 을 완료 한 후 연결 을 끊 고 이번 연결 의 후속 요청 을 기다 리 지 않 는 다 고 알려 줍 니 다.keepalive:WEB 서버 나 프 록 시 서버 에 이번 요청 의 응답 을 완료 한 후 연결 을 유지 하고 이번 연결 의 후속 요청 을 기다 리 라 고 알려 줍 니 다.
●Cookie:클 라 이언 트 확장 필드 에 저장 되 어 같은 도 메 인 이름 의 서버 에 해당 도 메 인 에 속 하 는 쿠키 를 보 냅 니 다.
【빈 줄】:마지막 요청 헤더 다음 에 빈 줄 입 니 다.리 턴 문자 와 줄 바 꿈 부 호 를 보 내 고 서버 아래 에 요청 헤더 가 없 음 을 알려 줍 니 다.
【패키지 요청】:패키지 요청 은 GET 방법 이 아 닌 POST 방법 에서 사 용 됩 니 다.POST 방법 은 고객 이 양식 을 작성 해 야 하 는 장소 에 적용 된다.요청 패키지 와 관련 된 가장 많이 사용 되 는 것 은 패키지 타 입 Content-Type 과 패키지 길이 Content-Length 입 니 다.
HTTP 응답 메시지
HTTP 응답 메 시 지 는 상태 줄,응답 머리,빈 줄,응답 패키지 4 개 부분 으로 구성 되 어 있 습 니 다.
|      |     |       | ->   
|    (Response Header) |
|    |
|      |

[상태 줄]:상태 줄 은 HTTP 프로 토 콜 버 전 필드,상태 코드 와 상태 코드 에 대한 설명 텍스트 3 개 부분 으로 구성 되 어 있 으 며 빈 칸 으로 구분 되 어 있 습 니 다.
●상태 코드 는 세 자리 숫자 로 구성 되 어 있 으 며,첫 번 째 숫자 는 응답 을 나타 내 는 유형 이 며,자주 사용 하 는 상태 코드 는 다음 과 같다.
1xx:서버 가 클 라 이언 트 요청 을 받 았 음 을 나타 내 고 클 라 이언 트 는 계속 요청 을 보 낼 수 있 습 니 다.
2xx:서버 가 요청 을 성공 적 으로 받 아들 여 처리 하 였 음 을 나타 낸다.
3xx:서버 가 클 라 이언 트 에 게 방향 을 바 꾸 라 고 요구 하 는 것 을 나타 낸다.
4xx:클 라 이언 트 의 요청 에 불법 내용 이 있 음 을 나타 낸다.
5xx:서버 가 클 라 이언 트 의 요청 을 정상적으로 처리 하지 못 해서 의외 의 오류 가 발생 했 음 을 나타 낸다.
●상태 코드 설명 텍스트 는 다음 과 같은 값 이 있 습 니 다.
200 OK:클 라 이언 트 요청 이 성공 했다 는 뜻 입 니 다.
400 Bad Request:클 라 이언 트 요청 에 문법 오류 가 있어 서버 에서 이해 할 수 없습니다.
401 Unauthonzed:요청 이 인증 되 지 않 았 음 을 표시 합 니 다.이 상태 코드 는 WWW-Authenticate 헤더 필드 와 함께 사용 해 야 합 니 다.
403 Forbidden:서버 가 요청 을 받 았 으 나 서 비 스 를 제공 하지 않 는 다 는 뜻 으로 본문 에 응답 하여 서 비 스 를 제공 하지 않 는 이 유 를 알려 줍 니 다.
404 Not Found:요청 한 자원 이 존재 하지 않 습 니 다.예 를 들 어 잘못된 URL 을 입력 했 습 니 다.
500 Internal Server Error:서버 에 예상 치 못 한 오류 가 발생 하여 클 라 이언 트 의 요청 을 완료 할 수 없 음 을 나타 낸다.
503 Service Unavailable:서버 가 현재 클 라 이언 트 의 요청 을 처리 할 수 없 음 을 표시 합 니 다.일정 시간 후에 서버 가 정상 으로 돌아 올 수 있 습 니 다.
[응답 머리]:요청 머리 는 key/value 쌍 으로 구성 되 어 있 으 며,줄 마다 키워드 와 값 은 영문 콜론":"으로 구 분 됩 니 다.부분 은 다음 과 같 습 니 다.
●Location:수신 자 를 새로운 위치 로 바 꾸 는 데 사용 합 니 다.예 를 들 어 클 라 이언 트 가 요청 한 페이지 는 원래 의 위치 가 존재 하지 않 습 니 다.클 라 이언 트 가 이 페이지 의 새로운 위치 로 다시 지정 하기 위해 서버 측은 Location 응답 메 시 지 를 보 낸 후에 리 셋 문 구 를 사용 하여 클 라 이언 트 가 새로운 도 메 인 이름 에 대응 하 는 서버 의 자원 에 접근 하도록 할 수 있 습 니 다.
●Server:Server 응답 헤더 도 메 인 은 서버 가 요청 한 소프트웨어 정보 와 버 전 을 처리 하 는 데 사 용 됩 니 다.이 는 User-agent 요청 헤더 필드 와 대응 되 며 전 자 는 서버 엔 드 소프트웨어 의 정 보 를 보 내 고 후 자 는 클 라 이언 트 소프트웨어(브 라 우 저)와 운영 체제 의 정 보 를 보 냅 니 다.
●Vary:캐 시 할 수 없 는 요청 헤더 목록 표시;
●연결:연결 방식;(close:연결 이 닫 혔 습 니 다.keepalive:연결 이 유지 되 고 있 습 니 다.이번 연결 의 후속 요청 을 기다 리 고 있 습 니 다.)
●Keep-Alive:브 라 우 저가 연결 을 요청 하면 이 머리 는 WEB 서버 가 얼마나 오래 연결 되 기 를 원 하 는 지 를 나타 낸다.예 를 들 어 Keep-Alive:300;
●WWW-Authenticate:WWW-Authenticate 응답 헤더 필드 는 401(권한 이 부여 되 지 않 은)응답 메시지 에 포함 되 어야 합 니 다.이 헤더 필드 는 앞에서 말 한 Authorization 요청 헤더 필드 와 관련 이 있 습 니 다.클 라 이언 트 가 401 응답 메 시 지 를 받 으 면 서버 에 인증 을 요청 할 지 여 부 를 결정 해 야 합 니 다.서버 에 인증 을 요청 하면 Authorization 헤더 도 메 인 을 포함 하 는 요청 을 보 낼 수 있 습 니 다.
[빈 줄]:마지막 응답 머리 다음 에 빈 줄 입 니 다.리 턴 문자 와 줄 바 꿈 부 호 를 보 내 고 서버 아래 에 응답 머리 가 없 음 을 알려 줍 니 다.
[응답 패키지]:서버 가 클 라 이언 트 에 게 보 낸 텍스트 정 보 를 되 돌려 줍 니 다.
HTTP 무상 태 성
HTTP 프로 토 콜 은 무 상태(stateless)입 니 다.즉,같은 클 라 이언 트 가 두 번 째 로 같은 서버 의 페이지 를 방문 할 때 서버 는 이 클 라 이언 트 가 방문 한 적 이 있 는 지 알 수 없고 서버 도 서로 다른 클 라 이언 트 를 구분 할 수 없다.HTTP 의 무상 태 특성 은 서버 의 디자인 을 간소화 하여 서버 가 대량의 HTTP 요청 을 쉽게 지원 할 수 있 도록 한다.
HTTP 영구 연결
HTTP 1.0 은 비 지속 적 인 연결 을 사용 합 니 다.주요 단점 은 클 라 이언 트 가 요청 한 대상 마다 새로운 연결 을 구축 하고 유지 해 야 한 다 는 것 입 니 다.즉,요청 한 문서 마다 RTT 비용 이 두 배 있어 야 한 다 는 것 입 니 다.같은 페이지 에 여러 개의 대상 이 존재 할 수 있 기 때문에 비 지속 적 인 연결 은 한 페이지 의 다운 로드 를 매우 느리게 할 수 있 고 이런 짧 은 연결 은 네트워크 전송 에 부담 을 증가 시 킬 수 있다.
HTTP 1.1 은 지속 적 인 연결 keepalive 를 사용 합 니 다.지속 적 인 연결 이란 서버 가 응답 을 보 낸 후에 도 한 동안 이 연결 을 유지 하 는 것 입 니 다.같은 연결 에 여러 번 데이터 요청 과 응답 이 존재 할 수 있 습 니 다.즉,지속 적 인 연결 상황 에서 서버 는 응답 을 보 낸 후에 TCP 연결 을 닫 지 않 고 클 라 이언 트 는 이 연결 을 통 해 다른 대상 을 계속 요청 할 수 있 습 니 다.
HTTP/1.1 프로 토 콜 의 지속 적 인 연결 은 두 가지 방법 이 있 습 니 다.
●비 유수 선 방식:고객 이 이전 응답 을 받 은 후에 야 다음 요청 을 할 수 있 습 니 다.
●파이프라인 방식:고객 은 HTTP 응답 메 시 지 를 받 기 전에 새로운 요청 메 시 지 를 계속 보 낼 수 있다.
자~http 의 기본 지식 은 여기까지 소개 합 니 다.다음은 http 에 대해 서버 에 기능 을 추가 할 것 입 니 다.http 의 분석 부분 에 대해 저 는 스스로 쓰 지 않 고 제3자 의 분석 라 이브 러 리 http-parser 를 사용 할 것 입 니 다.

좋은 웹페이지 즐겨찾기