# HTTP HEADER

![https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80](/files/-MHRs34wC5OHocIHdT9a)

## HTTP란?

* 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
* HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니다.
* Plain text로 부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있다.
* HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.

## HTTP 공통 헤더

REQUEST와 RESPONSE 헤더에 공통으로 사용하는 속성이다.

* Date : HTTP 메시지가 만들어진 시각
* Connection : 클라이언트와 서버 간 연결에 대한 옵션 설정
  * 기본적으로 keep-alive로 되어있는데, HTTP/2에서는 사용하지 않는다.
* Cache-Control : 캐시 설정
  * no-store : 캐싱하지 않는다.
  * no-cache : 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인한다.
  * must-revalidate : 만료된 캐시만 서버에 확인 받도록 한다.
  * public : 공유 캐시(또는 중개 서버)에 저장한다.
  * private : 브라우저같은 특정 사용자 환경에만 저장한다.
  * max-age : 캐시 유효시간을 명시한다.
* Transfer-Encoding : 메시지 본문의 인코딩 방식을 나타낸다.
* Via : 도중에 경유한 프록시나 게이트웨이를 기록한다.

## HTTP 엔티티 헤더

엔티티(메시지 본문)의 부가 정보로 사용하는 헤더 필드

* Allow : 지정한 URI로 사용 가능한 메소드를 나타낸다.
* Content-Encoding : 메시지 압축 방식 표시
* Content-Type : 컨텐츠 타입(MIME)과 문자열 인코딩(utf-8)을 명시할 수 있다.
* Content-Length : 요청과 응답 메시지의 본문 크기를 바이트 단위로 표시한다.
* Last-Modified : 리소스를 마지막으로 갱신한 일시
* Content-Language : 해당 개체와 적합한 언어 정보 표시
* Content-Disposition : 응답 Body를 브라우저가 어떻게 표시해야할지 알려준다.
  * inline인 경우 웹페이지 화면에 표시되고, attachment인 경우 다운로드한다.

## HTTP REQUEST

HTTP 헤더 내 요청 헤더 (Request Header) 항목

* Host : 요청하는 호스트에 대한 호스트명 및 포트번호
* User-Agent : 클라이언트 소프트웨어 OS 또는 브라우저
  * User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_13\_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
* Accept : 클라이언트가 허용할 수 있는 파일 형식
* Authorization : 인증 토큰 정보
* Origin : 요청을 보낸 주소를 제공한다. 요청지와 수신지 주소가 다를 경우 CORS 문제가 발생
* Referer : 이전 페이지 주소 정보, 주로 페이지 접근 통계에서 많이 사용한다.

## HTTP RESPONSE

HTTP 헤더 내 응답 헤더 (Response Header) 항목

* Server : 서버 소프트웨어 정보
* Set-Cookie : 나열된 쿠키 정보를 브라우저에 저장
* Expires : 캐시 만료일을 알려준다.
* Allow : 해당 엔티티에 대해 서버 측에서 지원 가능한 HTTP 메소드 리스트를 표시
* Access-Control-Allow-Origin : 요청 Host와 응답 Host가 다르면 CORS 에러가 발생하는데 서버에서 응답 메시지 Access-Control-Allow-Origin 헤더에 프론트 주소를 적어주면 에러가 발생하지 않는다.
* Location : 리소스가 리다이렉트될 경우에 이동된 주소, 또는 새로 생성된 리소스 주소를 명시
  * 새로 생성된 리소스의 경우
    * HTTP 상태 코드 201 Created가 반환된다.
  * 300번대 응답의 경우
    * `HTTP/1.1 302 Found Location: /`
    * 이런 응답이 왔다면 브라우저는 / 주소로 redirect한다

## 참고

* <https://xmfpes.github.io/web-network/network-http/>
* <https://gmlwjd9405.github.io/2019/01/28/http-header-types.html>
* <https://code-machina.github.io/2019/07/29/HTTP-Header-Summary-Part-1.html>
* <https://webdir.tistory.com/263>
* [https://velog.io/@surim014/HTTP란-무엇인가](https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80)
* <https://webdir.tistory.com/263>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://incheol-jung.gitbook.io/docs/q-and-a/computer-science/http-header.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
