[Web Protocols 정리하기] 1. URL 및 HTTP
웹 서버 개발 중 헷갈리고 모호하게 쓰이고 있는 프로토콜들이 많아서
내가 제대로 이해하기 위해 웹 프로토콜을 정리해본다.
1. URL (Uniform Resource Locator)
네트워크 상에서 자원이 어디있는지를 알려주기 위한 규약으로 웹 페이지 주소를 타나낸다.
웹 페이지 주소를 알아도 URL에 맞는 프로토콜이 있어야 제대로 접속할 수 있다.
protocol://computer_name:port/path?query
1) protocol: URL에 사용될 프로토콜 이름
2) computer_name: 도메인 이름
3) port: 접속할 포트 번호 (기본 80)
4) path: 원하는 자원의 위치
5) parameters: 원하는 자원에 대한 상세한 정보
2. HTTP (Hyper Text Transfer Protocol)
HTML과 같은 Hyper Text의 리소스를 가져올 수 있는 프로토콜로
모든 데이터 교환과 클라이언트 - 서버 프로토콜의 기초이다.
1) 메시지 포맷
클라이언트 - 서버는 평문 (ASCII) 메시지로 통신
요청 - 응답 메시지로 구성
요청 메시지
요청 내용, 헤더, 빈 줄, 기타 메시지로 구성
메소드 | RFC | 요청에 Body 있음 | 응답에 Body 있음 | 안전 | Idempotent | 캐시 기능 |
GET | RFC 7231 | X | O | O | O | O |
HEAD | RFC 7231 | X | X | O | O | O |
POST | RFC 7231 | O | O | X | X | O |
PUT | RFC 7231 | O | O | X | O | X |
DELETE | RFC 7231 | X | O | X | O | X |
CONNECT | RFC 7231 | O | O | X | X | X |
OPTIONS | RFC 7231 | optional | O | O | O | X |
TRACE | RFC 7231 | X | O | O | O | X |
PATCH | RFC 5789 | O | O | X | X | O |
응답 메시지
상태표시 행(status code, reason message 포함), 응답 헤더필드(Content-Type: text/html 등), 빈 줄,
기타 메시지로 구성
2) 예제
클라이언트 요청
GET /restapi/v1.0 HTTP/1.1
Accept: application/json
Authorization: Bearer UExBMDFUMDRQV1MwMnzpdvtYYNWMSJ7CL8h0zM6q6a9ntw
서버 응답
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>
3) 응답코드
코드 | 메시지 | 설명 |
100 | Continue | 클라이언트로부터 일부 요청을 받았으니 나머지 요청 정보를 계속 보내주길 바람. (HTTP 1.1에서 처음 등장) |
200 | OK | 오류 없이 전송 성공. |
304 | Not modified | 클라이언트의 캐시에 이 문서가 저장되었고 선택적인 요청에 의해 수행됨 (보통 지정된 날짜보다 더 나중의 문서만을 보여주도록 하는 If-Modified-Since 헤더의 경우). |
400 | Bad Request | 요청 실패. 문법상 오류가 있어서 서버가 요청사항을 이해하지 못함. |
404 | Not Found | 문서를 찾을 수 없음. 서버가 요청한 파일이나 스크립트를 찾지 못함. |
500 | Internal Server Error | 서버 내부 오류. |
502 | Bad gateway | 게이트웨이 상태 나쁨. |
504 | Gateway timeout | 프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있음. 초기 서버가 원격 서버로부터 응답을 받을 수 없음. (HTTP 1.1 에서 새로 등장) |
[참고 문헌]
1. ko.wikipedia.org/wiki/URL
2. joshua1988.github.io/web-development/web-protocols/
3. developer.mozilla.org/ko/docs/Web/HTTP/Overview
4. ko.wikipedia.org/wiki/HTTP