সঠিক JSON কন্টেন্ট টাইপ কি?




content-type (20)

আমি কিছুক্ষণের জন্য JSON সাথে ঘিরে JSON , শুধু পাঠ্য হিসাবে এটি চাপিয়ে দিচ্ছি এবং এটি যে কেউ (যা আমি জানি) কে আঘাত করে না, তবে আমি সঠিকভাবে কাজ শুরু করতে চাই।

আমি JSON সামগ্রীর প্রকারের জন্য অনেকগুলি প্রত্যয়িত "মানক" দেখেছি:

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

কিন্তু যা সঠিক, বা ভাল? আমি তাদের মধ্যে পরিবর্তিত নিরাপত্তা এবং ব্রাউজার সমর্থন সমস্যা আছে যে জড়ো করা।

আমি জানি একটি অনুরূপ প্রশ্ন আছে, JSON কোনও REST API দ্বারা ফেরত পাঠানো হলে MIME টাইপ কি? , কিন্তু আমি একটি সামান্য আরো লক্ষ্যবস্তু উত্তর চাই।

https://code.i-harness.com


application/json একটি অ্যারে বা বস্তু তথ্য সংরক্ষণ করতে পিএইচপি মহান কাজ করে।

আমি এই কোডটি Google ক্লাউড স্টোরেজ (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:

প্রতিক্রিয়া ইউআরএল পাস কোয়েরি পরামিতি অনুযায়ী, গতিশীলভাবে উত্পন্ন তথ্য।

উদাহরণ:

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

বিষয়বস্তু-প্রকার: application/json

তাদেরকে JSON-পি:

প্যাডিং সঙ্গে JSON। প্রতিক্রিয়া JSON তথ্য, এটি প্রায় আবৃত একটি ফাংশন কল সঙ্গে।

উদাহরণ:

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

বিষয়বস্তু-প্রকার: application/javascript


JSON একটি ডোমেন-নির্দিষ্ট ভাষা (ডিএসএল) এবং জাভাস্ক্রিপ্ট থেকে স্বাধীন একটি ডেটা ফরম্যাট এবং এটির নিজস্ব MIME টাইপ, application/json । MIME প্রকারের জন্য অবশ্যই অবশ্যই ক্লায়েন্ট চালিত, সুতরাং বাইট স্থানান্তর করার জন্য text/plain করতে পারে, তবে আপনি application/json বিক্রেতার অ্যাপ্লিকেশন ডোমেনটির ব্যাখ্যাটিকে ধাক্কা দিবেন - application/json । আপনি text/plain মাধ্যমে এক্সএমএল স্থানান্তরিত হবে?

কিন্তু সৎভাবে, MIME টাইপের আপনার পছন্দের ক্লায়েন্টকে তথ্য- text/plain বা text/HTML (যখন এটি HTML না হয়) কীভাবে ব্যাখ্যা করা যায় তার পরামর্শ দেওয়া হয়- এটি আপনার সমস্ত বস্তুর অবজেক্ট তৈরি করার মতো অবজ্ঞাপূর্ণ একটি টাইপ ভাষা।

কোনও ব্রাউজার রানটাইম আমি জানি না একটি JSON নথি গ্রহণ করবে এবং এটি স্বয়ংক্রিয়ভাবে রানআউটের জন্য একটি জাভাস্ক্রিপ্ট অ্যাক্সেসেশান হিসাবে অ্যাক্সেসযোগ্য অ্যাক্সেস হিসাবে উপলব্ধ করবে, কিন্তু যদি আপনি একটি ক্লিপ ক্লায়েন্টের সাথে কাজ করছেন তবে এটি সম্পূর্ণ ভিন্ন ব্যাপার। কিন্তু এটি সম্পূর্ণ গল্প RESTful পূর্ববর্তী JSON পরিষেবাদিতে প্রায়শই জাভাস্ক্রিপ্ট রানটাইম থাকে না, তবে এটি একটি কার্যকর তথ্য বিনিময় বিন্যাস হিসাবে JSON ব্যবহার করে তাদের থামাতে পারে না। যদি ক্লায়েন্টরা অক্ষম হয় ... তবে আমি পরিবর্তে একটি Ajax টেম্পলেটিং পরিষেবা এর মাধ্যমে এইচটিএমএল ইনজেকশন বিবেচনা করব।

অ্যাপ্লিকেশান / তাদেরকে JSON!


JSON এর জন্য আমি ব্যবহার করছি:

 Content-Type: application/json

এটি আইইটিএফ এর JSON ডেটা ইন্টারচেঞ্জ ফরম্যাট 7158 প্রস্তাব, বিভাগ 1.2: JSON এর বিশেষ উল্লেখগুলিতে বর্ণিত।


JSON পাঠ্যের জন্য:

application/json

JSON টেক্সটের জন্য MIME মিডিয়া টাইপ application/json । ডিফল্ট এনকোডিংটি ইউটিএফ -8। (উত্স: আরএফসি 4627 )।

JSONP ( JSONP জাভাস্ক্রিপ্ট) জন্য:

application/javascript

এখানে এমন কিছু ব্লগ পোস্ট রয়েছে যা মন্তব্যগুলিতে উল্লেখ করা হয়েছে।


অবশ্যই, JSON এর জন্য সঠিক MIME মিডিয়া টাইপটি হল application/json , তবে আপনার অ্যাপ্লিকেশানে কোন ধরনের ডেটা প্রত্যাশিত হবে তা বুঝতে হবে।

উদাহরণস্বরূপ, আমি Ext GWT ব্যবহার করি এবং সার্ভার প্রতিক্রিয়াটি পাঠ্য / এইচটিএমএল হিসাবে যেতে হবে তবে 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");
    }
});

অ্যাপ্লিকেশন / জসন প্রতিক্রিয়া টাইপ ব্যবহার করার ক্ষেত্রে, ব্রাউজার ফাইলটি সংরক্ষণ করার পরামর্শ দেয়।

স্প্রিং 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);
    }
};

আপনি যদি ক্লায়েন্ট-পার্শ্ব থেকে ASP.NET ওয়েব পরিষেবাদি কল করে থাকেন তবে আপনাকে এটির জন্য কাজ করার জন্য application/json ব্যবহার করতে হবে। আমি এই jQuery এবং Ext ফ্রেমওয়ার্কের জন্য একই বিশ্বাস করি।


আপনি যদি ক্লায়েন্ট-পার্শ্ব পরিবেশে থাকেন তবে ক্রস-ব্রাউজার সমর্থন সম্পর্কে তদন্ত করা একটি ভাল সমর্থিত ওয়েব অ্যাপ্লিকেশনের জন্য বাধ্যতামূলক।

সঠিক এইচটিএমএল সামগ্রী-টাইপ application/json , যেমনটি অন্যদের ইতিমধ্যে হাইলাইট করা হয়েছে, কিন্তু কিছু ক্লায়েন্ট এটি খুব ভালভাবে পরিচালনা করে না, তাই jQuery ডিফল্ট text/html সুপারিশ করে।


কোন 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 পৃষ্ঠাগুলি জি-জিপ দিয়ে সংকুচিত হয়েছিল তবে JSON প্রতিক্রিয়াগুলি ছিল না। আমি যোগ করলাম

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

স্ট্যাটিক এবং গতিশীল ধরনের বিভাগে। কিন্তু এই সব JSON প্রতিক্রিয়া সংকুচিত না।

তারপরে আমি এই নতুন যোগ করা টাইপ মুছে ফেলা এবং যোগ

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

উভয় স্ট্যাটিক এবং গতিশীল ধরনের বিভাগে, এবং প্রতিক্রিয়া টাইপ পরিবর্তন

.ashx (অ্যাসিঙ্ক্রোনাস হ্যান্ডলার) থেকে

application/x-javascript

এবং এখন আমি দেখেছি যে আমার JSON প্রতিক্রিয়া জি-জিপ দিয়ে সংকুচিত হয়েছে। তাই আমি ব্যক্তিগতভাবে ব্যবহার করার সুপারিশ

application/x-javascript

শুধুমাত্র আপনি ভাগ করা হোস্টিং পরিবেশে আপনার JSON প্রতিক্রিয়া কম্প্রেস করতে চান। কারণ ভাগ হোস্টিং, তারা আপনাকে IIS কনফিগারেশন পরিবর্তন করার অনুমতি দেয় না।


গৃহীত প্রতিক্রিয়াগুলি সম্প্রসারিত করা, যখন আপনি একটি REST প্রসঙ্গে JSON ব্যবহার করছেন ...

যখন আপনি REST সংস্থান এবং সংগ্রহগুলি প্রতিনিধিত্ব করছেন তখন application/x-resource+json এবং application/x-collection+json ব্যবহার সম্পর্কে দৃঢ় যুক্তি রয়েছে।

এবং যদি আপনি jsonapi স্পেসিফিকেশন অনুসরণ করার সিদ্ধান্ত নেন, তবে এটি নথিভুক্ত হওয়া application/vnd.api+json ব্যবহার করা উচিত

সর্বোপরি একটি সার্বজনীন মান নেই, এটি স্পষ্ট যে স্থানান্তরিত application/json কেবলমাত্র application/json -এর চেয়ে আরও স্পষ্ট বিষয়বস্তু- application/json ন্যায্য application/json

এই যুক্তি অনুসরণ করে, অন্যান্য প্রসঙ্গগুলি আরো নির্দিষ্ট সামগ্রী- প্রকারকে ন্যায্যতা দিতে পারে।


পিএইচপি ডেভেলপার এই ব্যবহার:

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

    // Do something here...
?>

পোস্ট করার সময় বিষয়বস্তু-ধরন শিরোনাম ' অ্যাপ্লিকেশন / জসন ' সেট করা উচিত। অনুরোধের জন্য সার্ভার শোনাতে হবে " স্বীকার করুন = অ্যাপ্লিকেশন / জেসন "। বসন্ত এমভিসি আপনি এটি ভালো করতে পারেন:

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

প্রতিক্রিয়া শিরোনাম যোগ করুন:

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

যদি আপনি 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

যেমন অনেকে উল্লেখ করেছেন, application/json সঠিক উত্তর।

কিন্তু এখনো ব্যাখ্যা করা হয় নি আপনি অন্য প্রস্তাব বিকল্প কি।

  • application/x-javascript : application/javascript স্ট্যান্ডার্ড আগে জাভাস্ক্রিপ্ট জন্য পরীক্ষামূলক MIME টাইপ।

  • text/javascript : এখন অপ্রচলিত। application/javascript ব্যবহার করার সময় আপনি application/javascript ব্যবহার করা উচিত।

  • text/x-javascript : উপরের পরিস্থিতি জন্য পরীক্ষামূলক MIME টাইপ।

  • text/x-json : application/json আনুষ্ঠানিকভাবে নিবন্ধিত আগে JSON জন্য পরীক্ষামূলক MIME টাইপ।

সর্বোপরি, যখনই আপনার সামগ্রী ধরনের সম্পর্কে কোন সন্দেহ থাকে, তখন আপনাকে এই লিঙ্কটি পরীক্ষা করা উচিত


সবকিছু কন্টেন্ট টাইপ application/json জন্য কাজ করে না।

যদি আপনি Ext JS ফর্ম ব্যবহার করেন তবে ফাইল আপলোড করার জন্য জমা দিন, সচেতন থাকুন যে <iframe> জন্য দস্তাবেজ তৈরির জন্য সার্ভার প্রতিক্রিয়াটি ব্রাউজার দ্বারা পার্স করা হয়েছে।

সার্ভার যদি রিটার্ন অবজেক্ট পাঠানোর জন্য JSON ব্যবহার করে তবে ব্রাউজারকে নথির দেহে অপরিবর্তিত টেক্সট সন্নিবেশ করানোর জন্য Content-Type শিরোনামটি text/html এ সেট করা আবশ্যক।

Ext JS 3.0.0 API ডকুমেন্টেশন দেখুন


JSP , আপনি এই পৃষ্ঠা নির্দেশাবলী ব্যবহার করতে পারেন:

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

JSON এর জন্য সঠিক MIME মিডিয়া টাইপ application/json । JSP ক্লায়েন্ট একটি প্রতিক্রিয়া পাঠানোর জন্য এটি ব্যবহার করবে।


আইএএনএ application/json হিসাবে JSON এর জন্য অফিসিয়াল মাইম টাইপ নিবন্ধন করেছে।

text/json কেন না বলে জিজ্ঞাসা করলে ক্রোকফোর্ড বলেছিলেন যে JSON আসলে জাভাস্ক্রিপ্ট বা পাঠ্য নয় এবং আইএএনএটি text/* চেয়ে application/* হস্তান্তর করার সম্ভাবনা বেশি ছিল।

আরো সম্পদ:


আইএএনএ নিবন্ধনের application/json বলেছেন

এই মিডিয়া টাইপটি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলি: JSON ব্যবহার করা হয়েছে এই সমস্ত প্রোগ্রামিং ভাষাগুলির মধ্যে লিখিত অ্যাপ্লিকেশনগুলির মধ্যে তথ্য বিনিময় করতে ব্যবহৃত হয়েছে: অ্যাকশনস্ক্রিপ্ট, সি, সি #, ক্লোজার, কোলফিউশন, সাধারণ লিসপ, ই, ইर्लং, গো, জাভা, জাভাস্ক্রিপ্ট, লুয়া, উদ্দেশ্য CAML, পার্ল, পিএইচপি, পাইথন, রেবোল, রুবি, স্কাল এবং স্কিম।

আপনি লক্ষ্য করবেন যে IANA.org এই অন্য কোনও মিডিয়া প্রকারের তালিকা দেয় না , আসলেও application/javascript এখন অপ্রচলিত। তাই application/json সত্যিই সম্ভব সঠিক উত্তর।

ব্রাউজার সমর্থন অন্য জিনিস।

সর্বাধিক ব্যাপকভাবে সমর্থিত নন-মান মিডিয়া ধরনের text/json বা text/javascript । কিন্তু কিছু বড় নাম এমনকি text/plain ব্যবহার।

এমনকি আরো অদ্ভুত বিষয় ফ্লিকারের দ্বারা প্রেরিত বিষয়বস্তু-টাইপ শিরোনাম, যারা JSON text/xml হিসাবে text/xml । গুগল এর কিছু AJAX অ্যাপিসের জন্য 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


Content-type: application/json - জসন
Content-Type: application/javascript - জসন-পি
Content-type: application/x-javascript - জাভাস্ক্রিপ্ট
Content-type: text/javascript - জাভাস্ক্রিপ্ট কিন্তু অপ্রচলিত, পুরানো সংস্করণগুলি HTML বৈশিষ্ট্য হিসাবে ব্যবহার করতে ব্যবহৃত হয়।
Content-type: text/x-javascript - জাভাস্ক্রিপ্ট মিডিয়া ধরন কিন্তু অপ্রচলিত
Content-type: text/x-json - অ্যাপ্লিকেশন আগে জসন / জson আনুষ্ঠানিকভাবে নিবন্ধিত।


application/json যখন MIME টাইপ হিসাবে ব্যবহার করে তখন আমার নিম্নলিখিত আছে (নভেম্বর ২011 হিসাবে ক্রোমের সাম্প্রতিক সংস্করণগুলির সাথে, Firebug সহ ফায়ারফক্স):

  • যখন Chrome থেকে সার্ভার থেকে লোড হয় তখন Chrome থেকে আর কোন সতর্কতা নেই।
  • ফায়ারবগ প্রতিক্রিয়াতে একটি ট্যাব যুক্ত করবে যা আপনাকে JSON ডাটা ফর্ম্যাট দেখাবে। যদি MIME টাইপটি ভিন্ন হয় তবে এটি কেবল 'প্রতিক্রিয়া সামগ্রী' হিসাবে প্রদর্শিত হবে।




content-type