text / javascript 대신 JavaScript MIME 유형 application / javascript를 언제 사용해야합니까?


157

IE 에서 작동하지 않는 질문 jQuery 코드를 기반으로 ,text/javascript Internet Explorer에서 이해할 수 있도록 HTML 문서에 사용됩니다.

그러나 나는 언제 사용할 것이며 application/javascript, 더 중요한 것은 왜 대신 대신 사용할 것 text/javascript입니까?


가능한 속임수 / 설명 : stackoverflow.com/questions/876561/…
— Benn



답변:


243

이론적으로,에 따라 RFC 4329 , application/javascript.

예상되는 이유 application는 형식을 읽을 수 있는지 또는 실행할 수 있는지와 관련이 없기 때문 입니다. 일반적인 charset매개 변수가 아닌 언어 / 유형 자체에 의해 정의 된 사용자 지정 문자 집합 결정 메커니즘이 있기 때문 입니다. 하위 유형text 프록시에서 다른 문자 으로 코드 변환하여 문자 매개 변수를 변경할 수 있어야합니다. 다음과 같은 이유로 JavaScript에는 해당되지 않습니다.

ㅏ. RFC는 사용자 에이전트가 스크립트에서 BOM 스니핑을 수행하여 유형을 결정해야한다고 말합니다 (브라우저가 실제로이 작업을 수행하는지 확실하지 않습니다).

비. 브라우저는 다른 정보 (페이지 인코딩 및 일부 브라우저에서script charset 속성 포함)를 사용하여 문자 집합을 결정합니다. 따라서 리소스를 트랜스 코딩하려고 시도한 프록시는 사용자를 중단시킵니다. (물론 어쨌든 아무도 트랜스 코딩 프록시를 사용하지 않습니다. 그러나 그 의도였습니다.)

따라서 파일의 정확한 바이트는 정확하게 보존되어야하므로 application기술적으로 문자 기반이 아닌 이진 유형이 text됩니다.

같은 이유로 application/xml공식적으로 선호됩니다 text/xml. XML에는 자체 대역 내 문자 집합 신호 메커니즘이 있습니다. 그리고 모든 사람들은 applicationXML도 무시합니다 .

text/javascript및 text/xml공식 똑바로 살아라되지 않을 수도 있습니다,하지만이 모두가 호환성을 위해 오늘을 사용하는 것, 그리고 그들이 옳은 일을하지 않은 이유는 실질적으로 완전히 중요하지 않은 말할 수 있습니다.


4
가장 "호환성"솔루션은 응답에 컨텐츠 유형을 전혀 포함하지 않는 것입니다. RFC에 따르면 명시적인 컨텐츠 유형이 없으면 수신자는 "컨텍스트에 따라" 해석 할 수 있으며 이는 첫 번째 브라우저에서 모든 브라우저에 대해 항상 올바른 동작입니다.
— Pacerier

와 application/javascript호환 모드에서 실행중인 IE에 주의하십시오 IE=8. 인라인 스크립트가 제대로 평가되지 않은 것 같습니다. text/javascript거기서 잘 작동합니다.
— Joscha

2
@Pacerier-이 의견이 5 살이라는 것을 알고 있지만 오늘날 보안상의 이유로 특히 포럼 유형 웹 사이트의 경우 MIME 유형을 포함하는 것이 가장 좋습니다. 수신자가 유형을 해석하게하면 악성 자바 스크립트 파일을 이미지로 업로드 한 다음 브라우저가 해당 스크립트를 해석하고 실행하게하여 공격 할 수 있습니다. 서버가 모든 응답에 대해 MIME 유형을 리턴 X-Content-Type-Options: nosniff하도록하고 브라우저가 유형을 해석하지 못하도록 헤더 를 사용하는 것이 좋습니다 .
— sammy_winter

@sammy_winter 나는 이런 경고를 어디에서나 볼 수 있으며 매번 울고 있습니다. 사용자가 콘텐츠를 업로드 할 수 있도록 허용 한 경우 "아, 그래, PNG 파일의 이름 일치 정규식, 믿을 수있다"보다 더 많은 유효성 검사를 수행했을 것입니다. 잘못된 헤더가 "보안 문제"가되면 문제가 더 심화 될 수 있습니다. 그렇지 않습니까? 이것은 숨기기 Server: nginx또는 nginx가 보내는 것과 동일 합니다. 마치 구멍을 찾을 수있는 사람이 어떤 서버를 실행하는지 알기 위해 명시적인 헤더가 필요
— 하듯이

17

Javascript의 MIME 유형의 문제점은 몇 년 동안 표준이 없었기 때문입니다. 이제 공식 MIME 유형으로 application / javascript 가 있습니다.

그러나 실제로 브라우저가 유형 자체를 결정할 수 있기 때문에 MIME 유형은 전혀 중요하지 않습니다. 그렇기 때문에 HTML5 사양 type="text/javascript"에 더 이상 필요하지 않다고 명시되어 있습니다.


5

application왜냐하면- .js파일은 사용자가 읽고 싶은 것이 아니라 실행되어야하기 때문입니다.


그것은 공식적인 대답이지만 IE는 그것에 질식합니다.
— Benn

20
@Benn : IE 사용자가 제대로 실행되지 않아 모든 JS 파일을 읽어야하기 때문에 어쩌면? 적어도 마이크로 소프트는 정직합니다.)
— thejh

귀하의 의견을 사랑하지만 불행히도 자바 스크립트를 읽을 수없는 사람들은 여전히 ​​IE를 사용하므로 이에 대처해야합니다 :(.
— Mark Baijens

1
나는 당신이 그것을 읽고 싶은지 아닌지는 이유와 관련이 있다고 생각하지 않습니다. 데이터가 어떻게 트랜스 코딩되는지 또는 가능한지의 여부와 관련이 있습니다.
— Zenexer

기술적으로 HTML과 CSS는 코드의 결과를 시각적 컨텐츠로 생성하기 위해 브라우저에서 "실행"(구문 분석)하며 사용자가 코드를 "읽기"위한 것이 아니므로이 대답은 의미가 없습니다. "텍스트"와 "응용 프로그램"이 무엇인지에 대해 큰 혼란이있는 것 같습니다. 나는이 문제에 투표를 할 수 있다면, 나는 IETF가 아니라 "텍스트"내용을 고려해야한다라고 말하고 싶지만 text, 그리고 binary중 하나와 같은 application등 -OR은 "이미지"와 같이 말했다 유형의 "목적"또는 "문서"

1

application / javascript는 올바른 유형이지만 IE6-8에서는 지원되지 않으므로 text / javascript가 붙어 있습니다. 유효성에 신경 쓰지 않으면 (HTML5 제외) 유형을 지정하지 마십시오.


이거 어디서 났어? 지원되는 것이 확실합니다. 또는 적어도 무시됩니다.
— Zenexer 2016 년

@Zenexer 는 다른 질문에 대한 답변을 읽었 습니다 . 겉으로보기에 IE 호환성은 아니오를 의미 application/javascript합니다.
— Camilo Martin

@CamiloMartin IE에서 항상 6까지 사용합니다. 그들은 기본적으로 JavaScript를 사용합니다.
— Zenexer

@Zenexer Hm, 이상하다. 다른 Q & A에서 어떤 문제가 있었는지 궁금합니다.
— Camilo Martin

@ Zenexer이 문제 를 해결 한 지 오래되었지만 IE6-8과 관련된 문제 를 일으키는 다른 계정이 있습니다 . 왜 이것이 중요한지 아닌지 확실하지는 않지만 내 경험상 문제가 발생했습니다.
— Radu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.