Skip to content
JSONP
EntityQ500012· pop 13· linked from 8 articles

Also known as JSON with Padding

thumb | right | alt=Graphical logo for JSONP | Graphical logo for JSONP JSONP, or JSON-P (JSON with Padding), is a JavaScript technique for requesting data via the HTML element. It was proposed by Bob Ippolito in 2005. JSONP enables sharing of data bypassing same-origin policy, which disallows running JavaScript code to read media DOM elements or XMLHttpRequest data fetched from outside the page's originating site. The originating site is indicated by a combination of URI scheme, hostname, and port number.

Described at

Remote JSON - JSONP

bob.ippoli.to →

The browser security model dictates that XMLHttpRequest, frames, etc. must have the same domain in order to communicate. That's not a terrible idea, for security reasons, but it sure does make distributed (service oriented, mash-up, whatever it's called this week) web development suck. Needs infrastructure (can't run a serverless client) and you get double-taxed on bandwidth and latency (remote - proxy - client). Remote host needs to deploy a crossdomain.xml file, Flash is relatively proprietary and opaque to use, requires learning a one-off moving target programming langage. I'm proposing a new technology agnostic standard methodology for the script tag method for cross-domain data fetching: JSON with Padding , or simply JSONP . The client decides on the arbitrary prepended text by using a query argument named jsonp with the text to prepend. Simple! With an empty jsonp argument, the result document is simply JSON wrapped in parentheses. Let's take the del.icio.us JSON API as an example. This API has a "script tag" variant that looks like this: See, because we're wrapping with parentheses, a JSONP request can translate into a function call or a plain old JSON literal. All the server needs to do differently is prepend a little bit of text to the beginning and wrap the JSON in parentheses! Now, of course, you'd have libraries like MochiKit , Dojo , etc. abstracting JSONP so that you don't have to write the ugly DOM script tag insertion yourself, etc. Of course, this just solves the standardization problem. Your page is still toast if the remote host decides to inject malicious code instead of JSON data. However, if implemented, it'd save a lot of developers some time and allow for generic abstractions, tutorials, and documentation to be built.

Excerpt from a page describing this subject · 4,471 chars · not written by Vinony

Wikidata facts

Subclass of
JSON
Based on
JSON
Show 2 more facts
media type
text/json-p
Sources (3)

via Wikidata · CC0

Article · 中文

JSONP(JSON with Padding)是資料格式JSON的一種“使用模式”,可以讓網頁從別的網域获取資料。另一個解決這個問題的新方法是跨來源資源共享。 由於同源策略,一般來說位於server1.example.com的網頁無法與server2.example.com的伺服器溝通,而HTML的<script></code></a>元素是一個例外。利用<a href="/wiki/HTML%E5%85%83%E7%B4%A0#script_tag" title="HTML元素"><code><script></code></a>元素的這個開放策略,網頁可以得到從其他來源動態產生的JSON資料,而這種使用模式就是所謂的JSONP。用JSONP抓到的資料並不是JSON,而是任意的JavaScript,用JavaScript直譯器執行而不是用JSON解析器解析。</p><div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /><div class="toctitle" lang="zh" dir="ltr"><h2 id="mw-toc-heading">目录</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div><ul><li class="toclevel-1 tocsection-1"><a href="#原理"><span class="tocnumber">1</span> <span class="toctext">原理</span></a></li><li class="toclevel-1 tocsection-2"><a href="#填充"><span class="tocnumber">2</span> <span class="toctext">填充</span></a></li><li class="toclevel-1 tocsection-3"><a href="#Script元素“注入”"><span class="tocnumber">3</span> <span class="toctext">Script元素“注入”</span></a></li><li class="toclevel-1 tocsection-4"><a href="#安全問題"><span class="tocnumber">4</span> <span class="toctext">安全問題</span></a></li><li class="toclevel-1 tocsection-5"><a href="#跨站请求伪造"><span class="tocnumber">5</span> <span class="toctext">跨站请求伪造</span></a></li><li class="toclevel-1 tocsection-6"><a href="#歷史"><span class="tocnumber">6</span> <span class="toctext">歷史</span></a></li><li class="toclevel-1 tocsection-7"><a href="#參考文獻"><span class="tocnumber">7</span> <span class="toctext">參考文獻</span></a></li><li class="toclevel-1 tocsection-8"><a href="#外部連結"><span class="tocnumber">8</span> <span class="toctext">外部連結</span></a></li></ul></div><h2><span id=".E5.8E.9F.E7.90.86"></span><span class="mw-headline" id="原理">原理</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=1" title="编辑章节:原理">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><p>為了理解這種模式的原理,先想像有一個回傳JSON文件的URL,而JavaScript程式可以用<a href="/wiki/XMLHttpRequest" title="XMLHttpRequest">XMLHttpRequest</a>跟這個URL要資料。假設我們的URL是http://server2.example.com/RetrieveUser?UserId=xxx 。假設小明的UserId是1823,且當瀏覽器透過URL傳小明的UserId,也就是抓取http://server2.example.com/RetrieveUser?UserId=1823,得到:</p><div class="mw-highlight mw-highlight-lang-json mw-content-ltr" dir="ltr"><pre><span></span><span class="p">{</span><span class="nt">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"小明"</span><span class="p">,</span><span class="w"> </span><span class="nt">"Id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1823</span><span class="p">,</span><span class="w"> </span><span class="nt">"Rank"</span><span class="p">:</span><span class="w"> </span><span class="mi">7</span><span class="p">}</span><span class="w"></span></pre></div><p>這個JSON資料可能是依據傳過去URL的查詢參數動態產生的。</p><p>這個時候,把<a href="/wiki/HTML%E5%85%83%E7%B4%A0#script_tag" title="HTML元素"><code><script></code></a>元素的src屬性設成一個回傳JSON的URL是可以想像的,這也代表從HTML頁面透過script元素抓取JSON是可能的。</p><p>然而,一份JSON文件並不是一個JavaScript程式。為了讓瀏覽器可以在<a href="/wiki/HTML%E5%85%83%E7%B4%A0#script_tag" title="HTML元素"><code><script></code></a>元素執行,從src裡URL回傳的必須是可執行的JavaScript。在JSONP的使用模式裡,該URL回傳的是由函數呼叫包起來的動態生成JSON,這就是JSONP的“填充(padding)”或是“前輟(prefix)”的由來。</p><p>慣例上瀏覽器提供<a href="/wiki/%E5%9B%9E%E8%AA%BF%E5%87%BD%E6%95%B8" class="mw-redirect" title="回調函數">回調函數</a>的名稱當作送至伺服器的請求中命名查詢參數的一部份,例如:</p><div class="mw-highlight mw-highlight-lang-html mw-content-ltr" dir="ltr"><pre><span></span> <span class="p"><</span><span class="nt">script</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/javascript"</span> <span class="na">src</span><span class="o">=</span><span class="s">"http://server2.example.com/RetrieveUser?UserId=1823&jsonp=parseResponse"</span><span class="p">></span> <span class="p"></</span><span class="nt">script</span><span class="p">></span></pre></div><p>伺服器會在傳給瀏覽器前將JSON数据填充到回调函数(parseResponse)中。瀏覽器得到的回應已不是單純的資料敘述而是一個腳本,这样浏览器就可以调用该函数进行处理。在本例中,瀏覽器得到的是:</p><div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">parseResponse</span><span class="p">({</span><span class="s2">"Name"</span><span class="o">:</span> <span class="s2">"小明"</span><span class="p">,</span> <span class="s2">"Id"</span><span class="o">:</span> <span class="mf">1823</span><span class="p">,</span> <span class="s2">"Rank"</span><span class="o">:</span> <span class="mf">7</span><span class="p">});</span></pre></div><h2><span id=".E5.A1.AB.E5.85.85"></span><span class="mw-headline" id="填充">填充</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=2" title="编辑章节:填充">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><p>雖然這個填充(前輟)“通常”是瀏覽器執行背景中定義的某個回調函數,它也可以是變數賦值、if敘述或者是其他JavaScript敘述。JSONP要求(也就是使用JSONP模式的請求)的回應不是JSON也不被當作JSON解析——回傳內容可以是任意的運算式,甚至不需要有任何的JSON,不過慣例上填充部份還是會觸發函數调用的一小段JavaScript片段,而這個函數呼叫是作用在JSON格式的資料上的。</p><p>另一種說法—典型的JSONP就是把既有的JSON API用函數呼叫包起來以達到跨域存取的解法。</p><h2><span id="Script.E5.85.83.E7.B4.A0.E2.80.9C.E6.B3.A8.E5.85.A5.E2.80.9D"></span><span class="mw-headline" id="Script元素“注入”">Script元素“注入”</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=3" title="编辑章节:Script元素“注入”">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><p>為了要啟動一個JSONP呼叫(或者說,使用這個模式),你需要一個script元素。因此,瀏覽器必須為每一個JSONP要求加(或是重用)一個新的、有所需src值的<a href="/wiki/HTML%E5%85%83%E7%B4%A0" title="HTML元素"><code><script></code></a>元素到HTML DOM裡—或者說是「注入」這個元素。瀏覽器執行該元素,抓取src裡的URL,並執行回傳的JavaScript。</p><p>也因為這樣,JSONP被稱作是一種“讓使用者利用script元素注入的方式繞開同源策略”的方法。</p><h2><span id=".E5.AE.89.E5.85.A8.E5.95.8F.E9.A1.8C"></span><span class="mw-headline" id="安全問題">安全問題</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=4" title="编辑章节:安全問題">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><p>使用遠端網站的script標籤會讓遠端網站得以注入<b>任何</b>的內容至網站裡。如果遠端的網站有JavaScript注入漏洞,原來的網站也會受到影響。</p><p>現在有一個正在進行計畫在定義所謂的<a rel="nofollow" class="external text" href="https://web.archive.org/web/20160304044218/http://www.json-p.org/">JSON-P嚴格安全子集</a>,使瀏覽器可以對MIME類別是“application/json-p”請求做強制處理。如果回應不能被解析為嚴格的JSON-P,瀏覽器可以丟出一個錯誤或忽略整個回應。</p><h2><span id=".E8.B7.A8.E7.AB.99.E8.AF.B7.E6.B1.82.E4.BC.AA.E9.80.A0"></span><span class="mw-headline" id="跨站请求伪造">跨站请求伪造</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=5" title="编辑章节:跨站请求伪造">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><p>粗略的JSONP部署很容易受到<a href="/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0" title="跨站请求伪造">跨站请求伪造</a>(CSRF/XSRF)的攻擊<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup>。因為HTML <a href="/wiki/HTML%E5%85%83%E7%B4%A0#script_tag" title="HTML元素"><code><script></code></a>標籤在瀏覽器裡不遵守<a href="/wiki/%E5%90%8C%E6%BA%90%E7%AD%96%E7%95%A5" title="同源策略">同源策略</a>,惡意網頁可以要求並取得屬於其他網站的JSON資料。當使用者正登入那個其他網站時,上述狀況使得該惡意網站得以在惡意網站的環境下操作該JSON資料,可能洩漏使用者的密碼或是其他敏感資料。</p><p>只有在該JSON資料含有不該洩漏給第三方的隱密資料,且伺服器僅靠瀏覽器的同源策略阻擋不正常要求的時候這才會是問題。若伺服器自己決定要求的專有性,並只在要求正常的情況下輸出資料則沒有問題。只靠<a href="/wiki/Cookie" title="Cookie">Cookie</a>並不夠決定要求是合法的,這很容易受到<a href="/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0" title="跨站请求伪造">跨站请求伪造</a>攻擊。</p><h2><span id=".E6.AD.B7.E5.8F.B2"></span><span class="mw-headline" id="歷史">歷史</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=6" title="编辑章节:歷史">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><p>2005年夏天,喬治·詹姆提(George Jempty)建議在JSON前面選擇性的加上變數賦值<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">[2]</a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3">[3]</a></sup>。鮑勃·伊波利托(Bob Ippolito)於2005年12月提出了JSONP最原始的提案,其中填充部份已經是回調函數<sup id="cite_ref-4" class="reference"><a href="#cite_note-4">[4]</a></sup>,而現在已有很多<a href="/wiki/Web_2.0" title="Web 2.0">Web 2.0</a>應用程式使用這份提案,像是<a href="/wiki/Dojo_Toolkit" title="Dojo Toolkit">Dojo Toolkit</a>應用程式、<a href="/wiki/Google_Web_Toolkit" class="mw-redirect" title="Google Web Toolkit">Google Web Toolkit</a>應用程式<sup id="cite_ref-5" class="reference"><a href="#cite_note-5">[5]</a></sup>與<a href="/wiki/Web%E6%9C%8D%E5%8B%99" class="mw-redirect" title="Web服務">Web服務</a>。</p><h2><span id=".E5.8F.83.E8.80.83.E6.96.87.E7.8D.BB"></span><span class="mw-headline" id="參考文獻">參考文獻</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=7" title="编辑章节:參考文獻">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><div class="reflist columns references-column-count references-column-count-2" style="-moz-column-count: 2; -webkit-column-count: 2; column-count: 2; list-style-type: decimal;"><ol class="references"><li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><cite class="citation web">Grossman, Jeremiah. <a rel="nofollow" class="external text" href="http://jeremiahgrossman.blogspot.com/2006/01/advanced-web-attack-techniques-using.html">Advanced Web Attack Techniques using GMail</a>. 2006-01-27 <span class="reference-accessdate"> [<span class="nowrap">2009-07-03</span>]</span>. (原始内容<a rel="nofollow" class="external text" href="https://www.webcitation.org/6Djo5ri6Y?url=http://jeremiahgrossman.blogspot.com/2006/01/advanced-web-attack-techniques-using.html">存档</a>于2013-01-17) <span style="font-family: sans-serif; cursor: default; color:#555; font-size: 0.8em; bottom: 0.1em; font-weight: bold;" title="连接到英语网页">(英语)</span>.</cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fzh.wikipedia.org%3AJSONP&rft.aufirst=Jeremiah&rft.aulast=Grossman&rft.btitle=Advanced+Web+Attack+Techniques+using+GMail&rft.date=2006-01-27&rft.genre=unknown&rft_id=http%3A%2F%2Fjeremiahgrossman.blogspot.com%2F2006%2F01%2Fadvanced-web-attack-techniques-using.html&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20060212113746/http://htmatters.net/htm/1/2005/07/evaling-JSON.cfm">eval'ing JSON</a>. 2005-07-19 <span class="reference-accessdate"> [<span class="nowrap">2011-06-27</span>]</span>. (<a rel="nofollow" class="external text" href="http://htmatters.net/htm/1/2005/07/evaling-JSON.cfm">原始内容</a>存档于2006-02-12) <span style="font-family: sans-serif; cursor: default; color:#555; font-size: 0.8em; bottom: 0.1em; font-weight: bold;" title="连接到英语网页">(英语)</span>.</cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fzh.wikipedia.org%3AJSONP&rft.btitle=eval%27ing+JSON&rft.date=2005-07-19&rft.genre=unknown&rft_id=http%3A%2F%2Fhtmatters.net%2Fhtm%2F1%2F2005%2F07%2Fevaling-JSON.cfm&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20081022182148/http://tech.groups.yahoo.com/group/json/message/82">json : Message: Re: Comments</a>. 2005-08-17 <span class="reference-accessdate"> [<span class="nowrap">2011-06-27</span>]</span>. (<a rel="nofollow" class="external text" href="http://tech.groups.yahoo.com/group/json/message/82">原始内容</a>存档于2008-10-22) <span style="font-family: sans-serif; cursor: default; color:#555; font-size: 0.8em; bottom: 0.1em; font-weight: bold;" title="连接到英语网页">(英语)</span>.</cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fzh.wikipedia.org%3AJSONP&rft.btitle=json+%3A+Message%3A+Re%3A+Comments&rft.date=2005-08-17&rft.genre=unknown&rft_id=http%3A%2F%2Ftech.groups.yahoo.com%2Fgroup%2Fjson%2Fmessage%2F82&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20091204053053/http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">Remote JSON - JSONP</a>. from __future__ import *. Bob.pythonmac.org. 2005-12-05 <span class="reference-accessdate"> [<span class="nowrap">2008-09-08</span>]</span>. (<a rel="nofollow" class="external text" href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">原始内容</a>存档于2009-12-04) <span style="font-family: sans-serif; cursor: default; color:#555; font-size: 0.8em; bottom: 0.1em; font-weight: bold;" title="连接到英语网页">(英语)</span>.</cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fzh.wikipedia.org%3AJSONP&rft.atitle=Remote+JSON+-+JSONP&rft.date=2005-12-05&rft.genre=unknown&rft.jtitle=from+__future__+import+%2A&rft_id=http%3A%2F%2Fbob.pythonmac.org%2Farchives%2F2005%2F12%2F05%2Fremote-json-jsonp%2F&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web"><a rel="nofollow" class="external text" href="https://www.webcitation.org/6Djo88laj?url=http://www.gwtapps.com/?p=42">GWT Tutorial: How to Read Web Services Client-Side with JSONP</a>. Google Web Toolkit Applications. February 6, 2008 <span class="reference-accessdate"> [<span class="nowrap">2009-07-03</span>]</span>. (<a rel="nofollow" class="external text" href="http://www.gwtapps.com/?p=42">原始内容</a>存档于2013-01-17) <span style="font-family: sans-serif; cursor: default; color:#555; font-size: 0.8em; bottom: 0.1em; font-weight: bold;" title="连接到英语网页">(英语)</span>.</cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fzh.wikipedia.org%3AJSONP&rft.atitle=GWT+Tutorial%3A+How+to+Read+Web+Services+Client-Side+with+JSONP&rft.date=2008-02-06&rft.genre=unknown&rft.jtitle=Google+Web+Toolkit+Applications&rft_id=http%3A%2F%2Fwww.gwtapps.com%2F%3Fp%3D42&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;"> </span></span></span></li></ol></div><h2><span id=".E5.A4.96.E9.83.A8.E9.80.A3.E7.B5.90"></span><span class="mw-headline" id="外部連結">外部連結</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=JSONP&action=edit&section=8" title="编辑章节:外部連結">编辑</a><span class="mw-editsection-bracket">]</span></span></h2><ul><li><cite class="citation web"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160304044218/http://www.json-p.org/">JSONP首頁</a>. <span class="reference-accessdate"> [<span class="nowrap">2011-06-27</span>]</span>. (<a rel="nofollow" class="external text" href="http://www.json-p.org/">原始内容</a>存档于2016-03-04) <span style="font-family: sans-serif; cursor: default; color:#555; font-size: 0.8em; bottom: 0.1em; font-weight: bold;" title="连接到英语网页">(英语)</span>.</cite><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fzh.wikipedia.org%3AJSONP&rft.btitle=JSONP%E9%A6%96%E9%A0%81&rft.genre=unknown&rft_id=http%3A%2F%2Fwww.json-p.org%2F&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></li></ul><!-- NewPP limit reportParsed by mw1359Cached time: 20230104191026Cache expiry: 1814400Reduced expiry: falseComplications: [show‐toc]CPU time usage: 0.321 secondsReal time usage: 0.359 secondsPreprocessor visited node count: 582/1000000Post‐expand include size: 210156/2097152 bytesTemplate argument size: 417/2097152 bytesHighest expansion depth: 8/100Expensive parser function count: 4/500Unstrip recursion depth: 0/20Unstrip post‐expand size: 8447/5000000 bytesLua time usage: 0.143/10.000 secondsLua memory usage: 7583680/52428800 bytesNumber of Wikibase entities loaded: 0/400--><!--Transclusion expansion time report (%,ms,calls,template)100.00% 225.047 1 -total 42.94% 96.638 1 Template:NoteTA 32.84% 73.897 1 Template:Reflist 32.44% 72.999 6 Template:Cite_web 14.29% 32.166 1 Template:Infobox_file_format 13.20% 29.705 1 Template:Infobox 1.81% 4.067 1 Template:URL 0.60% 1.361 1 Template:Column-count 0.46% 1.039 2 Template:Nowrap--><!-- Saved in parser cache with key zhwiki:pcache:idhash:1601291-0!canonical!zh and timestamp 20230104191026 and revision id 74996466. --></div></script>

Abstract from DBpedia / Wikipedia · CC BY-SA