ما هو الصحيح سلمان المحتوى النوع ؟
-
20-08-2019 - |
سؤال
لقد تم العبث مع سلمان لبعض الوقت فقط دفع بها كما نص و أنه لم يصب أي شخص (أعلم) ، ولكن أود أن تبدأ في فعل الأشياء بشكل صحيح.
لقد رأيت لذلك العديد المزعومة "معايير" JSON نوع المحتوى:
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
ولكن أي واحد هو الصحيح أو الأفضل ؟ أظن أن هناك الأمن و دعم المتصفح قضايا متفاوتة بينهما.
أنا أعلم أن هناك سؤال مماثل ، ما نوع MIME إذا JSON يتم إرجاعها من قبل بقية API ؟ , ولكن أود قليلا أكثر استهدافا الإجابة.
نصائح أخرى
IANA وقد سجلت الرسمية نوع MIME JSON كما application/json
.
عندما سئل عن لماذا لا text/json
, Crockford يبدو أن قال سلمان ليس جافا سكريبت ولا نص أيضا IANA كان أكثر عرضة من جهة application/*
من text/*
.
المزيد من الموارد:
بالطبع الصحيحة MIME نوع وسائط سلمان هو application/json
, لكن من الضروري أن ندرك ما هو نوع البيانات المتوقع في التطبيق الخاص بك.
على سبيل المثال انا استخدم تحويلة 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");
}
});
في حالة استخدام application/json استجابة نوع المتصفح يوحي لي حفظ الملف.
من جانب الخادم المصدر مقتطف الشفرة باستخدام الربيع 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 }
نوع المحتوى: application/json
JSON-P:
JSON مع الحشو.رد البيانات JSON ، مع استدعاء دالة ملفوفة حوله.
على سبيل المثال:
functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
نوع المحتوى: application/javascript
إذا كنت تستخدم أوبونتو أو ديبيان و لك خدمة .ملفات json خلال أباتشي ، قد تريد أن تكون الملفات مع تصحيح نوع المحتوى.أنا أفعل هذا في المقام الأول لأنني أريد أن استخدم فايرفوكس التمديد JSONView
أباتشي وحدة mod_mime سوف تساعد على القيام بذلك بسهولة.ومع ذلك, مع أوبونتو تحتاج إلى تحرير الملف /etc/mime.أنواع وإضافة خط
application/json json
ثم إعادة تشغيل أباتشي:
sudo service apache2 restart
المحتوى المناسب لنوع سلمان هو application/json
إلا إذا كنت تستخدم JSONP, ، المعروف أيضا باسم سلمان مع الحشو ، الذي هو في الواقع جافا سكريبت و حتى الحق في نوع المحتوى سيكون application/javascript
.
ليس هناك شك في أن 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 كان مضغوط مع g-zip ولكن سلمان الردود لم تكن.أضفت
<add mimeType="application/json" enabled="true"/>
في والدينامية أنواع أقسام. ولكن هذا لا ضغط سلمان الردود على الإطلاق.
بعد أن أزلت هذا المضافة حديثا نوع المضافة
<add mimeType="application/x-javascript" enabled="true"/>
في كل والدينامية أنواع المقاطع و تغير نوع الاستجابة في
.ashx (غير متزامن معالج) إلى
application/x-javascript
والآن وجدت أن بلدي سلمان الردود مضغوط مع g-الرمز البريدي.لذلك أنا شخصيا انصح استخدام
application/x-javascript
إلا إذا كنت ترغب في ضغط سلمان الردود على بيئة استضافة مشتركة.لأنه في استضافة مشتركة, أنها لا تسمح لك بتغيير IIS تكوينات.
فقط عند استخدام application/json
كما MIME نوع لدي التالية (اعتبارا من تشرين الثاني / نوفمبر 2011 مع أحدث إصدارات كروم, فايرفوكس مع الحرائق):
- لا مزيد من التحذيرات من كروم عند سلمان يتم تحميلها من الملقم.
- الحرائق إضافة علامة تبويب إلى الرد يظهر لك البيانات JSON تنسيق.إذا كان نوع MIME مختلفة ، وسوف تظهر فقط كما استجابة المحتوى'.
ليس كل شيء يعمل على نوع المحتوى application/json
.
إذا كنت تستخدم Ext JS تقديم نموذج لتحميل الملف تكون على علم أن استجابة الملقم تحليل من قبل المتصفح لإنشاء وثيقة <iframe>
.
إذا كان الملقم باستخدام جسون إرسال عودة كائن ، ثم Content-Type
يجب أن يكون رأس مجموعة text/html
لكي تخبر المتصفح لإدراج النص دون تغيير في المستند الجسم.
انظر Ext JS 3.4.0 وثائق API.
سلمان هو المجال-لغة معينة (DSL) و تنسيق البيانات المستقلة من جافا سكريبت ، وعلى هذا النحو الخاصة بها MIME نوع ، application/json
.احترام أنواع MIME هو بالطبع العميل مدفوعة ، لذلك text/plain
قد تفعل لنقل بايت, لكن هل سيكون دفع التفسير إلى البائع مجال التطبيق دون داع - application/json
.هل نقل XML عن طريق text/plain
?
لكن بصراحة اختيارك من نوع MIME هو المشورة إلى العميل في كيفية تفسير البيانات- text/plain
أو text/HTML
(عندما لا HTML) مثل نوع المحو - انها مبهمة كما جعل كل الكائنات من نوع كائن في كتابة اللغة.
لا وقت متصفح أعرف من سوف تأخذ سلمان الوثيقة تلقائيا جعلها متاحة وقت التشغيل مثل جافا سكريبت يمكن الوصول إليها الكائن دون تدخل ، ولكن إذا كنت تعمل مع شلت العميل, هذا هو مسألة مختلفة تماما.ولكن هذه ليست القصة بأكملها- راحة سلمان الخدمات في كثير من الأحيان لم يكن لديك جافا سكريبت أوقات التشغيل ، لكن لا توقف لهم باستخدام سلمان قابل تنسيق تبادل البيانات.إذا كان العملاء هي التي شلت...ثم أن النظر ربما HTML عن طريق الحقن اياكس النموذجيه الخدمة بدلا من ذلك.
Application/JSON!
إذا كنت في جانب العميل والبيئة التحقيق حول الدعم عبر متصفح إلزامي من أجل دعم تطبيق ويب.
الحق HTTP نوع المحتوى سيكون application/json
, كما أن آخرين قد أبرزت أيضا ، ولكن بعض العملاء لا تتعامل مع ذلك بشكل جيد جدا ، لهذا مسج توصي الافتراضي text/html
.
الجواب الصحيح هو:
Content-Type: application/json
كما العديد من الآخرين المذكورة ، application/json
هو الجواب الصحيح.
ولكن ما لم يتم تفسيره بعد ما الخيارات الأخرى اقترحت يعني.
application/x-javascript
:التجريبية نوع MIME جافا سكريبت قبلapplication/javascript
وقدم القياسية.text/javascript
:الآن عفا عليها الزمن.يجب عليك استخدامapplication/javascript
عند استخدام جافا سكريبت.text/x-javascript
:التجريبية نوع MIME الحالة المذكورة أعلاه.text/x-json
:التجريبية نوع MIME سلمان قبلapplication/json
حصلت مسجلة رسميا.
جميع في كل شيء ، كلما كان لديك أي شكوك حول أنواع المحتوى ، يجب أن تحقق هذا الرابط
“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())
}
}
على IANA التسجيل application/json
يقول
التطبيقات التي تستخدم هذا نوع وسائل الإعلام:سلمان وقد استخدم تبادل البيانات بين التطبيقات المكتوبة في كل هذه لغات البرمجة:أكشن, C, C#, Clojure, كولد فيوجن ، Common Lisp, E, إرلانج, اذهب, جافا, جافا سكريبت, Lua, الهدف CAML, Perl, PHP, Python, Rebol, روبي, ميلان, و مخطط.
ستلاحظ أن IANA.org لا تسرد أي من هذه غيرها من أنواع وسائل الإعلام, في الواقع حتى application/javascript
هو الآن عفا عليها الزمن.لذلك application/json
هو حقا فقط ممكن الصحيح الجواب.
دعم المتصفح هو شيء آخر.
الأكثر على نطاق واسع بدعم غير القياسية أنواع وسائل الإعلام هي text/json
أو text/javascript
.ولكن بعض الأسماء الكبيرة حتى استخدام text/plain
.
أكثر من الغريب هو نوع المحتوى رأس أرسلت من قبل فليكر ، الذي يعود JSON كما text/xml
.تستخدم Google 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
ولكن
لقد شهدت العديد من الحالات التي يكون فيها نوع المتصفح أو إطار المستخدم المطلوبة:
text/html
application/javascript
يمكنني استخدام أدناه
contentType: 'application/json',
data: JSON.stringify(SendData),
على نوع المحتوى ينبغي أن يكون رأس مجموعة 'application/json'عندما نشر.Server الاستماع يجب أن يتضمن الطلب "تقبل=application/json".في الربيع MVC يمكنك أن تفعل ذلك من هذا القبيل:
@RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json")
إضافة رؤوس الاستجابة:
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
في الربيع لديك تعريف نوع: MediaType.APPLICATION_JSON_VALUE
وهو ما يعادل application/json.
على
application/json
يعمل كبيرة في PHP لتخزين مجموعة أو كائن البيانات.
أنا استخدم هذا الرمز وضع البيانات في سلمان على جوجل سحابة التخزين (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"));
إذا كان سلمان مع الحشو ثم سيكون application/jsonp
.إذا كان سلمان هو دون الحشو ثم سيكون application/json
.
للتعامل مع كل من هو ممارسة جيدة لاستخدام:'التطبيق/javascript' دون عناء سواء كان مع الحشو أو بدون الحشو.
عن سلمان, أنا باستخدام:
Content-Type: application/json
هذا هو موضح في IETF سلمان تنسيق تبادل البيانات 7158 الاقتراح ، القسم 1.2:مواصفات سلمان.
تمديد قبول الردود عند استخدام جسون في بقية السياق...
هناك حجة قوية حول استخدام application/x-resource+json
و application/x-collection+json
عندما كنت تمثل بقية الموارد مجموعات.
و إذا كنت ترغب في متابعة jsonapi مواصفات ، يجب أن استخدام application/vnd.api+json
, كما هو موثق.
وعلى الرغم من عدم وجود معيار عالمي ، فمن الواضح أن إضافة الدلالي الموارد التي نقلها تبرير أكثر وضوحا نوع المحتوى من application/json
.
وبعد هذا المنطق ، سياقات أخرى يمكن أن يبرر أكثر تحديدا نوع المحتوى.
مطوري PHP استخدام هذا:
<?php
header("Content-type: application/json");
// Do something here...
?>
إذا كنت تحصل على البيانات من بقية 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
سلمان (كائن جافا سكريبت التدوين) ، JSONP ("سلمان مع الحشو") صيغ يبدو مشابهة جدا وبالتالي فإنه قد يكون مربكا جدا وهو نوع MIME ينبغي أن تستخدم.على الرغم من صيغ متشابهة ، هناك بعض الفروق الدقيقة بينهما.
لذلك كلما في أي شكوك لدي نهج بسيط جدا (الذي يعمل بشكل جيد تماما في معظم الحالات) ، وهي الذهاب والتحقق من المقابلة الوثيقة RFC.
سلمان RFC 4627 (Application/json وسائل الاعلام نوع جافا سكريبت تدوين كائن (JSON)) هي مواصفات تنسيق JSON.يقول في القسم 6 ، MIME نوع وسائط سلمان النص
application/json.
JSONP
JSONP ("سلمان مع الحشو") يتم التعامل معها بطريقة مختلفة من سلمان في المتصفح.JSONP يعامل منتظم جافا سكريبت script وبالتالي فإنه يجب استخدام application/javascript,
الرسمي الحالي MIME نوع جافا سكريبت.في كثير من الحالات, ومع ذلك ، text/javascript
نوع MIME سوف تعمل بشكل جيد جدا.
علما بأن text/javascript
تم وضع علامة كما عفا عليها الزمن من قبل RFC 4329 (البرمجة أنواع الوسائط) الوثيقة فمن المستحسن استخدام application/javascript
نوع بدلا من ذلك.ومع ذلك ، بسبب إرث الأسباب ، text/javascript
لا تزال تستخدم على نطاق واسع ولها الدعم عبر متصفح (التي ليست دائما الحالة مع application/javascript
نوع MIME, خصوصا مع المتصفحات القديمة).
Content-Type: application/json
- json
Content-Type: application/javascript
- json-P
Content-Type: application/x-javascript
- جافا سكريبت
Content-Type: text/javascript
- جافا سكريبت ولكن عفا عليها الزمن ، أقدم إصدارات IE تستخدم html السمة.Content-Type: text/x-javascript
- سكريبت أنواع وسائل الإعلام ولكن عفا عليها الزمن
Content-Type: text/x-json
- سلمان قبل application/json حصلت مسجلة رسميا.