나는 얼마 동안 JSON 을 어지럽 혔고, 그냥 텍스트로 푸시하고 누구에게도 해를 끼치 지 않았지만 제대로 작업하기를 원합니다. .
나는so많은 사람들이 JSON 컨텐츠 유형에 대해 "표준"이라고 주장한 것을 보았다.
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
그러나 어느 것이 정확하거나 가장 좋습니까? 나는 그들 사이에 다양한 보안 및 브라우저 지원 문제가 있다는 것을 모았습니다.
유사한 질문이 있다는 것을 알고 있습니다.JSON이 REST API에 의해 반환되는 경우 어떤 MIME 유형이 필요합니까?대답.
IANAIANA 는 JSON의 공식 MIME 유형을application/json
로 등록했습니다.
왜 text/json
가 아닌지에 대한 질문에 Crockford는 JSON이 실제로 JavaScript도 텍스트도 아니며 IANA가 application/*
보다 text/*
를 전달할 가능성이 더 많다고 말한 것 같습니다.
기타 리소스 :
물론 JSON의 올바른 MIME 미디어 유형은 application/json
이지만 응용 프로그램에서 예상되는 데이터 유형을 알아야합니다.
예를 들어, Ext GWT 를 사용하고 서버 응답은 text/html 로 이동해야하지만 JSON 데이터를 포함해야합니다.
클라이언트 쪽, 외부 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);
}
};
응답은 URL에서 전달 된 쿼리 매개 변수에 따라 동적으로 생성 된 데이터입니다.
예:
{ "Name": "Foo", "Id": 1234, "Rank": 7 }
Content-Type : application/json
패딩이있는 JSON 응답은 JSON 데이터이며, 함수 호출은이를 둘러 쌉니다.
예:
functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
Content-Type : application/javascript
JSON에 적합한 콘텐츠 유형은 application/json
Padding과 관련된 JSON이라고도하는 JSONP 를 사용하는 경우가 아니라면 실제로 JavaScript이며 올바른 콘텐츠 유형은 application/javascript
입니다.
application/json
가 JSON 응답을위한 가장 좋은 MIME type이라는 것은 의심의 여지가 없습니다.
하지만 압축 문제로 인해 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 configurations를 변경할 수 없기 때문입니다.
콘텐츠 유형 application/json
에 대해 모든 것이 작동하지 않습니다.
Ext JS form을 사용하여 업로드 파일을 제출하는 경우 서버 응답이 브라우저에 의해 구문 분석되어 <iframe>
에 대한 문서를 작성한다는 점에 유의하십시오.
서버가 JSON을 사용하여 반환 객체를 보내는 경우 Content-Type
헤더를 text/html
로 설정하여 문서 본문에 텍스트를 변경하지 않고 삽입하도록 브라우저에 지시해야합니다.
Ext JS 3.4.0 API 문서 를 참조하십시오.
JSON은 도메인 특정 언어 (DSL)이며 JavaScript와 독립적 인 데이터 형식이므로 자체 MIME 유형, application/json
이 있습니다. MIME 유형에 대한 존중은 물론 클라이언트 중심이므로 text/plain
는 바이트 전송을 위해 할 수 있지만, 공급 업체 응용 프로그램 도메인에 대한 해석을 불필요하게 진행할 것입니다-application/json
. text/plain
를 통해 XML을 전송 하시겠습니까?
그러나 솔직히 MIME 유형의 선택은 고객에게 데이터를 해석하는 방법에 대한 조언입니다. text/plain
또는 text/HTML
(HTML이 아닌 경우)는 유형 삭제와 비슷합니다. 유형이 지정된 언어의 Object 유형의 오브젝트.
내가 아는 브라우저 런타임은 JSON 문서를 가져 와서 개입하지 않고도 JavaScript 액세스 가능한 객체로 런타임에 자동으로 사용할 수있게하지만, 절름발이 클라이언트와 작업하는 경우 완전히 다른 문제입니다. 그러나 이것이 전체 이야기가 아닙니다. RESTful JSON 서비스에는 종종 JavaScript 런타임이 없지만 JSON을 실행 가능한 데이터 교환 형식으로 사용하여 중지하지는 않습니다. 클라이언트가 그렇게 무섭다면 ... Ajax 템플릿 서비스를 통한 HTML 삽입을 고려할 것입니다.
신청/제이슨!
클라이언트 측 환경에있는 경우 잘 지원되는 웹 응용 프로그램의 경우 브라우저 간 지원에 대한 조사가 필수적입니다.
다른 HTTP Content-Type은 application/json
가 될 것입니다. 다른 클라이언트는 이미 강조 표시되어 있지만 일부 클라이언트는이를 제대로 처리하지 못하기 때문에 jQuery가 기본 text/html
을 권장합니다.
정답은 다음과 같습니다.
Content-Type: application/json
다른 많은 사람들이 언급했듯이 application/json
는 정답입니다.
그러나 아직 설명되지 않은 것은 당신이 제안한 다른 옵션들이 의미하는 바입니다.
application/x-javascript
: application/javascript
가 표준화되기 전에 실험용 MIME 형식의 JavaScript 용입니다.
text/javascript
: 이제 폐기되었습니다. 자바 스크립트를 사용할 때는 application/javascript
를 사용해야합니다.
text/x-javascript
: 위의 상황에 대한 실험적인 MIME 형식입니다.
text/x-json
: application/json
가 공식적으로 등록되기 전에 JSON에 대한 실험용 MIME 유형입니다.
대체로 콘텐츠 유형에 대해 의문이 생길 때마다 이 링크 를 확인해야합니다.
"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())
}
}
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
는 실제로 correct 가능한 유일한 답입니다.
브라우저 지원은 또 다른 문제입니다.
가장 널리 지원되는 비표준 미디어 유형은 text/json
또는 text/javascript
입니다. 그러나 일부 큰 이름은 text/plain
를 사용합니다.
JSON을 text/xml
로 반환하는 Flickr에서 보낸 Content-Type 헤더가 더 이상합니다. Google은 일부 Ajax API에 text/javascript
를 사용합니다.
예 :
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
올바른 MIME 유형은application/json
BUT
브라우저 유형이나 프레임 워크 사용자가 필요한 많은 상황을 경험했습니다.
text/html
application/javascript
나는 아래를 사용한다.
contentType: 'application/json',
data: JSON.stringify(SendData),
게시 할 때 Content-Type 머리글은 ' application/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");
Spring 에는 정의 된 유형이 있습니다. MediaType.APPLICATION_JSON_VALUE
는 application/json 과 같습니다.
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의 경우 다음을 사용하고 있습니다.
Content-Type: application/json
이것은 IETF의 JSON 데이터 교환 형식 7158 제안, 섹션 1.2 : JSON 사양 에서 설명합니다.
JSON에 패딩이 있으면 application/jsonp
가됩니다. JSON에 패딩이 없으면 application/json
가됩니다.
두 가지 모두를 다루기 위해서는 'application/javascript'를 패딩과 함께 사용하든 패딩없이 사용하든 관계없이 사용하는 것이 좋습니다.
REST 컨텍스트에서 JSON을 사용할 때 허용되는 응답 확장 ...
REST 리소스 및 모음을 나타낼 때 application/x-resource+json
및 application/x-collection+json
사용에 관한 strong argument 가 있습니다.
그리고 만약 당신이 jsonapi 스펙을 따르기로 결정했다면, 당신은application/vnd.api+json
의 사용법이 문서화되어 있습니다.
보편적 인 표준은 없지만, 전송되는 자원에 추가 된 의미가 application/json
보다 더 명백한 Content-Type 을 정당화한다는 것이 분명합니다.
이러한 추론에 따라 다른 컨텍스트는보다 구체적인 Content-Type 을 정당화 할 수 있습니다.
PHP 개발자는 다음을 사용합니다.
<?php
header("Content-type: application/json");
// Do something here...
?>
JSON에서 REST API의 데이터를 가져와 콘텐츠 유형을 사용해야하는 경우
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
JSON (JavaScript Object Notation) 및 JSONP ( "JSON with padding") 형식은 매우 유사하므로 어떤 MIME 유형을 사용해야하는지 매우 혼란 스러울 수 있습니다 사용. 형식이 비슷하지만 두 형식 간에는 약간의 차이가 있습니다.
그래서 언제든지 의문의 여지가, 나는 아주 간단한 접근 방식 (대부분의 경우 완벽하게 작동), 즉 해당 RFC 문서를 확인하십시오.
JSON _ RFC 4627 (JavaScript Object Notation (JSON) 용 application/json Media Type)은 JSON 형식 사양입니다. 6 절에서 JSON 텍스트의 MIME 미디어 유형이
application/json.
JSONP JSONP ( "패딩이있는 JSON")은 브라우저에서 JSON과 다른 방식으로 처리됩니다. JSONP는 일반 JavaScript 스크립트로 취급되므로 JavaScript의 현재 공식 MIME 유형을 application/javascript,
사용해야합니다. 그러나 대부분의 경우 text/javascript
MIME 형식도 제대로 작동합니다.
text/javascript
는 RFC 4329 (스크립팅 미디어 유형) 문서에 의해 폐기 된 것으로 표시되었으므로 application/javascript
유형을 대신 사용하는 것이 좋습니다. 그러나 기존의 이유로 인해 text/javascript
는 여전히 널리 사용되고 있으며 크로스 브라우저를 지원합니다 (예 : application/javascript
MIME 유형, 특히 구형 브라우저의 경우는 그렇지 않습니다).
Content-Type: application/json
- jsonContent-Type: application/javascript
- json-PContent-Type: application/x-javascript
- 자바 스크립트Content-Type: text/javascript
- javascript하지만 html 속성으로 사용되는 구식 버전IE 버전.Content-Type: text/x-javascript
- JavaScript 미디어 유형은 사용되지 않습니다.Content-Type: text/x-json
- json 전에 application/json이 공식적으로 등록되었습니다.
흥미로운 JSON 결과를 지정하려면 아래와 같이 요청 헤더에 "application/json"을 추가하십시오.
"Accept : application/json"은 원하는 응답 형식입니다.
"Content-Type : application/json"은 요청의 콘텐츠 형식을 지정하지만 application/json
및 application/xml
를 모두 지정하는 경우도 있지만 품질이 다를 수 있습니다. 어떤 서버가 다른 응답 형식을 다시 보내겠습니까? 예제를보십시오.
Accept:application/json;q=0.4,application/xml;q=8
XML은 더 높은 품질을 가지므로 XML을 반환합니다.
적절한 현재 표준은 application/json
입니다. 기본 인코딩은 UTF-8이지만 UTF-16 또는 UTF-32가 될 수도 있습니다. JSON이 UTF-16 또는 UTF-32로 작성되면 이진 content-transfer-encoding을 사용해야합니다.
Json에 대한 자세한 정보는 여기에 있습니다 : https://tools.ietf.org/html/rfc4627
이진 전송 인코딩에 대한 자세한 내용은 다음을 참조하십시오. https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html
나머지 답변을 보완하기 위해 JSON 링크 된 데이터 (JSON-LD) W3C에 따라 의 MIME 유형은 다음과 같습니다.
application/ld+json
유형 이름 : application
하위 유형 이름 : ld + json
또한 동일한 출처에서 :
파일 확장자 :
.jsonld
많은 콘텐츠 유형 가 있더라도 항상이 세 가지 콘텐츠 형식을 기억해보십시오. 더 자주 사용해야 할 수도 있습니다.