HTTP 요청(Request) / 응답(Response)

2024. 11. 13. 05:42·Web

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
'Web' 카테고리의 다른 글
  • JWT(JSON Web Token)란?
  • 쿠키 (Cookie) vs 세션 (Session)
BPM37093
BPM37093
luna의 IT기술 정리
  • BPM37093
    IT Study Log
    BPM37093
  • 링크

  • 글쓰기 관리
    • 분류 전체보기 (43)
      • 모의해킹 (37)
        • 웹해킹 (1)
        • 모의해킹 스터디 (36)
      • Web (5)
        • 웹 보안 (1)
        • 웹 크롤링 (1)
      • Data (0)
      • Cloud (0)
      • Network (1)
  • 인기 글

  • 방문자 수

    방문자수Total

    • Today :
  • 태그

    httprequest
    메서드
    burpsuite
    상태코드
    php
    HTTP
    Network
    sqlinjection
    HTML
    WEB
    티스토리챌린지
    HttpResponse
    javascript
    SQL
    Chrome
    웹해킹
    모의해킹스터디
    오블완
    NAT
    mysql
    hash
    웹개발
  • hELLO· Designed By정상우.v4.10.1
BPM37093
HTTP 요청(Request) / 응답(Response)
상단으로

티스토리툴바