點可以呃到browser我係用緊jsonp?

我寫左個好簡單的ajax去call一個service
  1. var xhr = new XMLHttpRequest();
  2. xhr.open('GET', '//freegeoip.net/json/?callback=doCallback', true);

  3. xhr.onload = function() {
  4.         console.log(xhr.responseText);
  5. }
  6. xhr.send();
複製代碼
但我明明唔係用緊jsonp, 佢都比我過

於是我便試下改做
  1. //freegeoip.net/json
複製代碼
不出所料, 果然一改就即刻出Access-Control-Allow-Origin

兩條link明明domain一樣, 咁佢究竟憑乜判斷該http request係咪cross domain呢?

唯一解釋就係 ---->  ?callback=
所以我又嘗試將條link改為, 但今次又出Access-Control-Allow-Origin error
  1. //google.com/?callback=doCallback
複製代碼
咁browser係點知我係咪cross緊doamin, 又或者係咪用緊jsonp呢?

browser check cross domain咪直接check location.url果個domain name
至於//freegeoip.net/json/?callback=doCallback過到, 唔係代表非cross-domain, 而係代表人地service容許cross-domain連接
主流browser見唔到人地網http header有寫容許cross domain連接就當唔俾
只係freegeoip佢server side做左野, 收到?callback=doCallback時就自動header加料

TOP

browser check cross domain咪直接check location.url果個domain name
至於//freegeoip.net/json/?ca ...
KinChungE 發表於 2017-11-27 09:27



如果browser有check, 咁依個request應該係send唔到出去至岩, 但點解又send到?
//freegeoip.net/json/?callback=doCallback

其次就係cross-domain如果係由server check, 咁初當D人直接改server setting就已經可以做到cross domain exchange data, 點解仲會有jsonp依樣野被發明出黎?

TOP

如果browser有check, 咁依個request應該係send唔到出去至岩, 但點解又send到?
//freegeoip.net/json/?ca ...
3ldk 發表於 2017-11-27 15:55


ajax冇人話一定要jsonp喎
你鍾意html/xml/raw text乜都得
只係jsonp係一個exception, 唔使allow-x-origin header, 但係一定要response有翻callback入面個keyword收翻黎, 冇既話一樣係唔俾
留意下呢個: https://stackoverflow.com/questi ... p-and-jsonp-example
佢要echo $_GET['callback'], 令response一開始就出翻相同字眼先得

browser係有check cross-domain
但係佢係容許cross-domain, 不過有條件
就係要對方server容許既情況下你先可以咁做
因為唔想人用js ddos第二個web page

簡單D講, 除非人地server容許, 否則唔使諗cross domain js去攞人data
一係就自己web server響server side連去人地度, 拎完data砌埋一齊先一次過扔俾client

TOP

本帖最後由 3ldk 於 2017-11-27 16:55 編輯
ajax冇人話一定要jsonp喎
你鍾意html/xml/raw text乜都得
只係jsonp係一個exception, 唔使allow-x-origin header, 但係一定要response有翻callback入面個keyword收翻黎, 冇既話一樣係唔俾
留意下呢個: https://stackoverflow.com/questi ... p-and-jsonp-example
佢要echo $_GET['callback'], 令response一開始就出翻相同字眼先得
KinChungE 發表於 2017-11-27 16:27


你可以試下依個
//freegeoip.net/json/  <--注意最後一定要有 /

無比個callback佢, 一樣過到
   


browser係有check cross-domain
但係佢係容許cross-domain, 不過有條件
就係要對方server容許既情況下你先可以咁做
因為唔想人用js ddos第二個web page

簡單D講, 除非人地server容許, 否則唔使諗cross domain js去攞人data
一係就自己web server響server side連去人地度, 拎完data砌埋一齊先一次過扔俾client
KinChungE 發表於 2017-11-27 16:27


其實我個問題既重點就係, 點解會有jsonp出現?
既然server可以set容許cross domain
而browser見到server比, 咁佢又比的話
咁一開始只要server set好左就無依個問題, 何必仲要send多個callback出去?
就正如上面, 無send callback一樣無問題
畢竟jsonp本來只係一個workaround
既然本來就無問題, 咁點解會有workaround出現? 依點唔合羅輯

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

你可以試下依個
//freegeoip.net/json/
3ldk 發表於 2017-11-27 16:53


因為唔俾你偷人地data source用

TOP

用fetch+cors啦,仲ajax?...

TOP

回覆 8# 梁炳


  Jsonp 始終兼容性好啲

TOP

你可以試下依個
//freegeoip.net/json/
3ldk 發表於 2017-11-27 04:53 PM


唔好諗到咁複雜先


其實我個問題既重點就係, 點解會有jsonp出現?
因為IE8或以下容許咗Cross Domain 都冇用, 所以先有JSONP 出現, 就係咁簡單


//freegeoip.net/json/   無比個callback佢, 一樣過到
你可以觀察下 Chrome Developer Tools,Response Header 係有 access-control-allow-origin,有咪用,冇咪用唔到。

TOP