Hyper Text Transfer protocol.
OSI의 응용 계층(7계층)에 위치하는 Protocol이다.
기본적으로 "요청"을 하면 그에 대한 "응답"이 주어지는 구조로 구성된다.
또, 비 연결성이 특징이다. TCP와는 달리 비연결성인게 독특하다. 이러한 특징 때문에, Cookie/Session을 사용하여 Client의 상태를 관리한다.
Keep Alive : TCP는 우리가 살펴본 것처럼, 3 - way, 4 - way등의 과정을 거친다. 하지만 매 요청마다 이렇게 하는건 비효율적이니까, "정해진 시간"만큼 TCP 연결을 유지하는 것이다.
TCP/IP위에서 작동하는 HTTP와 달리, HTTPS는 SSL과 함께 한다.
URI = URL(Resource Locator) + URN (Resource Name) 이긴 한데, URI랑 URL을 동등하게 봐도 된다.
Port : IP주소 만으로는 어떤 Application에서 요구하는지, 목적지가 어딘지 알 수가 없다. 그래서 쓴다. PC 1개에 1가지 동작만 하는게 아니니까.
Server는 접근한 Client를 식별하기 위해 Session을 사용한다.
Client에게 Set-Cookie 값으로 Session-ID(Client 식별자)를 발행
Server가 지급한 Session-ID는 Server와 Client에 저장됨.
그럼 이렇게 지급된 Session이 동작하는 원리를 살펴보자.
Client가 Server에 접근.
Server는 Client의 Cookie를 확인해 Session-ID가 있는지 확인한다.
있으면, 접근 허용하는 거고, 없으면, 새로 Session-ID 생성 후 Set-Cookie 값으로 Session-ID를 발행한다.
그니까, Session은 Cookie에 저장되서 사용되는 것이다. 다만 Cookie는 Client에, Session은 Server에 저장된다.
Client가 Server에 접속하면, 요청한 정보들과 함께 Cookie를 저장하고 추후에 재방문시에 요청과 함께 Cookie를 전송해서 매번 새로운 Log-in을 대신한다.
HTTP 구조
HTTP = HTTP Header + HTTP Body
HTTP Header = General Header + Request/Response Header + Entity Header
Request/Response Header : 요청 URL, Method, User Agent 등의 정보들이 포함.
요청 헤더
2.1 Method
2.2 Host
2.3 User-Agent
2.4 Accept-Language
2.5 Accept-Encoding
2.6 Accept-Charset
2.7 Keep-Alive
2.8 Connection
2.8 Referer
2.9 Authorizaton
2.10 Cookie
2.11 If-Modified-Since
2.11 Origin
응답 헤더
2.1 HTTP/1.x Code Status
2.2 Server
2.3 Content-Encoding
2.4 Content-Type
2.5 Content-Length
2.6 Expires
2.7 Pragma
2.8 Date
2.9 Connection
2.10 Allow
Entity Header : HTTP 본문에 대한 정보들이 포함된다. Content[length, Encoding, Language, Location], 만료 날짜 등등.
3.1 Content-Encoding
3.2 Content-Language
3.3 Content-Location
3.4 Content-Length
3.5 Content-Range
3.6 Content-Type.
3.7 Expire time
3.8 Last modified time
GET, POST, HEAD, PUT, DELETE, TRACE, PATCH, OPTIONS, CONNECT 등등.
GET : Resource를 GET하겠다는 뜻. URL이 가진 정보를 검색하기 위해 요청하는 것이다.
POST : Server로 Data를 전송할 때 사용한다.
HEAD : GET과 유사한 방식이다. 다만 이름 그대로 HEADER만을 보낸다.
PUT : Data를 덮어쓴다. (있으면) 없다면 새로 생성한다.
DELET : PUT과 반대 개념. Server의 파일을 삭제할 때 사용.
CONNECT : Server에 Proxy를 요청할 때 사용한다.
실제 HTTP 헤더를 통해서 살펴보자.
Get /basic.htm HTTP/1.1\r\n : 해당하는 파일을 GET 하는 요청 전송
Host:192.168.1.1\r\n : Host의 주소가 192.168.1.1 "수신 측 주소"이다.
User-Agent: Mozilla/5.0 ~, Gecko ~, Ubuntu, Firefox : Firefox(Gecko는 Firefox의 Engine명, Chrome은 Webkit)
Accept: text/html, application~ : Media type/우선순위. 즉 text => application ~
Accept-Language: en-us : 영어만 수용합니다. 라는 뜻
Accept-Encoding: gzip,deflate : gzip, deflate라는 Encoding 방식만 주세요
Accept-Charset: ISO-8859~ : ISO-8859 표준을 사용한 문자집합을 원해요
Keep Alive: 300\r\n : Handshake과정을 생략하는 HTTP 1.1부터 지원하는 기능. 300초 지속
Connection: keep-alive : Keep-alive
Referer: http://192.168.1.1~ : 직전에 머물렀던 Web 주소.
Authorization: Basic YWRtaW46YWRtaW4= : 인증 방법, base64로 인코딩되어있는데, admin:admin를 암호화함.
HTTP 1.0 200 ok\r\n : HTTP Version은 1.0이고, 200이라는 응답 코드(성공) 반환
Server : Intoto Http Server라는 Server 사용
Content-type : 요청받은 파일의 타입. text/html 이라는 Content
Pragma : HTTP 1.1에서는 Cache-Control이 대체한다. Cache 유효성 검사를 목적으로 한다.
Connection : 연결 상태 : 닫힘.
Time since request : 요청 후 지난 시간.
Request in frame : ?
Request URI : ?
File Data : File data 크기
응답 HTTP 1.1
HTTP 1.1 200 ok : HTTP Version,
Date : HTTP 생성 날짜.
Server: Server 정보
X-C : ? 이건 뭐지 찾아도 안나온다.
Expires : HTTP 만료 시간.
Last-Modified : 마지막 수정 시간
Cache-Control : Cache Control 정보. (No-cache : 모든 캐시 사용 전 서버에 허가 요청)
age : 캐시 응답 (max-age time 내에
Pragma : HTTP 1.0과 동일하다.
Etag : HTTP 오류 검사. Cache된 정보를 사용할 수 있을지 없을지에 대한 정보이다.
Vary : Cache된 응답을 추 후 요청들에 사용할 수 있는지 여부를 의미한다.
P3P : P3P는 개인정보보호 기술이다. 해당 사이트의 개인정보 보호단계등의 정보를 의미한다.
xserver : 여러 Server의 1개 이름이다. * https://webtechsurvey.com/response-header/x-server
Content-Length : Content 길이
Keep-Alive : Keep-Alive 설정 정보. (timeout 15)
Connection : 연결 => Keep-Alive
Content-Type: Image 중 gif