HTTP란?
- HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜
- 웹에서 클라이언트와 서버 간의 통신을 위한 기본적인 프로토콜
HTTP 요청
GET /home.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/testpage.html
Content-Type: application/json
Connection: keep-alive
1. 요청 라인 (Request Line)
요청의 첫 번째 줄로, 메서드(GET, POST...), 요청 URI, HTTP 버전으로 구성.
- 예: GET /home.html HTTP/1.1
- 각각은 띄어쓰기로 구분함
- 요청 URI
- 요청하는 리소스의 경로.
- 프로토콜 (http://), 도메인 (여기서는 developer.mozilla.org), 또는 TCP 포트 (여기서는 80)인 요소들을 제거.
- HTTP 버전
- 사용 중인 HTTP 프로토콜의 버전.
- 일반적으로 HTTP/1.1 또는 HTTP/2가 사용.
2. 헤더 (Header)
요청에 대한 추가 정보를 제공하는 여러 헤더 필드로 구성.
- Host: 요청하는 서버의 도메인 이름과 포트 번호를 지정.
- 예: Host: http://www.example.com
- User-Agent: 클라이언트 소프트웨어의 정보(브라우저, 운영체제 등)를 제공.
- 예: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
- Accept: 클라이언트가 수용할 수 있는 콘텐츠 타입을 지정.
- 예: Accept: text/html,application/json
- Accept-Encoding: 인코딩 알고리즘에 대해 서버에 알림.
- Accept-Encoding: gzip, deflate, br
- Referer: 현재 페이지로 연결되는 링크가 있던 이전 웹 페이지의 주소.
- 예: https://developer.mozilla.org/testpage.html
- Content-Type: 요청 본문의 데이터 형식을 지정 (주로 POST 요청에서 사용).
- 예: Content-Type: application/json
- Authorization: 보호된 리소스에 접근하기 위한 인증 정보를 포함.
- 예: Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
- Cookie: 클라이언트가 서버에 저장한 쿠키 정보를 포함.
- 예: Cookie: sessionId=abc123; userId=xyz456
- Connection: 현재 트랜잭션이 끝난후에 네트워크 연결을 열린 상태로 둘지 여부를 제어.
- 예: Connection: keep-alive
3. 본문 (Body)
POST와 같은 메서드에서 데이터를 전송할 때 사용.
- GET 요청은 본문이 없음.
HTTP 요청 메서드
- GET: 서버에서 데이터를 요청하며, 데이터를 받기만 함.
- HEAD: GET 요청과 동일한 응답을 요구하지만, 응답 본문은 포함하지 않음.
- POST: 서버에 데이터를 제출하며, 서버 상태의 변화나 부작용을 일으킴.
- PUT: 서버의 데이터를 수정하거나 교체함.
- DELETE: 서버의 데이터를 삭제함.
- PATCH: 리소스의 일부를 수정함.
- CONNECT: 서버와의 터널을 설정하여 연결함.
- OPTIONS: 특정 리소스와의 통신 옵션을 설정함.
- TRACE: 리소스의 경로를 따라 메시지를 루프백 테스트함.
HTTP 응답
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Location: https://developer.mozilla.org/home.html
ETag: "51142bc1-7449-479b075b2891b"
Content-Length: 29769
Content-Type: text/html
Cache-Control: no-cache
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
1. 상태 라인 (Status Line)
응답의 첫 번째 줄로, HTTP 버전, 상태 코드, 상태 메시지로 구성.
- 예: HTTP/1.1 200 OK
- 각각은 띄어쓰기로 구분함
- 상태 메시지는 아무런 영향력이 없는, 상태 코드의 짧은 설명을 나타냄
2. 헤더 (Headers)
응답에 대한 추가 정보를 제공하는 여러 헤더 필드로 구성.
- Content-Type: 응답 본문의 데이터 형식을 지정.
- 예: Content-Type: text/html; charset=UTF-8
- Content-Length: 응답 본문의 길이를 바이트 단위로 나타냄.
- 예: Content-Length: 1234
- Location: 리다이렉션 시 새로운 리소스의 URI를 지정.
- 예: Location: https://www.example.com/new-uri
- ETag: 리소스의 버전을 나타내는 태그로, 캐시 검증에 사용.
- 예: ETag: "12345"
- Server: 서버에 대한 정보를 제공.
- 예: Server: Apache/2.4.1 (Unix)
- Date: 메시지가 발생한 날짜와 시간을 포함
- Date: Sat, 09 Oct 2010 14:28:02 GMT
- Cache-Control: 캐시 정책을 설정.
- 예: Cache-Control: no-cache
- Set-Cookie: 클라이언트에게 저장할 쿠키 정보를 전달.
- 예: Set-Cookie: sessionId=abc123; Path=/; HttpOnly
3. 본문 (Body)
요청에 대한 실제 데이터가 포함.
- HTML, JSON, 이미지 등 다양한 형식이 될 수 있음.
HTTP 응답 상태 코드
정보 응답
- 100 Continue: 클라이언트가 계속 요청을 진행해도 좋음을 알림.
- 101 Switching Protocol: 서버가 클라이언트의 프로토콜 변경 요청을 수용함.
성공 응답
- 200 OK: 요청이 성공적으로 처리됨.
- 201 Created: 새로운 리소스가 성공적으로 생성됨.
- 204 No Content: 요청은 성공했지만 반환할 콘텐츠가 없음.
- 206 Partial Content: 클라이언트가 요청한 일부 데이터가 반환됨.
리다이렉션 메시지
- 301 Moved Permanently: 요청한 리소스의 URI가 영구적으로 변경됨.
- 302 Found: 요청한 리소스의 URI가 일시적으로 변경됨.
- 304 Not Modified: 리소스가 수정되지 않았음을 알림 (캐시 사용).
클라이언트 에러 응답
- 400 Bad Request: 잘못된 요청 문법으로 서버가 요청을 이해할 수 없음.
- 401 Unauthorized: 인증이 필요함.
- 403 Forbidden: 클라이언트가 접근할 권리가 없음.
- 404 Not Found: 요청한 리소스를 찾을 수 없음.
- 409 Conflict: 요청이 서버의 현재 상태와 충돌함.
서버 에러 응답
- 500 Internal Server Error: 서버에서 처리할 수 없는 오류 발생.
- 502 Bad Gateway: 잘못된 응답을 받음 (게이트웨이 오류).
- 503 Service Unavailable: 서버가 요청을 처리할 준비가 되지 않음.
- 504 Gateway Timeout: 게이트웨이가 적시에 응답을 받지 못함.
728x90
반응형
'Web' 카테고리의 다른 글
JWT(JSON Web Token)란? (0) | 2024.11.05 |
---|---|
쿠키 (Cookie) vs 세션 (Session) (0) | 2024.11.04 |