HTTP Header
HTTP
-
- Hyper Text Transfer Protocal
-
인터넷에서 데이터를 주고받을 수 있는 통신 규약
Request(Client)와 Response(Server)로 통신
Request
예를 들어 http://asdf.asdf.com에 대한 정보를 달라고 요청한다면 서버에 요청을 보낼 때의 구성은 다음과 같다.
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: code.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
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
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache
- 시작줄 (GET/HTTP/1.1(version))
- 헤더 (요청에 대한 정보)
Response
HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: https://code.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Top 20+ MySQL Best Practices - Nettuts+</title>
<!-- ... rest of the html ... -->
-
시작줄 HTTP/1.1 200 OK - 요청 성공
- 헤더 정보
- 본문
HTTP method
request시에 주소와 함께 메소드를 함께 보낼 수 있다.
method | description |
---|---|
GET | 지정된 리소스(URI) 요청 |
POST | 클라이언트 폼 입력 필드 데이터 수락을 요청. server의 HTTP Body에 Data를 전송 |
HEAD | 문서의 헤더 정보만 요청, 응답 데이터(body)는 받지 않음. |
PUT | 클라이언트가 전송한 데이터를 지정한 URI로 대체 |
DELETE | 클라이언트가 지정한 URI를 서버에서 삭제 |
TARCE | 클라이언트가 요청한 자원에 도달하기까지의 경로를 기록하는 loop back 검사 |
HEADER
공통 헤더 : 요청과 응답에 모두 사용되는 헤더
-
Date: HTTP massage가 생성된 시각 (자동 생성)
-
Connection: 기본적으로 keep-alive로 되어 있음
-
Content-Length: 요청, 응답 메세지의 본문 크기를 바이트 단위로 표시 (자동 생성)
-
Cache-Control:
-
Content-Type: 컨텐츠의 타입과 문자열 인코딩 명시 가능 (ex. Content-Type: text/html; charset=utf-8)
-
Content-Language: 사용자의 언어
-
Content-Encoding: 컨텐츠가 압축된 방식
요청헤더
-
Host: 서버의 도메인 이름. host헤더는 반드시 하나만 존재한다.
-
User-Agent: 현재 사용자가 어떤 클라이언트를 통해 요청 보냈는지 확인 가능하다. (ex. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36) 운영체제, 앱, 브라우저 등의 정보가 담겨있다. 접속자 및 사용기기 통계에 활용되기도 한다.
-
Accept: 클라이언트가 허용 가능한 파일 형식
- Accept로 원하는 형식을 보내고, 서버가 응답하면서 헤더의 Content를 설정하게 된다.
ex.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
-
Cookie: 서버가 클라이언트에 쿠키를 저장해 놓았다면 해당 쿠키의 정보를 이름-값(쿠키는 map형식으로 구성) 쌍으로 웹서버에 전송한다.
-
Origin: POST등의 요청을 보낼 때 요청이 어느 주소에서 시작되었는가를 나타낸다. 보낸 주소와 받는 주소가 동일하지 않으면 문제가 발생.
-
If-Modified-Since: 페이지가 수정되었으면 최신 버전 페이지를 요청(Cache)한다. 이 요청을 위한 필드이다. 변경이 없다면, 데이터를 전송받지 않는다.
-
Authorization: 인증 토큰 서버로 보낼 때 사용하는 헤더이다. 가령 API요청을 할 때 토큰이 없다면 거절당한다. 주로 JWT(Json Web Token)을 사용한 인증에서 사용한다. (ex. Kakao map)
응답헤더
- Server: 웹서버 정보
- Access-Control-Allow-Origin: Origin과 같이 req Host 와 res Host가 다르면 CORS에러가 발생하는데 이 헤더에 프론트 주소를 적어주면 에러X
- Allow: CORS요청 외에도 적용된다. (ex. Allow:GET -> GET요청만 받음)
- Content-Disposition: 응답 본문을 브라우저가 어떻게 표시해야하는지 알려주는 헤더 (ex. inline: 웹페이지 화면에 표시, attachment: 다운로드)
- Location: response가 300이거나 201Created일 때 어느 페이지로 이동할지 알려주는 헤더
- Content-Security-Policy: 외부 파일을 불러오는 경우, 차단하거나 허용할 소스를 명시할 수 있다.