본문으로 건너뛰기

HTTP 학습 노트 1_기본 상식

무료2015-05-24#HTTP#http入门#http常识#http学习

HTTP 프로토콜은 가장 중요하며, 잘 연구해야 합니다

零。추가적인 상식

OSI(Open System Internetwork) 참조 모델:

  1. 애플리케이션 계층

애플리케이션에 네트워크 통신 인터페이스 제공

  1. 표현 계층

  2. 세션 계층

  3. 전송 계층

데이터 전송 단위는메시지

  1. 네트워크 계층

데이터 전송 단위는패킷

  1. 데이터 링크 계층

데이터 전송 단위는프레임

  1. 물리 계층

데이터 전송 단위는비트 bit

OSI7 계층은 연구용 이론 모델이며, 실제 적용에는 너무 복잡하므로 TCP/IP 참조 모델이 있습니다:

P.S.여기서의 TCP/IP 는 프로토콜 체계, 또는 프로토콜 제품군을 지칭하며, SNMP, ICMP, UDP, DNS 등 다양한 네트워크 프로토콜을 포함합니다

  1. 애플리케이션 계층

HTTP, FTP, DNS 등

  1. 전송 계층

TCP, UDP 등

  1. 네트워크 계층

IP 등

  1. 데이터 링크 계층

HTTP 는 애플리케이션 계층 프로토콜이며, 내부는 전송 계층의 TCP 와 네트워크 계층의 IP 이므로, HTTP 도 3 웨이 핸드셰이크, 4 웨이 핸드셰이크가 필요합니다

따라서 연결 설정/해제의 오버헤드가 존재하며, 성능 최적화를 위해 HTTP/1.1 버전은 기본적으로 퍼시스턴트 연결이지만, HTTP/1.0 에는 없습니다

또한, 몇 가지 개념을 간단히 구분할 필요가 있습니다:

  • 프록시

전달 기능이 있는애플리케이션

  • 게이트웨이

다른 서버 통신 데이터를 전달하는서버

  • 터널

Client 와 Server 간의 통신 연결을 유지할 수 있는애플리케이션

  • 터널

一.URI 와 URL

  • URI(Uniform Resource Identifier): 통합 자원 식별자, 특정 인터넷리소스를 식별하는 문자열

  • URL(Uniform Resource Locator): 통합 자원 위치 지정자, 특정 인터넷리소스의 위치를 식별하는 문자열

URL 에 필수적인 것은 스키마 (Scheme), 호스트명 (Host), 리소스 경로 (URL Path) 입니다

따라서 URL 은 URI 의 하위 집합이며, 또는 URL 은 URI 의 일부라고 할 수 있습니다

二.HTTP 메서드

  • GET: 리소스 취득

1.0/1.1 지원, 상용

  • POST: 엔티티 본문 전송

1.0/1.1 지원, 상용

  • PUT: 파일 전송

1.0/1.1 지원, 일반 웹사이트에서는 해당 방법을 사용하지 않습니다. PUT 메서드 자체에 인증 메커니즘이 없어 누구나 파일을 업로드할 수 있어 보안 문제가 존재하기 때문입니다

  • HEAD: 메시지 헤더 취득

1.0/1.1 지원, 상용

  • DELETE: 파일 삭제

1.0/1.1 지원, PUT 메서드와 동일한 문제 존재

  • OPTIONS: 지원하는 메서드 문의

1.1 지원

  • TRACE: 경로 추적

1.1 지원, Max-Forward 헤더 필드와 함께 경로를 검사

  • CONNECT: 터널 프로토콜로 프록시에 연결 요구

1.1 지원, SSL(Secure Sockets Layer 보안 소켓 계층), TLS(Transport Layer Security 전송 계층 보안) 와 함께 터널로 TCP 통신을 구현

  • (LINK): 리소스와의 연결 설정

1.0 지원, 1.1 에서 폐기

  • (UNLINK): 연결 관계 단절

1.0 지원, 1.1 에서 폐기

三.HTTP 상태 코드

  • 1XX: Informational(정보 상태 코드)

수신한 리クエスト를 처리 중

-  101: Switching Protocol, 프로토콜 전환, Upgrade 헤더 필드와 함께 프로토콜 전환을 요구, 그다지 일반적이지 않음
  • 2XX: Success(성공 상태 코드)

리クエスト가 정상적으로 처리 완료

-  200: OK, 리クエスト이 정상적으로 처리

-  204: No Content, 리クエスト은 정상적으로 처리되었지만 반환할 리소스가 없음 (응답 본문이 공백)

-  206: Partial Content, 리クエスト의 일부 내용을 요구, 응답 헤더의 Content-Range 가 범위를 나타냄
  • 3XX: Redirection(리디렉션 상태 코드)

리クエスト을 완료하기 위해 추가 작업이 필요

-  301: Moved Permanently, 영구 리디렉션, 브라우저는 자동으로 북마크를 업데이트해야 함

-  302: Found, 임시 리디렉션, 북마크를 업데이트하지 않음

-  303: See Other, 302 와 유사하지만, GET 메서드로 새로운 URL 에 액세스하도록 요구

    주의: 사양에서는 301, 302 를 만나도 리クエスト 메서드를 변경하지 않는다 (원래 POST 면 계속 POST 사용) 고 규정하지만, *사실상의 표준*은 거의 모든 브라우저가 301, 302, 303 을 만나면 GET 메서드로 변경한다. 이는 사양과 일치하지 않음

-  304: Not Modified, 리소스를 찾았지만, 리クエスト 조건 (If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since) 을 만족하지 않음

    주의: 304 는 3XX 에 속하지만, *리디렉션과는 관계없음*
    
-  307: Temporary Redirection, 임시 리디렉션, 302 와 같은 의미

    사실상의 표준을 시정하기 위해 도입된 상태 코드, 302 를 엄격히 준수하여 메서드를 변경하지 않기를 바랐지만, 현재 브라우저는 반드시 그렇게 하지 않는다. 표준은 다시 실패
  • 4XX: Client Error(클라이언트 오류 코드)

서버는 리クエスト을 처리할 수 없음

-  400: Bad Request, 리クエスト 메시지에 구문 오류 존재

-  401: Unauthorized, 인증이 필요함 (BASIC 인증 또는 DIGEST 인증) 또는 인증 실패를 나타냄

-  403: Forbidden, 특정 리소스에 대한 액세스 리クエスト이 거부됨

-  404: Not Found, 서버는 리クエスト된 리소스를 찾을 수 없음, 이유를 설명하고 싶지 않은 403 응답 대신 사용 가능

-  405: Method Not Allowed, 메서드 미지원, 그다지 일반적이지 않음

-  412: Precondition Failed, 전제 조건 실패, 그다지 일반적이지 않음

-  417: Expectation Failed, 기대 실패, 그다지 일반적이지 않음
  • 5XX: Server Error(서버 오류 코드)

서버는 리クエスト 처리 중 오류 발생

  • 500: Internal Server Error, 서버는 리クエスト 실행 중 오류 발생

  • 503: Service Unavailable, 서버가 과부하 또는 유지 보수 중

四.HTTP 메시지 헤더

HTTP 메시지 헤더 = 메시지 헤더 + 공백 행 (CR+LF) + 메시지 본문

             = 시작 행 (리クエスト 행/상태 행) + 헤더 + 공백 행 + 메시지 본문
             
             = 시작 행 + 리クエスト/응답 헤더 필드 + 일반 헤더 필드 + 엔티티 헤더 필드 + 공백 행 + 메시지 본문

P.S.이*공백 행 (CR+LF)*을 가볍게 보아서는 안 됩니다. HTTP 헤더 인젝션 공격이 존재하는 이유는 이 공백 행이 있기 때문입니다

###1.시작 행

시작 행은 리クエスト 행과 상태 행으로 나뉩니다 (각각 HTTP 리クエスト 메시지와 응답 메시지에 해당):

  • 리クエスト 행: 리クエスト에 사용하는 메서드, URI, HTTP 버전을 설명

  • 상태 행: 반환하는 응답의 HTTP 버전과 상태 코드를 설명

###2.헤더 필드

리クエスト 헤더 필드
헤더 필드명설명
Accept사용자 에이전트가 처리 가능한 미디어 타입
Accept-Charset우선하는 문자 세트
Accept-Encoding우선하는 콘텐츠 인코딩
Accept-Language우선하는 언어 (자연어)
AuthorizationWeb 인증 정보
Expect서버의 특정 동작을 기대
From사용자의 이메일 주소
Host리クエスト 리소스가 있는 서버
If-Match엔티티 태그 (ETag) 비교
If-Modified-Since리소스의 업데이트 시간 비교
If-None-Match엔티티 태그 비교 (If-Match 와 반대)
If-Range리소스가 업데이트되지 않은 경우, 엔티티 Byte 의 범위 리クエスト 전송
If-Unmodified-Since리소스의 업데이트 시간 비교 (If-Modified-Since 와 반대)
Max-Forwards최대 전송 홉 수
Proxy-Authorization프록시 서버가 클라이언트에 요구하는 인증 정보
Range엔티티의 바이트 범위 리クエスト
*Referer*Web 인증 정보
TE전송 인코딩의 우선순위
User-AgentHTTP 클라이언트 프로그램의 정보
응답 헤더 필드
헤더 필드명설명
Accept-Ranges바이트 범위 리クエスト을 받아들일지 여부
Age리소스 생성부터의 경과 시간 추정
ETag리소스의 매칭 정보
Location클라이언트를 지정 URI 로 리디렉션
Proxy-Authenticate프록시 서버의 클라이언트에 대한 인증 정보
Retry-After다시 리クエスト을 전송하는 시기에 대한 요구
ServerHTTP 서버의 설치 정보
Vary프록시 서버 캐시의 관리 정보
WWW-Authenticate서버의 클라이언트에 대한 인증 정보
일반 헤더 필드
헤더 필드명설명
Cache-Control캐시의 동작을 제어
Connection홉바이홉 헤더, 연결의 관리
Date메시지 생성의 일시
Pragma메시지 지시
Trailer메시지 말단의 헤더 일람
Transfer-Encoding메시지 본문의 전송 인코딩 방식을 지정
Upgrade다른 프로토콜로 업그레이드
Via프록시 서버의 관련 정보
Warning오류 알림
엔티티 헤더 필드
헤더 필드명설명
Allow리소스가 지원하는 HTTP 메서드
Content-Encoding엔티티 본문에 적용하는 인코딩 방식
Content-Language엔티티 본문의 자연어
Content-Length엔티티 본문의 크기 (단위: 바이트)
Content-Location해당하는 리소스의 URI 를 대신함
Content-MD5엔티티 본문의 메시지 다이제스트
Content-Range엔티티 본문의 위치 범위
Content-Type엔티티 본문의 미디어 타입
Expires엔티티 본문의 만료 일시
Last-Modified리소스의 최종 수정 일시

P.S.기타 헤더 필드 및 더 자세한 헤더 필드 정보는 博客園:HTTP 메시지 참조

###참고 자료:

  • 《도해 HTTP》

댓글

아직 댓글이 없습니다

댓글 작성