올바른 JSON 컨텐츠 유형은 무엇입니까?


10250

나는 JSON 으로 오랫동안 엉망이되어 텍스트로 밀어 내고 아무도 아는 적이 없지만 (내가 아는) 아무도 해치지 않지만 제대로 일을 시작하고 싶습니다.

나는 보았다 그래서 json으로 콘텐츠 형식에 대한 많은 사칭 "표준"

application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json

그러나 어느 것이 맞습니까? 보안 및 브라우저 지원 문제가 서로 다릅니다.

비슷한 질문이 있다는 것을 알고 있습니다 .JSON이 REST API에서 반환되면 어떤 MIME 형식입니까? 하지만 좀 더 구체적인 답변을 원합니다.

답변:


10307

JSON 텍스트의 경우 :

application/json

JSON 텍스트의 MIME 미디어 유형은 application/json입니다. 기본 인코딩은 UTF-8입니다. (출처 : RFC 4627 ).

들어 JSONP 콜백 (실행 가능한 자바 스크립트) :

application/javascript

다음은 댓글에 언급 된 관련 블로그 게시물입니다.



Json 텍스트를 함께 파일로 보낼 수 있습니까?
OPV

7
Internet Explorer에 때때로 application / json 관련 문제가 있습니다-블로그가 오프라인 상태입니다
kudlatiger 2016

6
일반 텍스트가 포함 된 누군가가 작성한 문서가 있다고 가정합니다. 이제 일반 텍스트는 유효한 JSON 일뿐입니다. 그렇다면 텍스트 / 일반을 MIME 유형으로 사용하는 것이 잘못 되었습니까? JSON은 텍스트의 하위 유형입니다. 그래서 나는 둘 다 허용되어야한다고 생각합니다. 문제는 실제로 어떤 것이 더 잘 작동하는지입니다. codetoshare의 의견에 따르면 IE는 응용 프로그램 / json에 문제가 있습니다. 그러나 브라우저는 텍스트 / 일반에 문제가 없어야합니다. 텍스트 / 일반이 안전하지 않은 경우 웹 사이트에서 텍스트 파일을 어떻게 제공 할 수 있습니까?
Panu Logic

5
@EugenMihailescu 그 페이지의 제목은 "MIME 유형의 불완전한 목록"입니다
Omegastick

1616

IANA 는 JSON의 공식 MIME 유형을로 등록했습니다 application/json.

없는 이유에 대해 물었을 때 text/json, 크록 포드는 JSON 말했다 것으로 보인다 정말 자바 스크립트도 텍스트하지 않고 또한 IANA는 가능성이 배부했다 application/*보다 text/*.

추가 자료 :


166
text/*초기 에는 많은 것들이 섹션에 들어 갔으며 아마도 요즘 섹션에 들어갈 것입니다 application/*.
TRiG

29
@Rohmer-텍스트 편집기에서 아무 것도 열 수 있지만 JPEG 또는 Windows .exe 또는 .zip과 같은 이진 형식에는 인쇄 할 수없는 문자가 포함되어 실제로 많은 텍스트 편집기를 손상 시키거나 원하지 않는 동작을 일으킬 수 있습니다. cat file.jpg예를 들어 달리십시오 . xml 또는 json 파일은 100 % 인쇄 가능합니다. Stijn de Witt의 요점은 그렇습니다. 물론 지금 변경하기에는 너무 늦습니다.
XP84

4
@ XP84 HEX 형식의 텍스트 편집기로 바이너리를 열 수 있습니다. 그리고 다른 모든 문자 (16 자)는 100 % 인쇄 가능합니다. 그래서, 그 논리에 의해 ... 이진 텍스트는 모두입니까? Json은 텍스트가 아닙니다. Json은 (경고 : 비공식적 인 느슨한 정의) 객체 (또는 객체의 배열 ) 의 텍스트 표현입니다.
xDaizu

5
"HEX 형식의 텍스트 편집기"라는 구절에는 의미가 없습니다. 16 진수 편집기는 각 바이트를 16 진수 값으로 표시합니다 (예 : 바이트 1111000은 "78"). 16 진 편집 모드를 사용하는 텍스트 편집기가있을 수 있지만 가장 기술적 인 작업을 수행하는 대부분의 기술 사용자 외에는 유용하지 않습니다. 비교하면 텍스트는 ASCII 또는 유니 코드를 의미하고 텍스트에서 바이트 1111000은 소문자를 의미 x합니다. 78은 아닙니다. JSON은 HTML (text / html)과 정확히 같은 방식으로 텍스트입니다. 읽을 수있는 텍스트 문자 만 포함되며 구조적 의미가 있습니다.
XP84

11
나는 Stijn de Witt에 동의하는 경향이 있습니다. JSON은 텍스트 편집기를 사용하여보고 편집 할 수 있습니다.
Panu Logic

891

JSON의 경우 :

Content-Type: application/json

대한 JSON-P :

Content-Type: application/javascript

62
JSONP는 자바 스크립트 객체 리터럴 전달하는 기술이다, 정말 JSON하지만 아니다
벤자민 Gruenbaum

632

물론 JSON에 대한 올바른 MIME 미디어 유형은입니다 application/json. 그러나 애플리케이션에서 어떤 유형의 데이터가 예상되는지 알아야합니다.

예를 들어 Ext GWT를 사용 하고 서버 응답은 텍스트 / html 로 이동해야 하지만 JSON 데이터를 포함 해야합니다 .

클라이언트 측, Ext GWT 양식 리스너

uploadForm.getForm().addListener(new FormListenerAdapter()
{
    @Override
    public void onActionFailed(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Error");
    }

    @Override
    public void onActionComplete(Form form, int httpStatus, String responseText) 
    {
        MessageBox.alert("Success");
    }
});

application / json 응답 유형 을 사용하는 경우 브라우저에서 파일을 저장하도록 제안합니다.

Spring MVC를 사용하는 서버 측 소스 코드 스 니펫

return new AbstractUrlBasedView() 
{
    @SuppressWarnings("unchecked")
    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request,
                                           HttpServletResponse response) throws Exception 
    {
        response.setContentType("text/html");
        response.getWriter().write(json);
    }
};

7
서버 응답은 text / html로 이동해야합니다. ExtJS 변형도 마찬가지입니다.
gbegley

463

JSON :

URL에 전달 된 쿼리 매개 변수에 따라 응답이 동적으로 생성됩니다.

예:

{ "Name": "Foo", "Id": 1234, "Rank": 7 }

컨텐츠 타입: application/json


JSON-P :

패딩이있는 JSON. 응답은 함수 호출이 감싸 진 JSON 데이터입니다.

예:

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});

컨텐츠 타입: application/javascript


46
JSON의 정의가 잘못되었습니다. 동적으로 생성되거나 쿼리 매개 변수를 존중할 필요는 없습니다. 정적 JSON 파일을 제공 할 수 있습니다. 또한 가장 많이 찬성 된 답변에는 RFC에 대한 링크가 있습니다.
styfle

10
또한 JSONP는 var에 지정된 JSON 데이터 일 수 있습니다.
Jimmy Kane

401

Ubuntu 또는 Debian을 사용하고 Apache를 통해 .json 파일을 제공하는 경우 올바른 컨텐츠 유형으로 파일을 제공 할 수 있습니다. Firefox 확장 JSONView 를 사용하고 싶기 때문에 주로 이것을하고 있습니다.

아파치 모듈 mod_mime 가이를 쉽게 도와 줄 것이다. 그러나 우분투에서는 /etc/mime.types 파일을 편집 하고 라인을 추가해야합니다

application/json json

그런 다음 Apache를 다시 시작하십시오.

sudo service apache2 restart

44
일반적으로 재로드로 충분합니다 (다시 시작하는 것보다 빠름). 또한 "sudo service apache2 reload"를 수행 할 수 있습니다.
noamtm

19
우분투 12.04는 기본적으로 이것을 가지고 있습니다
Prizoff

386

클라이언트 측에서 ASP.NET 웹 서비스를 호출하는 경우 ASP.NET 웹 서비스 application/json가 작동해야합니다. 나는 이것이 jQueryExt 프레임 워크 에서 동일하다고 생각합니다 .


20
jQuery는 적어도 'application / json'및 'text / plain'과 함께 작동하는 것 같습니다 ...하지만 다른 모든 것을 시도하지는 않았습니다.
Nathan

jQuery를 함께 작업 할 수있는 content-Type: text/plain, content-Type: application/json, content-Type: application/json; charset=UTF-8, contentType: "application/x-www-form-urlencoded; charset=UTF-8"
Ashraf.Shk786

307

JSON에 적합한 컨텐츠 유형은 JSON을 application/json사용하는 JSONP ( 패딩이 포함 된 JSON이라고도 함)이며, 실제로는 JavaScript이므로 올바른 컨텐츠 유형은입니다 application/javascript.


296

JSON 응답에 application/json가장 적합한 MIME 유형 인 것은 의심 할 여지가 없습니다 .

그러나 application/x-javascript압축 문제로 인해 사용해야했던 경험이있었습니다 . 내 호스팅 환경은 GoDaddy 와 공유 호스팅됩니다 . 서버 구성을 변경할 수 없습니다. web.config응답을 압축하기 위해 파일에 다음 코드를 추가했습니다 .

<httpCompression>
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="message/*" enabled="true"/>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="*/*" enabled="false"/>
    </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>

이를 사용하여 .aspx 페이지는 g-zip으로 압축되었지만 JSON 응답은 압축되지 않았습니다. 나는 덧붙였다

<add mimeType="application/json" enabled="true"/>

정적 및 동적 유형 섹션에서 그러나 이것은 JSON 응답을 전혀 압축하지 않습니다.

그 후이 새로 추가 된 유형을 제거하고 추가했습니다.

<add mimeType="application/x-javascript" enabled="true"/>

정적 및 동적 유형 섹션에서 응답 유형을

.ashx (비동기 처리기)

application/x-javascript

이제 JSON 응답이 g-zip으로 압축되었음을 알았습니다. 그래서 개인적으로 사용하는 것이 좋습니다

application/x-javascript

공유 호스팅 환경 에서 JSON 응답을 압축하려는 경우에만 해당 됩니다 . 공유 호스팅에서는 IIS 구성 을 변경할 수 없습니다 .


11
"그래서 개인적으로 application / x-javascript를 사용하는 것이 좋습니다"는이 답변이 잘못된 것입니다. GoDaddy 압축을 허용 application/json하고 공유 호스팅에서 압축을 사용하며 다른 콘텐츠 유형을 사용하여 압축을 사용하도록 제안하지는 않습니다. 단순히 잘못되었습니다. 할 수는 있지만 여전히 잘못 될 것입니다. 브라우저 지원에 다른 컨텐츠 유형을 사용 하는 것이 한 가지이며, 서버 측 압축에 다른 컨텐츠 유형을 사용하는 것도 다른 것입니다.

269

MIME 유형 application/json으로 사용할 때만 다음이 있습니다 (2011 년 11 월 현재 최신 버전의 Chrome, Firefox with Firebug ) :

  • 서버에서 JSON을로드 할 때 더 이상 Chrome에서 경고하지 않습니다.
  • Firebug는 JSON 데이터 형식을 보여주는 응답에 탭을 추가합니다. MIME 유형이 다른 경우 '응답 콘텐츠'로 표시됩니다.

244

모든 것이 콘텐츠 유형에 적용되는 것은 아닙니다 application/json.

Ext JS 양식 제출을 사용하여 파일을 업로드하는 경우 브라우저에서 서버 응답을 구문 분석하여에 대한 문서를 작성하십시오 <iframe>.

서버가 JSON을 사용하여 리턴 오브젝트를 보내는 경우 , 브라우저가 텍스트를 변경하지 않고 문서 본문에 삽입하도록 브라우저에 알리려면 Content-Type헤더를 설정해야합니다 text/html.

Ext JS 3.4.0 API 문서를 참조하십시오 .


40
표준을 준수하지 않는 도구는 가능하면 피해야합니다. application/json사양에 따라 사용하십시오 .
one.beat.consumer

15
@ one.beat.consumer는 사실이지만 ExtJs에만 국한되지는 않습니다. 브라우저 제한 사항 (또는 "보안 조치")입니다.
Hendy Irawan

7
분명히 텍스트 / 일반을 사용하여 HTML 의미가 아닌 내용에 HTML 의미를 적용하지 않는 것이 더 좋을까요? 또는 DOM이없는 브라우저는 프레임의 내용을 추출하지 못하게합니까?
Synchro

5
더 혼란을 추가하려면 : 난 그냥 기본 브라우저 삼성 갤럭시 빔 (안드로이드 2.3)에 유사한 사건을 디버깅하고있어, 그리고이 iframe불 것 같습니다 load에 대한 이벤트 application/javascript, application/x-javascript, text/javascript, text/plain,하지만 하지 그것을 발사 application/jsontext/html. 현재, Android <= 2.3은 Android 시장 점유율의 약 50 %입니다.
jakub.g

226

JSON은 도메인 별 언어 (DSL)이며 JavaScript와 독립적 인 데이터 형식이며 자체 MIME 형식이 application/json있습니다. MIME 유형에 대한 존중은 물론 클라이언트 중심이므로 text/plain바이트 전송을 위해 할 수 있지만, 공급 업체 응용 프로그램 도메인에 대한 해석을 불필요하게 추진하고 있습니다 application/json. 를 통해 XML을 전송 하시겠습니까 text/plain?

그러나 솔직히 MIME 유형의 선택은 클라이언트에게 데이터 해석 방법에 대한 조언 text/plain또는 text/HTMLHTML이 아닌 경우 유형 삭제와 비슷합니다. Object 유형의 모든 객체를 유형이 지정된 언어로 만드는 것만 큼 정보가 없습니다.

내가 아는 브라우저 런타임은 JSON 문서를 가져 와서 개입하지 않고도 JavaScript 액세스 가능한 객체로 런타임에 자동으로 사용할 수있게하지만, 절름발이 클라이언트와 작업하는 경우 완전히 다른 문제입니다. 그러나 이것이 전체 이야기 는 아닙니다. RESTful JSON 서비스에는 종종 JavaScript 런타임이 없지만 JSON을 실행 가능한 데이터 교환 형식으로 사용하여 중지하지는 않습니다. 클라이언트가 그렇게 무섭다면 ... Ajax 템플릿 서비스를 통한 HTML 삽입을 고려할 것 입니다.

신청 / 제이슨!


210

클라이언트 측 환경에있는 경우 제대로 지원되는 웹 응용 프로그램을 사용하려면 브라우저 간 지원에 대해 조사해야합니다.

올바른 HTTP Content-Type은 application/json다른 사용자도 이미 강조했지만 일부 클라이언트는 잘 처리하지 못하므로 jQuery가 default를 권장합니다 text/html.



166

많은 사람들이 언급했듯이 application/json정답입니다.

그러나 아직 설명되지 않은 것은 제안한 다른 옵션의 의미입니다.

  • application/x-javascript: 이전의 JavaScript 용 실험 MIME 유형 application/javascript이 표준으로 설정되었습니다.

  • text/javascript: 이제 폐기되었습니다. application/javascript자바 스크립트를 사용할 때 사용해야합니다 .

  • text/x-javascript: 위 상황에 대한 실험적인 MIME 유형.

  • text/x-json: application/json공식적으로 등록 되기 전에 JSON 용 실험 MIME 유형

콘텐츠 유형에 대한 의문이있을 때마다이 링크를 확인해야 합니다.


15
언제 text/javascript쓸모 없게 되었습니까? 여전히 <script type="text/javascript" ...태그로 HTML 문서를 채우고 있습니다.
Oli

7
실제로 브라우저에는 차이가 없습니다. RFC 표준에서는 더 이상 사용되지 않습니다. rfc-editor.org/rfc/rfc4329.txt
fcm

16
@Oli HTML5에 따르면 안전하게 삭제 type="text/javascript"하고 할 수 있습니다 <script>...</script>.
TCB13 2016 년

149

JSP 에서는 이를 페이지 지시문에서 사용할 수 있습니다.

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>

JSON 의 올바른 MIME 미디어 유형은 application/json입니다. JSP는이를 사용하여 클라이언트에 응답을 보냅니다.


115

application/json”는 올바른 JSON 컨텐츠 유형입니다.

def ajaxFindSystems = {
  def result = Systems.list()
  render(contentType:'application/json') {
    results {
      result.each{sys->
        system(id:sys.id, name:sys.name)
      }
    }
    resultset (rows:result.size())
  }
}

112

에 대한 IANA 등록application/json 말한다

이 미디어 유형을 사용하는 응용 프로그램 : JSON은 ActionScript, C, C #, Clojure, ColdFusion, Common Lisp, E, Erlang, Go, Java, JavaScript, Lua, Objective와 같은 모든 프로그래밍 언어로 작성된 응용 프로그램간에 데이터를 교환하는 데 사용되었습니다. CAML, Perl, PHP, Python, Rebol, Ruby, Scala 및 Scheme.

IANA.org 는 이러한 다른 미디어 유형을 나열하지 않으며 실제로 application/javascript는 더 이상 사용되지 않습니다. 그래서 application/json정말에만 가능합니다 올바른 대답.

브라우저 지원은 또 다른 것입니다.

가장 널리 지원되는 비표준 미디어 유형은 text/json또는 text/javascript입니다. 그러나 일부 큰 이름도 사용 text/plain합니다.

더 이상한 것은 Flickr가 보낸 Content-Type 헤더로 JSON을로 반환합니다 text/xml. Google은 text/javascript일부 아약스 API에 사용합니다.

예 :

curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0&q=jsonexample"

산출: Content-Type: text/javascript

curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=f82254c1491d894f1204d8408f645a93"

산출: Content-Type: text/xml


90

올바른 MIME 유형은 application/json

그러나

브라우저 유형이나 프레임 워크 사용자가 필요한 많은 상황을 경험했습니다.

text/html

application/javascript

10
그러한 상황의 예?
Mark Amery

75

나는 아래를 사용한다

contentType: 'application/json',
data: JSON.stringify(SendData),

66

콘텐츠 유형 헤더 '로 설정해야합니다 응용 프로그램 / JSON '게시물. 요청을 청취하는 서버에는 " Accept = application / json " 이 포함되어야합니다 . Spring MVC에서는 다음과 같이 할 수 있습니다.

@RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json")

응답에 헤더를 추가하십시오.

HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");


59

application/jsonPHP 큰 작품 배열이나 객체 데이터를 저장합니다.

이 코드를 사용하여 공개적으로 볼 수 있도록 설정된 Google Cloud Storage (GCS)의 JSON에 데이터를 넣습니다 .

$context = stream_context_create([
    'gs' => [
        'acl'=>'public-read', 
        'Content-Type' => 'application/json',
    ]
]);

file_put_contents(
    "gs://BUCKETNAME/FILENAME.json", 
    json_encode((object) $array), 
    false, 
    $context
);

데이터를 다시 가져 오려면 간단합니다.

$data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json"));

50

JSON에 패딩이 있으면 application/jsonp입니다. JSON이 패딩이 없으면 application/json입니다.

둘 다 처리하려면 패딩이 있는지 또는 패딩이 없는지 'application / javascript'를 사용하는 것이 좋습니다.


8
답의 첫 부분이 잘못되었습니다. "application / jsonp"는 유효한 MIME 유형이 아닙니다. JSONP의 응답 본문은 JavaScript 일 뿐이므로 JavaScript의 MIME 유형 중 하나를 사용해야합니다.
Rob W


43

REST 컨텍스트에서 JSON을 사용할 때 허용되는 응답 확장 ...

강력한 인수 사용에 대한 application/x-resource+jsonapplication/x-collection+json는 REST 자원과 모음을 나타내는 경우는.

그리고 jsonapi 스펙 을 따르기로 결정한 경우 문서화 된대로 를 사용해야 합니다 application/vnd.api+json.

보편적 인 표준은 없지만, 전송되는 자원에 추가 된 의미 가 단순한 것보다 더 명확한 Content-Type을 정당화한다는 것이 분명 application/json합니다.

이러한 추론에 따라 다른 컨텍스트는보다 구체적인 Content-Type을 정당화 할 수 있습니다.


3
application/vnd.api+json고유 한 기대와 형식을 가진 매우 좁은 사양 인 json : api를 사용하는 apis 용으로 특히 json 을 반환 하는 API 인 것으로 이해하지 못합니다 . 내가 틀렸다면 저를 바로 잡으십시오
Hilikus

42

PHP 개발자는 이것을 사용합니다 :

<?php
    header("Content-type: application/json");

    // Do something here...
?>

39

JSON의 REST API에서 데이터를 가져 와서 content-type을 사용해야하는 경우

For JSON data: Content-Type:application/json
For HTML data: Content-Type:text/html,
For XHTML data: Content-Type:application/xhtml+xml,
For XML data: Content-Type:text/xml, application/xml

28

Content-Type: application/json-json
Content-Type: application/javascript-json-P
Content-Type: application/x-javascript-javascript
Content-Type: text/javascript-javascript 그러나 더 이상 사용되지 않는 이전 IE 버전은 html 속성으로 사용되었습니다.
Content-Type: text/x-javascript-JavaScript 미디어 유형 단종
Content-Type: text/x-json-애플리케이션 / json이 공식적으로 등록되기 전에 json


JSON 텍스트의 경우 : 응용 프로그램 / json으로 콘텐츠 형식 : 응용 프로그램 / JSON
Vikash 차우

28

JSON (JavaScript Object Notation) 및 JSONP ( "JSON with padding") 형식은 매우 유사 해 어떤 MIME 유형을 사용해야하는지 혼동 될 수 있습니다. 형식은 비슷하지만 형식간에 미묘한 차이가 있습니다.

따라서 의심의 여지가있을 때마다 매우 간단한 접근 방식 (대부분의 경우 완벽하게 작동 함), 즉 해당 RFC 문서를 확인하십시오.

JSON RFC 4627 ( JSON (JavaScript Object Notation 용 애플리케이션 / json 미디어 유형))은 JSON 형식의 사양입니다. 6 장에서 JSON 텍스트의 MIME 미디어 유형은

application/json.

JSONP JSONP ( "패딩이있는 JSON")는 브라우저에서 JSON과 다른 방식으로 처리됩니다. JSONP는 일반 JavaScript 스크립트로 취급되므로 JavaScript에 application/javascript,대한 현재 공식 MIME 유형을 사용해야 합니다. 그러나 많은 경우 text/javascriptMIME 형식도 제대로 작동합니다.

참고 text/javascript무용지물로 표시되었습니다 4329 RFC (스크립팅 용지 유형) 문서 및이를 사용에 권장 application/javascript대신 유형입니다. 그러나 레거시 이유로 인해 text/javascript여전히 널리 사용되며 브라우저 간 지원이 있습니다 ( application/javascript특히 MIME 유형, 특히 오래된 브라우저의 경우).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.