public:computer:http

This is an old revision of the document!


HTTP

  • HTTP1.1; RFC 2616
  • Uniform 인터페이스, 스테이트리스 서버, 캐시 등을 구현하고 있는 Web의 기반 프로토콜
  • TCP/IP 기반 Transmission Control Protocol / Internet Protocol
    • 계층형 프로토콜
    • 네트워크 인터페이스 계층
    • 인터넷 계층; IP에 해당, 기본단위 패킷Packet
    • 트랜스포트 계층; TCP에 해당, 커넥션 연결을 사용해 데이터의 누락 체크, 데이터의 도달 보증, 포트번호 1~65535, HTTP의 디폴트 80번.
    • 애플리케이션(응용) 계층; 메일, DNS, HTTP를 실현,
계층형 프로토콜
애플리케이션 계층 HTTP, NTP, SSH, SMTP, DNS
트랜스포트 계층 UDP, TCP
인터넷 계층 IP
네트워크 인터페이스 계층 이더넷
  • HTTP 0.9; GET
  • HTTP 1.0; RFC 1945, 헤더 도입, GET 이외의 메서드 추가.
  • HTTP 1.1; RFC 2068, RFC 2616, HTTP 1.0의 기능에 더해 채널 전송, Accept 헤더에 의한 콘텐트 네고시에이션, 복잡한 캐시 컨트롤, 지속적 연결 등 추가.
  • 클라이언트/서버; Request / Response. Request-Response Style 프로토콜, HTTP는 동기형 Synchronous 프로토콜
  • 클라이언트
    1. 요청 메시지 구축
    2. 요청 메시지 송신
    3. (응답이 돌아올 때까지 대기)
    4. 응답 메시지 수신
    5. 응답 메시지 해석
    6. 클라이언트의 목적을 달성하기 위해 필요한 처리
  • 서버
    1. (요청을 대기)
    2. 요청 메시지 수신
    3. 요청 메시지 해석
    4. 적절한 애플리케이션 프로그램으로 처리를 위임
    5. 애플리케이션 프로그램으로부터 결과를 취득
    6. 응답 메시지 구축
    7. 응답 메시지 송신
  • 요청 메시지
    • GET /test HTTP/1.1
      Host: example.com
      • 요청라인 Request-Line; 메서드 GET, 요청 URI/test, 프로토콜 버전 HTTP/1.1로 구성
      • 헤더; 이름:값 구성
      • 바디;
  • 응답 메시지
    • HTTP/1.1 200 OK
      Content-Type: application/xhtml+xml; charset=utf-8
      
      <html xmlns="http://www.w3.org/1999/xhtml">
      ....
      </html>
      • 스테이터스 라인 Status Line; 프로토콜 버전 HTTP/1.1, 스테이터스 코드 200, 텍스트 구문OK 으로 구성
      • 헤더; MIME Multipurpose Internet Mail Extension 미디어 타입 application/xhtml+xml과 그 문자 인코딩 방식 utf-8 지정
      • 바디; 헤더와 바디는 빈 줄로 구분
  • HTTP 메시지의 구성 요소
HTTP 메시지의 구조
스타트 라인(Start Line)
헤더(Header)
빈 줄(blank Line)
바디(Body)
  • HTTP의 스테이트리스성
    • 애플리케이션 상태; Session State
    • 자기 기술적 메시지 Self Descriptive Message
HTTP 메서드
메서드 의미
GET 리소스 취득
POST 서브 리소스의 작성, 리소스 데이터의 추가, 그 밖의 처리
PUT 리소스 갱신, 리소스 작성
DELETE 리소스 삭제
HEAD 리소스의 헤더(메타 데이터) 취득
OPTIONS 리소스가 서포트하는 메서드의 취득
TRACE 자기 앞으로 요청 메시지를 반환(루프 백) 시험
CONNECT 프록시 동작의 터널 접속으로 변경
  • CRUD 성질 충족; GET, POST, PUT, DELETE
CRUD와 HTTP 메서드의 대응
CRUD 명 의미 메서드
Create 작성 POST/PUT
Read 읽기 GET
Update 갱신 PUT
Delete 삭제 DELETE
  • GET - 리소스의 취득
  • POST - 리소스의 작성, 추가
  • PUT - 리소스의 갱신, 작성
  • DELETE - 리소스의 삭제
  • HEAD - 리소스의 헤더 취득
  • OPTIONS - 리소스가 서포트하는 메서드의 취득
  • POST를 PUT/DELETE 대신 사용하기도 한다
    • _method 파라미터
    • X-HTTP-Method-Override
  • 조건부 요청 Conditional Request;
  • 멱등성Idempotence과 안전성Safe
HTTP 메서드의 성질
메서드 성질
GET, HEAD 멱등이고 안전하다
PUT, DELETE 멱등이지만 안전하지 않다
POST 멱등이지도 안전하지도 않다
  • 1xx; 처리중, 처리가 계속되고 있음을 나타낸다. 클라이언트는 그대로 요청을 계속하던지 서버의 지시에 따라 프로토콜을 업데이트 하여 재전송
  • 2xx; 성공, 요청이 성공했음을 나타냄
  • 3xx; 리다이렉트, 다른 리소스로의 리다이렉트를 나타낸다. 클아이언트는 이 스테이터스 코드를 받았을 때 응답메시지의 Location 헤더를 보고 새로운 리소스로 접속
  • 4xx; 클라이언트 에러, 클라이언트 에러를 나타낸다. 원인은 클라이언트의 요청에 있다. 에러를 해결하지 않는 한, 정상적인 결과를 얻을 수 없기 때문에 같은 요청을 그대로 재전송할 수는 없다.
  • 5xx; 서버 에러, 서버 에러를 나타낸다. 원인이 서버에 있다. 서버 측의 원인이 해결되면, 동일한 요청을 재전송해서 정상적인 결과를 얻을 가능성이 있다
  • 200 OK - 요청 성공
  • 201 Created - 리소스 작성 성공
  • 301 Moved Permanently - 리소스의 항구적인 이동
  • 303 See Other - 다른 URI의 참조
  • 400 Bad Request - 요청 오류
  • 401 Unauthorized - 접근 권한 없음, 인증 실패
  • 404 Not Found - 리소스 없음
  • 500 Internal Server Error - 서버 내부 에러
  • 503 Service Unavailable - 서비스 정지
  • 스테이터스 코드와 에러처리
    • 프로토콜에 따른 포맷으로 에러른 반환
    • Accept 헤더에 따른 포맷으로 에러를 반환
  • 전자메일의 메시지 스펙 RFC822의 헤더형식을 빌려오는 식으로 추가, 메일 프로토콜이 한 방향으로 주고 받지만 One-Way, HTTP는 한 번의 통신으로 요청/응답의 두 가지 메시지를 주고 받음
  • 날짜와 시간
날짜 시간을 가지는 헤더
이용하는 메시지 헤더 의미
요청과 응답 Date 메시지를 생성한 일시
요청 If-Modified-Since 조건부 GET으로 리소스의 갱신일시를 지정할 때 이용한다
If-Unmodified-Since 조건부 PUT, 조건부 DELETE로 리소스의 갱신일시를 지정할 때 이용한다
응답 Expires 응답을 캐시할 수 있는 기한
Last-Modified 리소스를 마지막으로 생신한 일시
Retry-After 다시 요청을 전송할 수 있는 일시의 기준
  • MIME 미디어 타입
    • Content-Type - 미디어 타입 지정
타입
타입 의미
text 사람이 읽고 직접 이해할 수 있는 텍스트 text/plain
image 그림 데이터 image/jpeg
audio 음성 데이터 audio/mpeg
video 동영상 데이터 video/mp4
application 그 밖의 데이터 application/pdf
multipart 복수의 데이터로 이루어진 복합 데이터 multipart/related
message 전자메일 메시지 message/rfc822
model 복수 차원으로 구성하는 모델 데이터 model/vrml
example 예시용 example/foo-bar
  • charset 파라미터 - 문자 인코딩을 지정
주요 서브타입
타입 / 서브타입 의미
text/plain 플레인 텍스트
text/csv CSV형식 텍스트
text/css CSS형식의 스타일 시트
text/html HTML 문서
text/xml XML 문서(비추천)
image/jpeg JPEG 이미지
image/gif GIF 이미지
image/png PNG 이미지
application/xml XML 문서
application/xhtml+xml XHTML 문서
application/atom+xml Atom 문서
application/atomsvc+xml Atom의 서비스 문서
application/atomcat+xml Atom의 카테고리 문서
application/javascript JavaScript
application/json JSON 문서
application/msword Word 문서
application/vnd.ms-excel Excel 문서
application/vns.ms-powerpoint PowerPoint 문서
application/pdf PDF 문서
application/zip ZIP 파일
application/x-shockware-flash Flash 오브젝트
application/x-www-form-urlencoded HTML 폼 형식
  • 언어 태그Language Tag; Content-Language 헤더, RFC 4646 언어 태그 RFC 4647 태그의 비교방법이 정의
  • 콘텐트 네고시에이션
    • Accept - 처리할 수 있는 미디어 타입을 전달
    • Accept-Charset - 처리할 수 있는 문자 인코딩 전달
    • Accept-Language - 처리할 수 있는 언어를 전달
  • Content-Length와 청크(chunk) 전송
    • Content-Length - 바디의 길이를 지정
    • 청크 전송 - 바디를 분할하여 전송
  • 인증; Basic 인증, Digest 인증, 웹 API에서 WSSE WS-Security Extension 확장 스펙
    • Basic 인증; 유저 이름과 패스워드를 Authorization 헤더에 넣어 요청마다 전송. 유저이름:패스워드를 Base64 인코딩, 보안 강도 확인 필요(SSL Secure Socket Layer, TLS Transport Layer Security, HTTPS HTTP over Secure Socket Layer 등)
    • Digest 인증;
      • 첼린지; nonce(number used once), qop(quality of protection) → 'auth'나 'auth-init' 지정, opaque
      • 다이제스트 생성과 송신
    • WSSE 인증;
  • OpenID와 OAuth, SSO Single Sign-on
    • OpenID - 심플한 싱글 사인온; IdP(Identity Provider), SP(Service Provide)
    • OAuth - 웹서비스 사이의 권한의 위임; 인가정보를 넘기는 기능
  • 캐시
    • 캐시용 헤더
      • Pragma - 캐시를 억제
      • Expires - 캐시의 유효기한
      • Cache-Control - 상세한 캐시 방법을 지정
      • 캐시용 헤더의 사용 구분
        • 캐시를 시키지 않을 경우는 Pragma와 Cache-Control의 no-cache를 동시에 지정
        • 캐시의 유효기간이 명확하게 정해저 있는 경우는 Expires를 지정
        • 캐시의 유효기간을 상대적으로 지정하고자 하는 경우는 Cache-Control의 max-age로 상대시간을 지겅
    • 조건부 GET
      • If-Modified-Since - 리소스의 갱신일시를 조건으로 한다
      • If-None-Match - 리소스의 ETag(엔티티 태그)를 조건으로 한다
  • 지속적 접속 Persistent Connection; Pipelining
  • 그 밖의 HTTP 헤더
    • Content-Disposition - 파일명 지정
    • Slug - 파일명과 힌트를 지정
  • public/computer/http.1640418514.txt.gz
  • Last modified: 2021/12/25 16:48
  • by alex