HTTP : HTML같은 문서를 인출하기위한 프로토콜이다. 이것은 웹상의 모든 데이터 교환의 기초이며 클라이언트-서버 프로토콜이다. 즉, 요청은 수신자, 일반적으로 웹 브라우저에 의해 시작된다. 전체 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등과 같이 가져온 여러 하위 문서로 재구성 된다.
TCP/IP 통신에 대한 이해
-인터넷을 이용하기 위해 TCP/IP기반의 통신을 하며 대부분 네트워크 통신은 근간으로 한다.
통신을 하기 위한 중요한 정보가 있는데 IP와 port가 있다.
IP를 통해 물리적 호스트 대상을 찾으며 Port를 통해 논리적 대상을 찾는다.
HTTP 특징 - 비연결성(Connectionless)
-비연결성은 연결을 유지하지 않는다는 의미로, HTTP의 기본 모델 클라이언트와 서버가 한 번 연결을 맺은 후, 클라 이언트 요청에 대해 서버가 응답을 마치면 맺었던연결을 끊음 비연결성 특징은 서버 자원을 효율적으로 사용하여 더 많은 연결을 할 수 있다는 장점이 있지만, 요청을 할 때마다 새로운 3-Way-Handshake를 맺어야 해서 오버헤드가 발 생할 수 있다는 단점 존재 현재는 대부분 Pertsistent Connection(지속 연결)을 사용
HTTP 특징 - 무상태성(Stateless)
무상태성은 상태가 없다는 의미 A 클라이언트와 B 클라이언트의 요청을 구분하지 못함 매번 새로운 인증을 해야 하는 번거로움이 발생하여, 쿠키를 사용하여 문제 해결 (Stateful) Gmail 메일 전송 1) A 사용자 Gmail 로그인 2) (A 사용자 로그인 상태 유지) 메일 쓰기 페이지 접근 3) (A 사용자 로그인 상태 유지) 메일 내용 작성 후 보내기 (Stateless) Gmail 메일 전송 1) B 사용자 Gmail 로그인 2) (누구세요?) 메일 쓰기 페이지 접근 -> 로그인이 필요합니다. 3) (누구세요?) 메일 내용 작성 후 보내기 -> 로그인이 필요합니다. (Stateless + Cookie) Gmail 메일 전송 1) C 사용자 Gmail 로그인 -> Cookie에 C 사용자 정보 저장 2) (Cookie) 메일 쓰기 페이지 접근 3) (Cookie) 메일 내용 작성 후 보내기
HTTP 메시지 :서버와 클라이언트 간에 데이터가 교환되는 방식
웹 통신에서 다룬 것과 같이 HTTP Request Message, HTTP Response Message가 존재
개행 문자(\r\n) 개행 : 한자로 고칠 개(改)와 갈 행(行)을 사용하며 줄바꿈이라고 함 \r : Carriage Return(CR) - 커서 위치를 앞으로 이동 \n : Line Feed(LF) - 현재 위치에서 바로 아래로 이동
HTTP 헤더(요청헤더)
-Host : 서버 도메인 네임을 나타내고 포트를 포함 ,HTTP 기본 80번 포트, HTTPS 기본 443번 포트
-User-Agent :사용자 브라우저, 운영체제 등을 식별할 수 있는 정보 ,접속자 통계를 낼 때 사용
-Cookie : HTTP 쿠키가 포함 ,
"서버로부터 Set-Cookie 헤더로 설정된 정보" 또는 "document.cookie를 사용하여 설정된 정보"
-Referer :요청하는 페이지의 주소가 포함됨 ,
서버에서 사용자가 어떤 페이지에서 접속하는지 식별 가능
-Connection :현재 요청이 완료된 후, 서버와 클라이언트의 접속 상태를 제어
keep-alive : TCP 접속 유지
close : TCP 접속 끊기
- Accept : 클라이언트가 원하는 미디어 타입을 명시
콤마(,)로 여러 타입 명시 가능, 와일드카드(*)로 모든 타입 명시 가능
- Accept-Charset :클라이언트가 원하는 인코딩(문자집합) 명시
-Accept-Encoding 클라이언트가 원하는 문자 인코딩(압축방식) 명시
-Accept-Language 클라이언트가 원하는 언어 명시
HTTP 헤더(응답헤더)
- Server : 웹 서버 정보 출력
- Allow : 서버 측에서 지원 가능한 HTTP 메서드 리스트 출력
- Content-Disposition : 응답 본문을 브라우저가 어떻게 표시해야 할지 알려주는 것으로, 파일 다운로드를 처리하는 HTTP 헤더 inline : 웹 페이지 화면에 표시 attachment : 다운로드 파일 • filename : 파일명 지정 - 81 - www.boanproject.comHTTP HTTP 헤더 응답 헤더 Location 클라이언트 요청을 웹 서버가 다른 페이지로 리다이렉트할 때 사용하는 헤더 3xx 상태 코드나 201 Created 상태 코드에 사용됨 Set-Cookie 웹 서버가 클라이언트에게 쿠키 정보를 전달하는데 사용되는 헤더 - 82 - www.boanproject.comHTTP HTTP 상태 코드 (응답 상태 코드)
HTTP 응답 코드 5개 분류 첫 번째 숫자는 응답의 클래스를 정의
1xx : 조건부 응답, 단순 정보 제공
2xx : 성공
3xx : 리다이렉션 완료(다른 URI로 리다이렉트)
4xx : 요청 오류(클라이언트 에러)
5xx : 서버 오류
HTTP 상태 코드 (응답 상태 코드)
1xx (요청을 받았으며 작업을 계속함)
100 Continue (계속) : 1xx의 마스터 코드
요청자는 요청을 계속해야 함.
서버는 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타냄
2xx (성공) 200 OK (성공) : 2xx의 마스터 코드
서버가 요청을 제대로 처리함
서버가 요청한 페이지를 정상적으로 제공했다는 뜻
201 Create (작성됨) : PUT 요청이 성공적으로 서버가 새 리소스를 작성함 -
3xx (리다이렉션 완료) 300 Multiple Choices (여러 선택항목)
3xx의 마스터 코드 : 클라이언트의 요청에 대해 다른 URI로 리다이렉트 함
클라이언트가 선택할 수 있는 선택지를 하나 이상 부여
301 Moved Permanently (영구 이동) :요청한 페이지를 새 위치로 영구적으로 이동 특정한 곳으로 브라우저가 요청하면 서버가 설정해 둔 URI로 이동
304 Not Modified (수정되지 않음) : 클라이언트가 마지막 요청 이후 요청한 페이지는 수정되지 않음 따라서, 클라이언트 내 저장된 캐시를 사용하여 보여주겠다! 라는 뜻
4xx (요청 오류) :400 Bad Request (잘못된 요청)
4xx의 마스터 코드 : 클라이언트가 서버에게 잘못된 요청을 보냄 (서버가 요청을 이해 못함)
401 Unauthorized (권한 없음) 클라이언트에게 인증 확인을 요구하는 것을 의미 “권한 없음”이란 의미는 인증이 안되었다는 의미 인증 실패
403 Forbidden (금지됨) 클라이언트 요청을 거부, 접근 거부 인가 실패 HTTP 상태 코드 (응답 상태 코드) 4xx (요청 오류)
404 Not Found (찾을 수 없음) 서버가 요청한 페이지(리소스)를 찾을 수 없음 4xx 코드 중 제일 많이 접하게 됨 405 Method Not Allowed (허용되지 않는 메서드) : 클라이언트가 요청한 메서드가 해당 서버에서 허용하지 않음 POST 방식으로 요청 받는 웹 서버에 GET 요청을 보내는 경우 읽기 전용 리소스에 PUT 요청을 보내는 경우 등등 -
5xx (서버 오류)
500 Internal Server Error (내부 서버 오류) :서버에 오류가 발생하여 요청을 수행할 수 없음
추가적인 에러 상세 내용은 응답 메시지 바디에 출력
503 Service Unavailable (서비스를 사용할 수 없음) :서버를 사용할 수 없는 상태인 경우, 서버가 물리적으로 살아 있으나, 서버에서 구동 중인 애플리케이션에 문제가 발생한 경우
HTTP 요청 메서드
GET : 정보 검색을 위해 서버에게 요청하는 형태 ,링크 클릭 등
POST : 서버에 데이터를 전달하는 형태 ,게시글 작성, 로그인, 검색 등 ,
POST는 전달하는 데이터를 기반으로 처리하는 웹 스크립트
PUT : POST 방식과 같이 서버에 데이터를 전달하는 형태로 유사한 구조를 가짐
PUT은 서버에 지정한 내용(파일)을 업로드할 때 사용
PUT은 POST와 다르게 파일의 경로나 이름 지칭 홈페이지 변조에 많이 악용됨
DELETE : DELETE는 웹 서버에 있는 파일을 삭제할 때 사용하는 메서드
OPTIONS :서버에서 지원되는 HTTP 메서드 종류 확인
HEAD : GET 방식과 동일, 다른 점은 응답 값에 바디(내용)가 없고 헤더만 존재
TRACE : 요청 리소스가 수신되는 경로를 확인 웹 클라이언트가 요청한 데이터가 응답에 포함됨
PATCH :리소스 부분만 수정하는 데 사용
CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정