종류 - 올바른 JSON 콘텐츠 유형은 무엇입니까?




response json in servlet (20)

application/json 은 배열이나 객체 데이터를 저장하기 위해 PHP에서 훌륭하게 작동합니다.

이 코드를 사용하여 공개적으로 볼 수 있는 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"));

나는 JSON 을 오랫동안 사용하지 않고 그냥 텍스트로 푸시하고 다른 사람에게 해를 끼치 지 않았지만 (제대로 알고있는), 제대로 작업하기를 원합니다.

필자는 JSON 콘텐츠 유형에 대해 "표준"이라고 생각하는 것을 많이 보았습니다.

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

그러나 그것은 정확하거나 최상입니까? 나는 그들 사이에 다양한 보안 및 브라우저 지원 문제가 있다는 것을 모았습니다.

비슷한 질문이 있는데, JSON이 REST API에 의해 반환되는 경우 MIME 유형은 무엇입니까? , 좀 더 타겟 된 답변을 원합니다.


JSON :

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

예:

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

콘텐츠 형식 : application/json

JSON-P :

패딩이있는 JSON 응답은 JSON 데이터이며, 함수 호출은이를 둘러 쌉니다.

예:

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

콘텐츠 유형 : application/javascript


JSON 텍스트의 경우 :

application/json

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

JSONP (runnable javascript) 콜백 포함 :

application/javascript

관련성있는 의견에 언급 된 블로그 게시물이 있습니다.


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

두 가지 모두를 다루기 위해서는, 'application / javascript'를 패딩과 함께 사용하든 패딩없이 사용하든 관계없이 사용하는 것이 좋습니다.


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

하지만 정직하게 말하면, MIME 형식을 선택하는 것은 데이터 text/plain 또는 text/HTML ( text/HTML 이 아닌 경우)을 유형 삭제와 같은 방식으로 해석하는 방법에 대한 클라이언트의 조언입니다. Object 유형의 모든 객체를 만드는 것만 큼 유익하지 않습니다. 입력 된 언어로.

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

응용 프로그램 / JSON!


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

REST 리소스 및 컬렉션을 나타낼 때 application/x-resource+jsonapplication/x-collection+json 사용하는 것에 대한 강력한 논쟁 이 있습니다.

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

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

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


PHP 개발자는 다음을 사용합니다.

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

    // Do something here...
?>

Ubuntu 또는 Debian을 사용하고 있고 Apache를 통해 .json 파일을 제공하는 경우 파일을 올바른 내용 유형으로 제공 할 수 있습니다. 주로 파이어 폭스 확장 JSONView 를 사용하기 때문에이 작업을 수행하고 있습니다.

Apache 모듈 mod_mime 을 사용하면 쉽게이 작업을 수행 할 수 있습니다. 그러나 Ubuntu에서는 /etc/mime.types 파일을 편집하고 줄을 추가해야합니다.

application/json json

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

sudo service apache2 restart

나는 아래를 사용한다.

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

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

그러나 아직 설명되지 않은 것은 당신이 제안한 다른 옵션들이 의미하는 바입니다.

  • application/x-javascript : application/javascript 가 표준화되기 전에 JavaScript에 대한 실험용 MIME 유형.

  • text/javascript : 이제 폐기되었습니다. application/javascript 사용할 때는 application/javascript 사용해야 application/javascript .

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

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

전체적으로 콘텐츠 유형에 대해 의문이 생길 때마다이 링크를 확인해야 합니다.


물론 JSON의 올바른 MIME 미디어 유형은 application/json 이지만 응용 프로그램에서 예상되는 데이터 유형을 알아야합니다.

예를 들어 Ext GWT를 사용하고 서버 응답은 text / 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);
    }
};

올바른 MIME 유형은 application/json

그러나

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

text/html

application/javascript

클라이언트 측 환경에있는 경우 잘 지원되는 웹 응용 프로그램의 경우 브라우저 간 지원에 대한 조사가 필수적입니다.

다른 HTTP Content-Type은 application/json 이 될 것입니다. 다른 클라이언트는 이미 강조 표시되어 있지만 일부 클라이언트는이를 잘 처리하지 못하기 때문에 jQuery가 기본 text/html 권장합니다.


클라이언트 측에서 ASP.NET 웹 서비스를 호출하려면 application/json 을 사용해야 application/json . 나는 이것이 jQueryExt 프레임 워크에서 동일하다고 생각한다.


JSP 에서는 페이지 지시어에 다음을 사용할 수 있습니다.

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

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


MIME 유형으로 application/json 을 사용할 때만 (2011 년 11 월 최신 버전의 Chrome, Firebug 와 Firefox) 다음과 같은 사항이 있습니다.

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

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

text/json 아닌지에 대한 질문을 받았을 때, Crockford는 JSON이 실제로 JavaScript도 텍스트도 아니며 IANA가 text/* 보다 application/* 을 전달할 가능성이 더 높다고 말한 것 같습니다.

기타 리소스 :


application/json 대한 IANA 등록

이 미디어 유형을 사용하는 응용 프로그램 : 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 사용하기도 text/plain .

더 이상한 것은 JSON을 text/xml 로 반환하는 Flickr에 의해 보내진 Content-Type 헤더입니다. Google은 text/javascript 중 일부는 ajax apis를 사용합니다.

예 :

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


Content-type: application/json - json
Content-Type: application/javascript - json-P
Content-type: application/x-javascript - javascript
Content-type: text/javascript - javascript 그러나 HTML 속성으로 사용되는 이전 IE 버전.
Content-type: text/x-javascript - 자바 스크립트 미디어 유형
Content-type: text/x-json - json 이전에 application / json이 공식적으로 등록되었습니다.


application/json 이 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 구성을 변경할 수 없기 때문입니다.





content-type