හරස්-ප්රභව සම්පත් බෙදාගැනීම - CORS
(AKA Cross-Domain AJAX ඉල්ලීම) බොහෝ වෙබ් සංවර්ධකයින්ට මුහුණ දිය හැකි ගැටළුවක් වන අතර, එකම-මූලාරම්භය-ප්රතිපත්තියට අනුව, බ්රව්සර් සේවාදායක ජාවාස්ක්රිප්ට් ආරක්ෂිත වැලිපිල්ලක සීමා කරයි, සාමාන්යයෙන් JS හට දුරස්ථ සේවාදායකයක් සමඟ කෙලින්ම සන්නිවේදනය කළ නොහැක. වෙනත් වසමකින්. අතීතයේ දී සංවර්ධකයින් හරස් වසම් සම්පත් ඉල්ලීම සාක්ෂාත් කර ගැනීම සඳහා බොහෝ උපක්රමශීලී ක්රම නිර්මාණය කළ අතර, බොහෝ විට භාවිතා කරන ක්රම:
- දුරස්ථව සන්නිවේදනය කිරීම සඳහා "ප්රොක්සියක්" ලෙස ෆ්ලෑෂ් / සිල්වර් ලයිට් හෝ සේවාදායක පැත්ත භාවිතා කරන්න.
- JSON With Padding ( JSONP ).
- දුරස්ථ සේවාදායකය iframe එකක කාවැද්දූ අතර කැබැල්ල හෝ කවුළුව හරහා සන්නිවේදනය කරන්න , මෙහි යොමු වන්න .
එම උපක්රමශීලී ක්රමවලට අඩු හෝ වැඩි වශයෙන් ගැටළු කිහිපයක් ඇත, නිදසුනක් ලෙස සංවර්ධකයින් එය සරලව “එවාල්” කළහොත් JSONP ආරක්ෂක වළකට හේතු විය හැකි අතර, ඉහත # 3, එය ක්රියාත්මක වුවද, වසම් දෙකම එකිනෙකා අතර දැඩි ගිවිසුමක් ගොඩනගා ගත යුතුය, එය නම්යශීලී හෝ අලංකාර නොවේ IMHO:)
W3C විසින් මෙම ගැටළුව විසඳීම සඳහා ආරක්ෂිත, නම්යශීලී සහ නිර්දේශිත සම්මත ක්රමයක් සැපයීම සඳහා සම්මත විසඳුමක් ලෙස හරස් ප්රභව සම්පත් බෙදාගැනීම (CORS) හඳුන්වා දී ඇත.
යාන්ත්රණය
ඉහළ මට්ටමේ සිට අපට සරලවම සිතිය හැක්කේ CORS යනු A වසමේ සේවාදායක AJAX ඇමතුම සහ B වසමේ සත්කාරක පිටුවක් අතර ගිවිසුමක් වන අතර සාමාන්ය හරස් ප්රභව ඉල්ලීමක් / ප්රතිචාරයක් වනුයේ:
DomainA AJAX ඉල්ලීම් ශීර්ෂයන්
Host DomainB.com
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language en-us;
Accept-Encoding gzip, deflate
Keep-Alive 115
Origin http://DomainA.com
වසම් බී ප්රතිචාර ශීර්ෂයන්
Cache-Control private
Content-Type application/json; charset=utf-8
Access-Control-Allow-Origin DomainA.com
Content-Length 87
Proxy-Connection Keep-Alive
Connection Keep-Alive
මා ඉහත සලකුණු කළ නිල් පැහැති කොටස් කර්නල් කරුණු වන අතර, "සම්භවය" ඉල්ලීම් ශීර්ෂය "මඟින් හරස් සම්භව ඉල්ලීම හෝ පූර්ව ආලෝක ඉල්ලීම ආරම්භ වන්නේ කොතැනින්ද යන්න දක්වයි", "ප්රවේශ-පාලනය-ඉඩ දෙන්න-සම්භවය" ප්රතිචාර ශීර්ෂය මඟින් මෙම පිටුව දුරස්ථ ඉල්ලීමට ඉඩ දෙයි DomainA (අගය * නම් * ඕනෑම වසමකින් දුරස්ථ ඉල්ලීම් වලට ඉඩ දෙයි).
මා ඉහත සඳහන් කළ පරිදි, ඇත්ත වශයෙන්ම හරස් සම්භවයක් ඇති HTTP ඉල්ලීම ඉදිරිපත් කිරීමට පෙර " පූර්ව ආලෝක ඉල්ලීමක් " ක්රියාත්මක කිරීමට W3 නිර්දේශ කර ඇත, කෙටියෙන් කිවහොත් එය HTTP OPTIONS
ඉල්ලීමකි:
OPTIONS DomainB.com/foo.aspx HTTP/1.1
Foo.aspx OPTIONS HTTP ක්රියාපදයට සහය දක්වන්නේ නම්, එය පහත පරිදි ප්රතිචාර දැක්විය හැකිය:
HTTP/1.1 200 OK
Date: Wed, 01 Mar 2011 15:38:19 GMT
Access-Control-Allow-Origin: http://DomainA.com
Access-Control-Allow-Methods: POST, GET, OPTIONS, HEAD
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Max-Age: 1728000
Connection: Keep-Alive
Content-Type: application/json
ප්රතිචාරයේ "ප්රවේශ-පාලක-ඉඩ දෙන්න-සම්භවය" සහ එහි වටිනාකම "*" හෝ CORS ඉල්ලීම ඉදිරිපත් කළ වසම අඩංගු වන්නේ නම් පමණි, මෙම අනිවාර්ය කොන්දේසිය තෘප්තිමත් කිරීමෙන් බ්රව්සරය සත්ය හරස් වසම් ඉල්ලීම ඉදිරිපත් කර ප්රති result ලය හැඹිලිය. " Preflight-Result-Cache " හි.
මම මීට වසර තුනකට පෙර CORS ගැන බ්ලොග් කළෙමි: AJAX Cross-Origin HTTP ඉල්ලීම
http://siteA/MyCode.js
.