Content-Type 헤더는 웹 서버와 클라이언트가 데이터를 주고받을 때 사용하는 데이터 형식을 명시하는 HTTP 헤더이다. application/json은 JSON(JavaScript Object Notation) 형식의 데이터를 의미한다. JSON은 사람이 읽기 쉽고, 기계가 해석하기도 쉬운 텍스트 기반의 데이터 형식이다. 웹 애플리케이션에서 자주 사용된다.
API 요청과 응답: 클라이언트가 서버에 데이터를 보낼 때, 종종 JSON 형식을 사용한다. 이때 Content-Type: application/json 헤더를 사용하여 서버에게 데이터를 JSON 형식으로 보낸다는 것을 알린다. 서버가 클라이언트에게 응답할 때도 이 형식을 사용한다.
웹 애플리케이션 통신: RESTful API나 AJAX 요청에서 많이 사용된다. JSON은 구조화된 데이터를 전송하기에 적합하기 때문에, 많은 웹 서비스에서 데이터를 주고받을 때 사용된다.
클라이언트가 서버로 JSON 데이터를 보낼 때:
Copy code
POST /api/example HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com"
}
이 요청에서 Content-Type: application/json 헤더는 데이터가 JSON 형식임을 명시한다. JSON 형식을 사용하면 서버와 클라이언트 간의 데이터 교환이 더욱 원활해진다.
Content-Type: application/octet-stream은 HTTP 헤더에서 사용되는 MIME 타입 중 하나로, 바이너리 데이터를 나타낸다. 이 MIME 타입은 파일의 형식이 명확하지 않거나 특정 형식을 지정하지 않을 때 사용된다. 즉, 데이터를 그저 이진수 바이트 스트림으로 처리할 때 사용되는 형식이다.
파일 다운로드: 서버가 클라이언트에게 파일을 전송할 때, 파일의 형식이 특정되지 않은 경우 application/octet-stream을 사용하여 모든 형식을 포괄적으로 처리할 수 있다. 클라이언트는 이 MIME 타입을 보고, 해당 데이터를 파일로 저장해야 한다는 것을 인식한다.
데이터 전송: 특정한 형식이 정해지지 않은 바이너리 데이터를 전송할 때도 사용된다. 예를 들어, 이미지, 동영상, 실행 파일 등 다양한 파일 형식의 데이터를 전송할 수 있다.
보안 강화: 일부 웹 애플리케이션에서는 파일의 MIME 타입을 명시하지 않음으로써 보안을 강화하기 위해 application/octet-stream을 사용하기도 한다. 이렇게 하면 클라이언트가 파일을 다운로드한 후, 파일을 열기 전에 반드시 사용자가 파일 형식을 결정해야 한다.
파일 다운로드를 위한 응답에서:
Copy code
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="example.bin"
(binary data)
이 예시에서 Content-Type: application/octet-stream은 서버가 바이너리 데이터를 전송하고 있음을 나타낸다. Content-Disposition 헤더는 클라이언트가 파일을 저장할 때 사용할 파일 이름을 지정한다.
application/octet-stream은 다양한 형식의 파일을 전송할 때 유용하게 사용되며, 특히 파일 형식이 명확하지 않거나 다양한 형식을 포괄적으로 다룰 필요가 있을 때 적합하다. Sagemaker Endpoint에 inference request를 할 때 body가 6kb를 넘을 수 없기 때문에 이미지를 압축해서 보내야 하는데, base64 인코딩한 데이터를 octete-stream을 활용하여 보낼 수 있다.