ටීඑල්; ඩී.ආර්
JSONP යනු වෙනත් සේවාදායකයකින් (වෙනස් සම්භවයක් * ) JSON දත්ත ලබා ගැනීම තහනම් කරන ආරක්ෂක සීමාව මඟහරවා ගැනීම සඳහා නිර්මාණය කරන ලද පැරණි උපක්රමයකි .
උපක්රමය ක්රියාත්මක <script>
වන්නේ එම ස්ථානයෙන් JSON ඉල්ලා සිටින ටැගයක් භාවිතා කිරීමෙනි , උදා :,{ "user":"Smith" }
නමුත් ශ්රිතයකින් ඔතා ඇති සැබෑ JSONP ("JSON with Padding "):
peopleDataJSONP({"user":"Smith"})
මෙම පෝරමයෙන් එය ලැබීම අපගේ peopleDataJSONP
ශ්රිතය තුළ දත්ත භාවිතා කිරීමට අපට හැකියාව ලබා දෙයි . JSONP නරක පුරුද්දකි , එය භාවිතා නොකරන්න (පහත කියවන්න)
ගැටලුව වන්නේ
අපි සැරිසැරූ බව පවසන්න, අපට ourweb.com
JSON දත්ත (හෝ ඇත්තෙන්ම ඕනෑම අමු දත්ත) ලබා ගැනීමට අවශ්යය anotherweb.com
. අපි ලබා ගන්න ඉල්ලීමක් (වගේ භාවිතා කිරීමට නම් XMLHttpRequest
, එය fetch
ඇමතුමක් $.ajax
, ආදිය), අපගේ වෙබ් බ්රව්සරය මේ කැත දෝෂය සමඟ අවසර නැහැ අපිට කියන්න ඇත:
අපට අවශ්ය දත්ත ලබා ගන්නේ කෙසේද? හොඳයි, <script>
ටැග්ස් මෙම සමස්ත සේවාදායකයේ (සම්භවය *) සීමාවට යටත් නොවේ! CDN වැනි ඕනෑම සේවාදායකයකින් jQuery හෝ ගූගල් සිතියම් වැනි පුස්තකාලයක් කිසිදු දෝෂයකින් තොරව පූරණය කළ හැක්කේ එබැවිනි.
වැදගත් කරුණ : ඔබ ඒ ගැන සිතන්නේ නම්, එම පුස්තකාල සත්ය, ක්රියාත්මක කළ හැකි JS කේතය (සාමාන්යයෙන් ඇතුළත ඇති සියලුම තර්කනයන් සහිත දැවැන්ත කාර්යයකි). අමු දත්ත? JSON දත්ත කේතය නොවේ . ධාවනය කිරීමට කිසිවක් නැත; එය සරල දත්ත පමණි.
එබැවින් අපගේ වටිනා දත්ත හැසිරවීමට හෝ හැසිරවීමට ක්රමයක් නොමැත. බ්රව්සරය අපගේ <script>
ටැගය මඟින් පෙන්වා ඇති දත්ත බාගත කරනු ඇති අතර එය සැකසීමේදී එය නිවැරදිව පැමිණිලි කරනු ඇත:
wtf {"user":"Smith"}
අපි පැටවූ මේ කපටිකමද ? එය කේතය නොවේ. මට ගණනය කළ නොහැක, සින්ටැක්ස් දෝෂයකි!
JSONP හැක්
එම දත්ත භාවිතා කිරීමට පැරණි / අනවසර ක්රමය? යම් තර්කනයකින් එය යැවීමට අපට එම සේවාදායකය අවශ්යයි, එබැවින් එය පටවන විට, බ්රව්සරයේ ඇති ඔබේ කේතයට එම දත්ත භාවිතා කිරීමට හැකි වේ. එබැවින් විදේශීය සේවාදායකය අපට JS ශ්රිතයක් තුළ JSON දත්ත යවයි. දත්ත එම ශ්රිතයේ ආදානය ලෙස සකසා ඇත. එය මේ වගේ ය:
peopleDataJSONP({"user":"Smith"})
එය කරයි කේතය JS අපගේ වෙබ් බ්රව්සරය පැමිණිලි තොරව විග්රහ කළ ඇත! හරියටම jQuery පුස්තකාලය හා සමානයි. දැන්, එය එලෙස ලබා ගැනීම සඳහා, සේවාදායකයා ඒ සඳහා JSONP හිතකාමී සේවාදායකය "අසයි", සාමාන්යයෙන් මේ ආකාරයට සිදු කරයි:
<script src="https://anotherweb.com/api/data-from-people.json?myCallback=peopleDataJSONP"></script>
අපගේ බ්රව්සරයට එම ශ්රිත නාමය සමඟ JSONP ලැබෙනු ඇත, එබැවින් අපගේ කේතයේ එකම නමක් සහිත ශ්රිතයක් අවශ්ය වේ.
const peopleDataJSONP = function(data){
alert(data.user); // "Smith"
}
හෝ මේ හා සමාන ප්රති come ල:
function peopleDataJSONP(data){
alert(data.user); // "Smith"
}
බ්රව්සරය JSONP බාගත කර එය ක්රියාත්මක කරනු ඇත, එය අපගේ ශ්රිතය ලෙස හැඳින්වේ , එහිදී තර්කය data
අපගේ JSON වනු ඇත. අපට අවශ්ය ඕනෑම දෙයක් දැන් අපගේ දත්ත සමඟ කළ හැකිය.
JSONP භාවිතා නොකරන්න, CORS භාවිතා කරන්න
JSONP යනු අවාසි කිහිපයක් සහිත හරස් අඩවි හැක් කිරීමකි:
- අපට කළ හැක්කේ GET ඉල්ලීම් පමණි
- එය සරල ස්ක්රිප්ට් ටැගයකින් අවුලුවන ලද GET ඉල්ලීමක් බැවින්, අපට ප්රයෝජනවත් දෝෂ හෝ ප්රගති තොරතුරු නොලැබේ
- ඔබගේ සේවාදායක ජේඑස් කේතය තුළ අනිෂ්ට ගෙවීමක් ලෙස වෙනස් කළ හැකි සමහර ආරක්ෂක ගැටළු තිබේ
- එය විසඳන්නේ JSON දත්ත සමඟ පමණි, නමුත් එකම-ප්රභව ආරක්ෂණ ප්රතිපත්තිය අනෙකුත් දත්ත වලට අදාළ වේ (වෙබ් ෆොන්ට්ස්, පින්තූර / වීඩියෝ අදින ලද ඉමේජ් () ...)
- එය ඉතා අලංකාර හෝ කියවිය නොහැකි ය.
රැගෙන යාම යනු වර්තමානයේ එය භාවිතා කිරීමේ අවශ්යතාවයක් නොමැති වීමයි .
JSONP යනු වෙනත් සේවාදායකයකින් JSON දත්ත ලබා ගැනීමේ උපක්රමයයි, නමුත් අපට වෙනත් ආකාරයේ හරස් අඩවි දේවල් අවශ්ය නම් අපි එකම ආරක්ෂක මූලධර්මය (එකම-සම්භවය) උල්ලං will නය කරන්නෙමු.
ඔබ මෙහි CORS ගැන කියවිය යුතුය , නමුත් එහි සාරාංශය:
හරස්-ප්රභව සම්පත් හුවමාරුව (CORS) යනු එක් මූලාරම්භයකින් ක්රියාත්මක වන වෙබ් යෙදුමක් ලබා දෙන ලෙස බ්රව්සර්ට පැවසීමට අතිරේක HTTP ශීර්ෂයන් භාවිතා කරන යාන්ත්රණයකි, තෝරාගත් සම්පත් වෙනත් ප්රභවයකින් ලබා ගත හැකිය. වෙබ් යෙදුමක් තමන්ගේම වෙනත් ප්රභවයක් (වසමක්, ප්රොටෝකෝලයක් හෝ වරායක්) ඇති සම්පතක් ඉල්ලා සිටින විට හරස් සම්භවයක් ඇති HTTP ඉල්ලීමක් ක්රියාත්මක කරයි.
* සම්භවය කරුණු 3 කින් අර්ථ දක්වා ඇත: ප්රොටෝකෝලය , වරාය සහ ධාරකය . උදාහරණයක් ලෙස, (වෙනස් ප්රොටෝකෝලය) සහ (වෙනස් වරාය) සහ පැහැදිලිවම (වෙනස් ධාරක) https://web.com
ට වඩා වෙනස් සම්භවයකි.http://web.com
https://web.com:8081
https://thatotherweb.net