ประเภทเนื้อหา JSON ที่ถูกต้องคืออะไร?


10250

ฉันเคยยุ่งกับJSON มาซักพักแล้วก็แค่ผลักมันออกมาเป็นข้อความและมันก็ไม่ได้ทำให้ใครบาดเจ็บ (ที่ฉันรู้) แต่ฉันก็อยากจะทำสิ่งต่าง ๆ ให้ถูกต้อง

ฉันได้เห็นดังนั้นหลายคนอ้างว่า "มาตรฐาน" สำหรับประเภทเนื้อหา JSON นี้:

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

แต่อันไหนที่ถูกต้องหรือดีที่สุด? ฉันรวบรวมว่ามีปัญหาด้านความปลอดภัยและการสนับสนุนเบราว์เซอร์แตกต่างกันไป

ฉันรู้ว่ามีคำถามคล้ายกันประเภท MIME คืออะไรหาก JSON ถูกส่งคืนโดย REST API แต่ฉันต้องการคำตอบที่ตรงเป้าหมายกว่าเล็กน้อย

คำตอบ:


10307

สำหรับข้อความ JSON:

application/json

MIME ชนิดของสื่อสำหรับข้อความ JSON application/jsonคือ การเข้ารหัสเริ่มต้นคือ UTF-8 (ที่มา: RFC 4627 )

สำหรับJSONP (จาวาสคริปต์ที่รันได้ ) ที่มีการโทรกลับ:

application/javascript

นี่คือโพสต์บล็อกบางส่วนที่กล่าวถึงในความคิดเห็นที่เกี่ยวข้อง



ฉันสามารถส่งไฟล์พร้อมข้อความ Json ได้หรือไม่
— OPV

7
บางครั้ง Internet Explorer มีปัญหากับ application / json - บล็อกออฟไลน์
— kudlatiger

6
ลองนึกภาพฉันมีเอกสารที่เขียนโดยใครบางคนที่มีข้อความล้วน ตอนนี้ข้อความธรรมดาก็กลายเป็น JSON ที่ถูกต้องเช่นกัน ฉันจะผิดไหมถ้าใช้ text / plain เป็น mime-type? JSON เป็นข้อความย่อย ดังนั้นฉันคิดว่าทั้งคู่ควรได้รับอนุญาต คำถามคืออะไรที่ใช้งานได้ดีกว่าในการปฏิบัติ ตามความเห็นโดย codetoshare IE มีปัญหากับ application / json แต่เบราว์เซอร์ไม่ควรมีปัญหากับข้อความ / ธรรมดา หากข้อความ / ข้อความธรรมดาไม่ปลอดภัยฉันจะแสดงไฟล์ข้อความจากเว็บไซต์ของฉันได้อย่างไร
— Panu Logic

5
@EugenMihailescu ชื่อของหน้านั้นคือ "รายการประเภท MIME ที่ไม่สมบูรณ์"
— Omegastick

1616

IANAได้จดทะเบียนอย่างเป็นทางการสำหรับประเภท MIME JSON application/jsonเป็น

เมื่อถูกถามเกี่ยวกับสาเหตุที่ไม่ได้text/json, ครอกดูเหมือนว่าจะได้กล่าว JSON ไม่ได้จริงๆ JavaScript มิได้ข้อความและยัง 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" ตัวแก้ไข Hex แสดงแต่ละไบต์เป็นค่าเลขฐานสิบหกของมันตัวอย่างเช่นไบต์ 1111000 เป็น "78" แม้ว่าอาจมีโปรแกรมแก้ไขข้อความซึ่งมีโหมดแก้ไขเลขฐานสิบหกอยู่ด้วย แต่นี่ก็ไม่ได้เป็นเรื่องปกติและไม่เป็นประโยชน์สำหรับสิ่งใดนอกจากผู้ใช้ด้านเทคนิคส่วนใหญ่ที่ทำงานด้านเทคนิคมากที่สุด ข้อความโดยการเปรียบเทียบหมายถึง ASCII หรือ Unicode และในข้อความไบต์ 1111000 หมายถึงxอักขระตัวพิมพ์เล็ก ไม่ใช่ 78. JSON เป็นข้อความในลักษณะเดียวกับ HTML (text / html) มันมีเพียงตัวอักษรข้อความที่อ่านได้มีความหมายที่มีโครงสร้างในพวกเขา
— XP84

11
ฉันมักจะเห็นด้วยกับ Stijn de Witt JSON มีวัตถุประสงค์เพื่อดูและแก้ไขด้วย text-editor
— Panu Logic


632

แน่นอนประเภทสื่อ MIME ที่ถูกต้องสำหรับ JSON คือ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");
    }
});

ในกรณีที่ใช้ชนิดการตอบกลับของแอปพลิเคชัน / 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
การตอบกลับของเซิร์ฟเวอร์จะต้องเป็นข้อความ / 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 แบบคงที่ได้ นอกจากนี้คำตอบที่ upvoted ที่สุดมีลิงก์ไปยัง RFC
— สไตล์

10
ด้วย JSONP สามารถเป็นข้อมูล json ที่กำหนดให้กับ var
— Jimmy Kane

401

หากคุณใช้ Ubuntu หรือ Debian และให้บริการไฟล์. json ผ่าน Apache คุณอาจต้องการแสดงไฟล์ที่มีประเภทเนื้อหาที่ถูกต้อง ฉันทำสิ่งนี้เป็นหลักเพราะฉันต้องการใช้ส่วนขยายของ Firefox JSONView

โมดูล Apache mod_mimeจะช่วยให้ทำสิ่งนี้ได้อย่างง่ายดาย อย่างไรก็ตามด้วย Ubuntu คุณต้องแก้ไขไฟล์/etc/mime.typesและเพิ่มบรรทัด

application/json json

จากนั้นรีสตาร์ท Apache:

sudo service apache2 restart

44
โดยปกติแล้วการโหลดซ้ำก็เพียงพอแล้ว (เร็วกว่าการรีสตาร์ท) นอกจากนี้โปรดทราบว่าขณะนี้คุณสามารถทำ "sudo service apache2 reload" ได้แล้ว
— noamtm

19
Ubuntu 12.04 มีสิ่งนี้ตามค่าเริ่มต้น
— Prizoff

386

หากคุณกำลังเรียกใช้บริการเว็บ ASP.NET จากฝั่งไคลเอนต์คุณต้องใช้application/jsonเพื่อให้การทำงาน ฉันเชื่อว่านี่เป็นสิ่งเดียวกันสำหรับjQueryและกรอบงานExt


20
ดูเหมือนว่า jQuery จะทำงานกับ 'application / json' อย่างน้อยและ 'text / plain' ... ฉันยังไม่ได้ลองเลย
— นาธาน

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 คือapplication/jsonถ้าคุณกำลังใช้JSONPยังเป็นที่รู้จัก JSON กับ padding ที่เป็นจริงเพื่อให้ JavaScript application/javascriptและประเภทของเนื้อหาที่เหมาะสมจะเป็น


296

ไม่ต้องสงสัยเลยว่าapplication/jsonเป็นประเภทMIME ที่ดีที่สุดสำหรับการตอบสนอง JSON

แต่ฉันมีประสบการณ์บางอย่างที่ฉันต้องใช้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

เฉพาะเมื่อใช้application/jsonเป็นชนิด MIMEฉันมีสิ่งต่อไปนี้ (จนถึงเดือนพฤศจิกายน 2011 กับ Chrome เวอร์ชันล่าสุด, Firefox พร้อมFirebug ):

  • ไม่มีคำเตือนจาก Chrome อีกต่อไปเมื่อโหลด JSON จากเซิร์ฟเวอร์
  • Firebug จะเพิ่มแท็บในการตอบกลับซึ่งแสดงข้อมูล JSON ที่จัดรูปแบบคุณ หากประเภท MIME นั้นแตกต่างกันก็จะปรากฏเป็น 'เนื้อหาการตอบสนอง'

244

application/jsonทุกอย่างไม่ทำงานสำหรับชนิดเนื้อหา

หากคุณกำลังใช้ Ext JS<iframe>ส่งแบบฟอร์มการอัปโหลดไฟล์จะต้องทราบว่าการตอบสนองเซิร์ฟเวอร์ถูกแยกวิเคราะห์โดยเบราว์เซอร์ในการสร้างเอกสารสำหรับ

หากเซิร์ฟเวอร์กำลังใช้ JSON เพื่อส่งวัตถุส่งคืนContent-Typeจะต้องตั้งค่าส่วนหัวไว้text/htmlเพื่อบอกให้เบราว์เซอร์แทรกข้อความที่ไม่เปลี่ยนแปลงลงในเนื้อหาเอกสาร

ดูExt JS เอกสาร


40
ควรหลีกเลี่ยงเครื่องมือที่ไม่เป็นไปตามมาตรฐานเมื่อเป็นไปได้ ใช้application/jsonต่อข้อมูลจำเพาะ
— one.beat.consumer

15
@ one.beat.consumer ในขณะที่เป็นจริงมันไม่เฉพาะ ExtJs ต่อ se มันเป็นข้อ จำกัด ของเบราว์เซอร์ (หรืออาจเป็น "มาตรการรักษาความปลอดภัย")
— Hendy Irawan

7
แน่นอนว่าจะเป็นการดีกว่าถ้าใช้ text / plain ดังนั้นจึงไม่ใช้ความหมาย HTML ใด ๆ กับเนื้อหาที่ไม่ใช่ HTML หรือเบราว์เซอร์ไม่อนุญาตให้คุณดึงเนื้อหาของเฟรมหากไม่มี DOM หรือไม่
— ซิงโคร

5
หากต้องการเพิ่มความสับสนต่อ: ฉันแค่การแก้จุดบกพร่องกรณีที่คล้ายกันบน Samsung Galaxy Beam (Android 2.3) กับเบราว์เซอร์เริ่มต้นและiframeดูเหมือนว่าจะเกิดไฟไหม้loadเหตุการณ์สำหรับapplication/javascript, application/x-javascript, text/javascript, text/plainแต่ไม่ยิงมันมิได้application/json text/htmlณ วันนี้ Android <= 2.3 มีส่วนแบ่งการตลาดประมาณ 50% ของ Android
— jakub.g

226

JSON เป็นภาษาเฉพาะโดเมน (DSL) และรูปแบบข้อมูลที่เป็นอิสระของ JavaScript และเป็นเช่นนี้มีของตัวเองไมม์application/jsonชนิด เคารพชนิด MIME เป็นลูกค้าแน่นอนขับเคลื่อนดังนั้นtext/plainอาจจะทำสำหรับการถ่ายโอนของไบต์ แต่แล้วคุณจะได้รับการผลักดันขึ้นตีความไปยังโดเมนการประยุกต์ใช้ผู้ขายไม่จำเป็น application/json- คุณจะถ่ายโอน XML ผ่านทางtext/plain?

แต่ตามจริงแล้วตัวเลือกประเภท MIME ของคุณเป็นคำแนะนำสำหรับลูกค้าเกี่ยวกับวิธีการตีความข้อมูล - text/plainหรือtext/HTML(เมื่อไม่ใช่ HTML) เหมือนกับการลบประเภท - มันไม่แปลกใหม่เหมือนกับการทำให้วัตถุประเภทวัตถุทั้งหมดเป็นภาษาที่พิมพ์

ไม่มีเบราว์เซอร์รันไทม์ที่ฉันรู้ว่าจะใช้เอกสาร JSON และทำให้มันพร้อมใช้งานโดยอัตโนมัติในฐานะที่เป็นออบเจ็กต์ที่สามารถเข้าถึงได้ JavaScript โดยไม่มีการแทรกแซง แต่ถ้าคุณทำงานกับไคลเอนต์ที่พิการนั่นเป็นเรื่องที่แตกต่างอย่างสิ้นเชิง แต่นั่นไม่ใช่เรื่องราวทั้งหมด - บริการ JSON RESTfulมักไม่มี JavaScript runtimes แต่มันไม่ได้หยุดพวกเขาโดยใช้ JSON เป็นรูปแบบการแลกเปลี่ยนข้อมูลที่ทำงานได้ หากลูกค้าเป็นคนพิการ ... ฉันจะพิจารณาการฉีด HTML ผ่านทางบริการอาแจ็กซ์เทมเพลตแทน

แอพลิเคชัน / JSON!


210

หากคุณอยู่ในสภาพแวดล้อมฝั่งไคลเอ็นต์การตรวจสอบการสนับสนุนข้ามเบราว์เซอร์เป็นสิ่งจำเป็นสำหรับเว็บแอปพลิเคชันที่ได้รับการสนับสนุนเป็นอย่างดี

HTTP ขวาชนิดเนื้อหาจะapplication/jsonเป็นคนอื่นที่ไฮไลต์อยู่แล้วด้วย แต่ลูกค้าบางคนไม่ได้จัดการกับมันได้เป็นอย่างดีว่าทำไม jQuery text/htmlแนะนำเริ่มต้น



166

อย่างที่คนอื่น ๆ พูดถึงapplication/jsonนั่นคือคำตอบที่ถูก

แต่สิ่งที่ยังไม่ได้อธิบายก็คือตัวเลือกอื่น ๆ ที่คุณเสนอหมายถึงอะไร

  • application/x-javascript: ประเภท MIME แบบทดลองสำหรับ JavaScript ก่อนapplication/javascriptสร้างมาตรฐาน

  • text/javascript: ล้าสมัยแล้ว คุณควรใช้application/javascriptเมื่อใช้จาวาสคริปต์

  • text/x-javascript: ประเภท MIME แบบทดลองสำหรับสถานการณ์ด้านบน

  • text/x-json: ประเภท MIME ทดลองสำหรับ JSON ก่อนapplication/jsonลงทะเบียนอย่างเป็นทางการ

สรุปเมื่อใดก็ตามที่คุณมีข้อสงสัยเกี่ยวกับประเภทเนื้อหาคุณควรตรวจสอบลิงค์นี้


15
เมื่อใดจึงtext/javascriptล้าสมัย? ฉันยังคงกรอกเอกสาร HTML ด้วย<script type="text/javascript" ...แท็ก
— Oli

7
มันไม่ได้สร้างความแตกต่างให้เบราว์เซอร์จริงๆ มันล้าสมัยเพียงสำหรับมาตรฐาน RFC: rfc-editor.org/rfc/rfc4329.txt
— FCM

16
@Oli คุณสามารถวางได้อย่างปลอดภัยtype="text/javascript"และทำ<script>...</script>อย่างน้อยตาม HTML5
— TCB13

149

ในJSPคุณสามารถใช้สิ่งนี้ในหน้าสั่ง:

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

ที่ถูกต้องMIMEประเภทสื่อ JSON 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 CAML, Perl, PHP, Python, Rebol, Ruby, Scala และ Scheme

คุณจะสังเกตเห็นว่า IANA.org ไม่ได้ระบุประเภทสื่ออื่น ๆ เหล่านี้อันที่จริงแม้ในapplication/javascriptปัจจุบันจะล้าสมัยแล้ว ดังนั้นจึงapplication/jsonเป็นคำตอบที่ถูกต้องเท่านั้นที่เป็นไปได้

การสนับสนุนเบราว์เซอร์เป็นอีกสิ่งหนึ่ง

ได้รับการสนับสนุนอย่างกว้างขวางที่สุดที่ไม่ได้มาตรฐานประเภทสื่อหรือtext/json แต่บางชื่อใหญ่ได้ใช้text/javascripttext/plain

แม้แปลกมากก็คือส่วนหัวของเนื้อหาชนิดที่ส่งมาจาก Flickr, text/xmlที่กลับเป็น 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


90

ประเภท MIME ที่ถูกต้องคือ application/json

แต่

ฉันประสบกับสถานการณ์มากมายที่ประเภทเบราว์เซอร์หรือผู้ใช้เฟรมเวิร์กต้องการ:

text/html

application/javascript

10
ตัวอย่างของสถานการณ์เช่นนี้?
— Mark Amery


66

ชนิดเนื้อหาส่วนหัวควรจะกำหนดให้ ' 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");


59

ใช้application/jsonงานได้ดีใน PHP เพื่อเก็บข้อมูลอาเรย์หรือวัตถุ

ฉันใช้รหัสนี้เพื่อใส่ข้อมูลใน JSON บนGoogle Cloud Storage (GCS)ซึ่งตั้งค่าให้ดูแบบสาธารณะ :

$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 ดังนั้นจึงต้องใช้ MIME ชนิดหนึ่งสำหรับ JavaScript
— Rob W


43

การขยายการตอบกลับที่ยอมรับเมื่อคุณใช้ JSON ในบริบท REST ...

มีข้อโต้แย้งเกี่ยวกับการใช้application/x-resource+jsonและapplication/x-collection+jsonเมื่อคุณแสดงถึงทรัพยากรและคอลเลกชัน REST

และหากคุณตัดสินใจที่จะปฏิบัติตามข้อกำหนดjsonapi คุณควรใช้application/vnd.api+jsonเนื่องจากเป็นเอกสาร

ไม่มีมาตรฐานสากลเป็นที่ชัดเจนว่าความหมายที่เพิ่มเข้ากับทรัพยากรที่ถูกถ่ายโอนจัดชิดขอบประเภทเนื้อหาที่ชัดเจนยิ่งกว่าapplication/jsonมากกว่าเพียงแค่

ต่อไปนี้เหตุผลนี้บริบทอื่น ๆ สามารถปรับขึ้นเฉพาะเนื้อหาชนิด


3
application/vnd.api+jsonดูเหมือนว่าจะเป็นเฉพาะสำหรับ apis โดยใช้json: apiสเปคที่แคบมากพร้อมความคาดหวังและรูปแบบของตัวเองฉันไม่เข้าใจว่าเป็นAPI ใด ๆที่ส่งคืน json โปรดแก้ไขให้ฉันด้วยถ้าฉันผิด
— Hilikus


39

หากคุณได้รับข้อมูลจาก REST API ใน JSON คุณต้องใช้ประเภทเนื้อหา

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: application / json Content-Type: application / json
— Vikash Chauhan

28

รูปแบบ JSON (JavaScript Object Notation) และJSONP ("JSON with padding") ดูเหมือนว่าจะคล้ายกันมากและดังนั้นจึงอาจทำให้เกิดความสับสนอย่างมากว่า MIME ชนิดใดที่ควรใช้ แม้ว่ารูปแบบจะคล้ายกัน แต่ก็มีความแตกต่างเล็กน้อยระหว่างรูปแบบเหล่านี้

ดังนั้นเมื่อใดก็ตามที่มีข้อสงสัยฉันมีวิธีการที่ง่ายมาก (ซึ่งใช้ได้ดีในกรณีส่วนใหญ่) คือไปและตรวจสอบเอกสาร RFC ที่เกี่ยวข้อง

JSON RFC 4627 (ประเภทสื่อของแอปพลิเคชัน / json สำหรับสัญลักษณ์วัตถุ JavaScript (JSON)) เป็นข้อกำหนดของรูปแบบ JSON มันบอกว่าในส่วนที่ 6 ว่าไมม์ชนิดของสื่อสำหรับข้อความ JSON คือ

application/json.

JSONP JSONP ("JSON with padding") ได้รับการจัดการในลักษณะที่แตกต่างจาก JSON ในเบราว์เซอร์ JSONP ถือเป็นสคริปต์ JavaScript ปกติดังนั้นจึงควรใช้application/javascript,ประเภท MIME ปัจจุบันอย่างเป็นทางการสำหรับ JavaScript อย่างไรก็ตามในหลายกรณีtext/javascriptMIME type ก็จะทำงานได้ดีเช่นกัน

โปรดทราบว่าtext/javascriptได้รับการทำเครื่องหมายว่าล้าสมัยโดยเอกสารRFC 4329 (ประเภทสื่อสคริปต์) และแนะนำให้ใช้application/javascriptประเภทแทน อย่างไรก็ตามเนื่องจากเหตุผลดั้งเดิมtext/javascriptยังคงใช้กันอย่างแพร่หลายและมีการสนับสนุนข้ามเบราว์เซอร์ (ซึ่งไม่ใช่กรณีที่มีapplication/javascriptประเภท MIME โดยเฉพาะกับเบราว์เซอร์รุ่นเก่า)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.