PostmanÔÇÖda olmad─▒─č─▒ zaman JavaScript kodum neden ÔÇť─░stenilen kayna─č─▒n ├╝zerinde 'Eri┼čim Kontrol-─░zin Verme-Orijin' yok 'ba┼čl─▒─č─▒n─▒ g├ÂsteriyorÔÇŁ hatas─▒ al─▒yor?


Al─▒nan cevaba git


Ben kullanarak yetkilendirme yapmaya ├žal─▒┼č─▒yorum JavaScript ba─članarak dinlendirici API in┼ča Flask . Ancak, iste─či yapt─▒─č─▒mda a┼ča─č─▒daki hatay─▒ al─▒yorum:

XMLHttpRequest http: // myApiUrl / login dosyas─▒n─▒ y├╝kleyemiyor . ─░stenen kaynakta 'Eri┼čim Kontrol├╝-─░zin Verme-Kayna─č─▒' ba┼čl─▒─č─▒ yok. K├Âkeni 'null' bu nedenle eri┼čime izin verilmiyor.

API veya uzak kayna─č─▒n ba┼čl─▒─č─▒ ayarlamas─▒ gerekti─čini biliyorum, ancak iste─či Chrome uzant─▒ Postac─▒s─▒ ├╝zerinden yapt─▒─č─▒mda neden i┼če yarad─▒ ?

Bu istek kodu:

 $.ajax({
    type: "POST",
    dataType: 'text',
    url: api,
    username: 'user',
    password: 'pass',
    crossDomain : true,
    xhrFields: {
        withCredentials: true
    }
})
    .done(function( data ) {
        console.log("done");
    })
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
        alert(textStatus);
    });
 

2287









Cevap say─▒s─▒n─▒ say: 30






Bunu do─čru anlad─▒ysam , sayfan─▒z─▒n ├╝zerinde oldu─čundan farkl─▒ bir alana XMLHttpRequest yap─▒yorsunuz . Bu nedenle, taray─▒c─▒ g├╝venlik nedenleriyle genellikle ayn─▒ kaynaktan bir istek g├Ândermesine izin verdi─či i├žin engelliyor. Etki alanlar─▒ aras─▒ bir istek yapmak istedi─činizde farkl─▒ bir ┼čey yapman─▒z gerekir. Bunun nas─▒l sa─članaca─č─▒ hakk─▒nda bir e─čitim CORS kullan─▒m─▒d─▒r .

Postacı kullanırken, bu politika tarafından kısıtlanmamaktadır. Çapraz Kaynaklı XMLHttpRequest'ten alıntı :

Normal web sayfalar─▒, uzak sunuculardan veri g├Ândermek ve almak i├žin XMLHttpRequest nesnesini kullanabilir, ancak ayn─▒ kaynak ilkeyle s─▒n─▒rl─▒d─▒r. Uzant─▒lar ├žok s─▒n─▒rl─▒ de─čil. Bir uzant─▒, ilk ├Ânce ├žapraz men┼če izinleri istedi─či s├╝rece, men┼čei d─▒┼č─▒ndaki uzak sunucularla konu┼čabilir.


1237







Bu, ├╝retim i├žin bir d├╝zeltme de─čildir veya uygulaman─▒n m├╝┼čteriye g├Âsterilmesi gerekti─činde, bu yaln─▒zca UI ve Backend geli┼čtirme farkl─▒ sunucularda oldu─čunda ve ├╝retimde ger├žekte ayn─▒ sunucudayken yard─▒mc─▒ olur. ├ľrne─čin: Herhangi bir uygulama i├žin UI geli┼čtirirken, yerel olarak onu arka u├ž sunucuya y├Ânlendirmek i├žin test etmek gerekirse, bu senaryoda bu m├╝kemmel bir ├ž├Âz├╝md├╝r. ├ťretim d├╝zeltmesi i├žin ├žapraz kaynak eri┼čimine izin vermek i├žin arka u├ž sunucusuna CORS ba┼čl─▒klar─▒n─▒n eklenmesi gerekir.

Kolay yolu CORS kullanarak eri┼čime izin vermek i├žin uzant─▒y─▒ Google Chrome'a ÔÇőÔÇőeklemektir.

( https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=tr )

Hi├žbir 'eri┼čim denetimi-izin ver -k├Âkeni' ba┼čl─▒k iste─čine eri┼čime izin vermek istedi─činizde bu uzant─▒y─▒ etkinle┼čtirin .

Veya

Windows'ta bu komutu ├žal─▒┼čma penceresine yap─▒┼čt─▒r─▒n

 chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
 

bu, 'eri┼čim kontrol├╝-izin ver-men┼čei' ba┼čl─▒k iste─čine eri┼čime izin vermeyen yeni bir krom taray─▒c─▒ a├žar .


515







Buna kar┼č─▒l─▒k JSON ile ba┼ča ├ž─▒kabiliyorsan─▒z , alanlar aras─▒nda konu┼čmak i├žin JSONP ( sonunda P notunu) kullanmay─▒ deneyin :

 $.ajax({
  type: "POST",
  dataType: 'jsonp',
  ...... etc ......
 

JSONP ile ├žal─▒┼čmak hakk─▒nda daha fazla bilgiyi burada bulabilirsiniz :

JSONP'in ortaya ├ž─▒k─▒┼č─▒ - esasen fikir birli─či olan siteler aras─▒ komut dosyas─▒ yazma kesmesi - i├žeri─čin g├╝├žl├╝ bir araya gelmesine kap─▒ a├žt─▒. Bir├žok tan─▒nm─▒┼č site, ├Ânceden tan─▒mlanm─▒┼č bir API arac─▒l─▒─č─▒yla i├žeri─čine eri┼čmenizi sa─člayan JSONP hizmetleri sunar.


337







Uyar─▒: Bu cevab─▒ ├╝retimde kullanmak, sald─▒rganlar da dahil olmak ├╝zere URLÔÇÖye sahip olan herhangi birinin API / hizmetinizin arayabilece─či bir g├╝venlik sorununa neden olabilir. APIÔÇÖnizin / hizmetinizin bu sald─▒r─▒ya kar┼č─▒ korunmas─▒n─▒ sa─člamak i├žin kimlik do─črulamas─▒ i├žin oturumlar ve ├žerezler kullanman─▒z gerekir. API / hizmetiniz, siteler aras─▒ istek sahtecili─čine (CSRF) kar┼č─▒ savunmas─▒zd─▒r .

PHP kullan─▒yorsan─▒z ├ž├Âzmek ├žok basit . A┼ča─č─▒daki beti─či, PHP sayfan─▒z─▒n ba┼č─▒na, iste─či i┼čleyen b├Âl├╝me ekleyin:

 <?php header('Access-Control-Allow-Origin: *'); ?>
 

D├╝─č├╝m k─▒rm─▒z─▒s─▒ kullan─▒yorsan─▒z node-red/settings.js , a┼ča─č─▒daki sat─▒rlar─▒n yorumunu kald─▒rarak dosyada CORS'a izin vermeniz gerekir :

 // The following property can be used to configure cross-origin resource sharing
// in the HTTP nodes.
// See https://github.com/troygoode/node-cors#configuration-options for
// details on its contents. The following is a basic permissive set of options:
httpNodeCors: {
 origin: "*",
 methods: "GET,PUT,POST,DELETE"
},
 

E─čer Flask kullan─▒yorsan─▒z soru ayn─▒d─▒r; ilk y├╝klemek zorundas─▒n flask-cors

 $ pip install -U flask-cors
 

Ard─▒ndan uygulaman─▒za ┼či┼če kordonlar─▒n─▒ ekleyin

 from flask_cors import CORS
 

Basit bir uygulama gibi g├Âr├╝necek

 from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route("/")
def helloWorld():
  return "Hello, cross-origin-world!"
 

Daha fazla ayr─▒nt─▒ i├žin balonun belgelerine bakabilirsinizhttps://flask-cors.readthedocs.io/en/latest/


214







Birisinin bu siteyi benimle uzun zaman ├Ânce payla┼čmas─▒n─▒ dilerim: http://cors.io/ kendi vekilime dayanarak bina kurmak ve ona g├╝venmekle k─▒yasland─▒─č─▒nda ├žok zaman kazand─▒racak. Ancak, ├╝retime ge├žti─činizde, kendi proxy'nize sahip olmak, verilerinizin t├╝m y├Ânlerini hala kontrol etti─činiz i├žin en iyi bahistir.

T├╝m istedi─čin:

https://cors.io/?http://HTTP_YOUR_LINK_HERE


176







Node.js kullan─▒yorsan─▒z deneyin:

 app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
 

Daha fazla bilgi: ExpressJS'teki CORS


73







Ajax kullanarak etki alanlar─▒ aras─▒ bir sorun var. Emin ayn─▒ dosyalar─▒n─▒z─▒ eri┼čti─čini olmal─▒d─▒r http:// olmadan yolundan www. (veya eri┼čmek http://www. dahil ayn─▒ yola ve sonras─▒ www. bir yoluyla eri┼čirken taray─▒c─▒ ba┼čka bir etki olarak g├Ârd├╝─č├╝) www. Sorunun nerede oldu─čunu g├Ârmek, b├Âylece yolu. Farkl─▒ bir etki alan─▒na g├Ânderiyorsunuz ve taray─▒c─▒ orijin sorunu nedeniyle ak─▒┼č─▒ engelliyor.

E─čer API sizden talebinde ayn─▒ ana bilgisayarda yerle┼čtirilmeyen, ak─▒┼č bloke edilir ve API ile ileti┼čim kurmak i├žin ba┼čka bir yol bulmak gerekir.


66







Çünkü
$ .ajax ({t├╝r├╝: "POST" - ├ça─čr─▒lar SE├çENEKLER'e
$ (.post Aramalar - POST

Her ikisi de farkl─▒ Postac─▒lar d├╝zg├╝n "POST" ├ža─č─▒r─▒r, ancak arad─▒─č─▒m─▒zda "SE├çENEKLER" olacakt─▒r

C # web servisleri i├žin - webapi

L├╝tfen a┼ča─č─▒daki kodu <system.webServer> etiketi alt─▒ndaki web.config dosyan─▒za ekleyin. Bu ├žal─▒┼čacak

 <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
</httpProtocol>
 

L├╝tfen ajax ├ža─čr─▒s─▒nda hata yapmad─▒─č─▒n─▒zdan emin olun.

jQuery

 $.ajax({
    url: 'http://mysite.microsoft.sample.xyz.com/api/mycall',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    type: "POST", /* or type:"GET" or type:"PUT" */
    dataType: "json",
    data: {
    },
    success: function (result) {
        console.log(result);    
    },
    error: function () {
        console.log("error");
    }
});
 

A├ž─▒sal 4 say─▒s─▒ l├╝tfen bak─▒n─▒z: http://www.hubfly.com/blog/solutions/how-to-fix-angular-4-api-call-issues/

Not: E─čer i├žerik indirmek ar─▒yorsan─▒z ├╝├ž├╝nc├╝ taraf web sitesinden daha sonra bu size yard─▒mc─▒ olmayacakt─▒r . A┼ča─č─▒daki kodu deneyebilirsiniz, ancak JavaScript'i deneyemezsiniz.

 System.Net.WebClient wc = new System.Net.WebClient();
string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");
 

56







Deneyin XDomain ,

├ľzet: Saf bir JavaScript CORS alternatifi / ├žoklu doldurma. Sunucu yap─▒land─▒rmas─▒ gerekmez - ileti┼čim kurmak istedi─činiz etki alan─▒na bir proxy.html ekleyin. Bu k├╝t├╝phane b├╝t├╝n kanca XHook kullanan xhr XDomain herhangi k├╝t├╝phane ile birlikte ├žal─▒┼čmas─▒ gerekti─čini, b├Âylece.


22







E─čer istemiyorsan:

  1. Chrome'da web g├╝venli─čini devre d─▒┼č─▒ b─▒rak
  2. JSONP kullan─▒n
  3. ─░steklerinizi yeniden y├Ânlendirmek i├žin ├╝├ž├╝nc├╝ taraf bir site kullan─▒n

ve sunucunuzda CORS'un etkin oldu─čundan emin olun (burada CORS'u test edin : http://www.test-cors.org/ )

├ľyleyse iste─činizle k├Âkenli parametreyi girmeniz gerekir. Bu kaynak, taray─▒c─▒n─▒z─▒n iste─činizle g├Ânderdi─či kaynakla e┼čle┼čmelidir.

─░┼člemi burada g├Ârebilirsiniz: http://www.wikinomad.com/app/detail/Campgrounds/3591

D├╝zenleme i┼člevi, veri almak i├žin farkl─▒ bir etki alan─▒na bir GET ve POST iste─či g├Ânderir. Sorunu ├ž├Âzen orijin parametresini ayarlad─▒m. Arka u├ž bir mediaWiki motorudur.

tldr: Taray─▒c─▒n─▒z─▒n g├Ânderdi─či Origin parametresi olmas─▒ gereken ├ža─čr─▒lar─▒n─▒za "origin" parametresini ekleyin (origin parametresini bozamazs─▒n─▒z)


11







API'ma eri┼čmek i├žin AngularJS kulland─▒─č─▒mda bununla ilgili bir sorunum vard─▒. Ayn─▒ talep SoapUI 5.0 ve ColdFusion'da ├žal─▒┼čt─▒. GET y├Ântemimde zaten Access-Control-Allow-Origin ba┼čl─▒─č─▒ vard─▒.

AngularJS'nin "deneme" SE├çENEKLER─░ iste─činde bulundu─čunu ├Â─črendim . ColdFusion, varsay─▒lan olarak, OPTIONS y├Ântemini olu┼čturur, ancak ├Âzellikle bu ba┼čl─▒klara sahip de─čildir. Hata, bu SE├çENEK ├ža─čr─▒s─▒na cevap olarak ├╝retildi ve kas─▒tl─▒ olarak GET'e de─čil. APIÔÇÖma a┼ča─č─▒daki OPTIONS y├Ântemini ekledikten sonra sorun ├ž├Âz├╝ld├╝.

 <cffunction name="optionsMethod" access="remote" output="false" returntype="any" httpmethod="OPTIONS" description="Method to respond to AngularJS trial call">
    <cfheader name="Access-Control-Allow-Headers" value="Content-Type,x-requested-with,Authorization,Access-Control-Allow-Origin"> 
    <cfheader name="Access-Control-Allow-Methods" value="GET,OPTIONS">      
    <cfheader name="Access-Control-Allow-Origin" value="*">      
    <cfheader name="Access-Control-Max-Age" value="360">        
</cffunction>
 

10







Shruti'nin cevab─▒na dayanarak, gerekli arg├╝manlarla bir Chrome taray─▒c─▒ k─▒sayolu olu┼čturdum:
g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


9







Sunucudan yan─▒tlar─▒ talep ederken ayn─▒ hatayla sonu├žlanan a┼ča─č─▒daki yap─▒land─▒rmay─▒ yapt─▒m.

Sunucu taraf─▒: SparkJava ->, REST-API
─░stemcisi taraf─▒: ExtJs6 ->, Taray─▒c─▒ olu┼čturmay─▒ sa─člar

On sunucu taraf─▒nda ben yan─▒ta bu eklemek zorunda:

 Spark.get("/someRestCallToSpark", (req, res) -> {
    res.header("Access-Control-Allow-Origin", "*"); //important, otherwise its not working 
    return "some text";
 });
 

On istemci taraf─▒nda Zorundayd─▒m eklemek iste─čine bu:

 Ext.Ajax.request({
    url: "http://localhost:4567/someRestCallToSpark",
    useDefaultXhrHeader: false, //important, otherwise its not working
    success: function(response, opts) {console.log("success")},
    failure: function(response, opts) {console.log("failure")}
});
 

8







https://github.com/Rob--W/cors-anywhere/Kendi CORS proxy'nizi kurmak ve ├žal─▒┼čt─▒rmak i├žin kullanabilece─činiz https://github.com/Rob--W/cors-anywhere/ , (Node.js) kodunu sa─člar. Aktif olarak tutulur ve proxy davran─▒┼č─▒n─▒ kontrol etmek i├žin do─čru Access-Control-* cevap ba┼čl─▒klar─▒n─▒n sadece temel g├Ânderiminin ├Âtesinde bir dizi ├Âzellik sunar .

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS , taray─▒c─▒lar─▒n, istemci taraf─▒ web uygulamalar─▒n─▒n JavaScript'ten yapt─▒─č─▒ ├žapraz kaynakl─▒ istekleri nas─▒l ele ald─▒─č─▒n─▒ ve g├Ândererek hangi ba┼čl─▒klar─▒ yap─▒land─▒rman─▒z gerekti─čini ayarlaman─▒z gerekti─čini a├ž─▒klar. Sunucu, iste─činize yap─▒labilir.

Talep etmeniz ve yan─▒t alman─▒z gereken bir sitenin Access-Control-Allow-Origin yan─▒t ba┼čl─▒─č─▒n─▒ d├Ând├╝rmemesi durumunda , taray─▒c─▒lar her zaman m├╝┼čteri taraf─▒ JavaScript kodunuz taraf─▒ndan do─črudan kendisine g├Ânderilen ├žapraz kaynakl─▒ istekleri engelleyecektir. Ve e─čer ├Âyleyse site kontrol etmek ve tek ┼čey i├žin davran─▒┼č─▒n─▒ yap─▒land─▒rabilirsiniz biri de─čil edecek bu durumda i┼če istekleri-ya kendini ├žal─▒┼čt─▒rmak kendi proxy ├╝zerinden ya da a├ž─▒k bir proxy ├╝zerinden proxy olarak.

Buradaki di─čer yorumlarda belirtildi─či gibi, isteklerinizle a├ž─▒k bir proxy'ye g├╝venmemek i├žin iyi nedenler vard─▒r. Bununla birlikte, ne yapt─▒─č─▒n─▒z─▒ biliyorsan─▒z ve a├ž─▒k bir vekilin ihtiya├žlar─▒n─▒z i├žin i┼če yarad─▒─č─▒na karar verirseniz, https://cors-anywhere.herokuapp.com/ , g├╝venilir bir ┼čekilde kullan─▒labilir, aktif bir ┼čekilde korunan ve bunun bir ├Ârne─čini ├žal─▒┼čt─▒r─▒r. https://github.com/Rob--W/cors-anywhere/ code.

Oldu─ču gibi di─čer a├ž─▒k vekiller (en az─▒ndan art─▒k kullan─▒labilir olmas─▒n─▒ g├Âr├╝nm├╝yor hangi bir ├žift), ├žal─▒┼č─▒lan yoldur yerine ├Ârne─čin istemci kod do─črudan bir istek g├Ândermek zorunda, burada s├Âz├╝ http://foo.com size g├Ândermek https://cors-anywhere.herokuapp.com/http://foo.com ve Proxy Access-Control-* , taray─▒c─▒n─▒n g├Ârd├╝─č├╝ yan─▒ta gerekli ba┼čl─▒klar─▒ ekler .


8







Sorunu, Yahoo'nun sunucular─▒ ├╝zerinden proxy yapmak i├žin YQL kullanarak sorunu atlayabilirsiniz. Bu sadece birka├ž kod sat─▒r─▒d─▒r:

 var yql_url = 'https://query.yahooapis.com/v1/public/yql';
var url = 'your api url';

$.ajax({
    'url': yql_url,
    'data': {
        'q': 'SELECT * FROM json WHERE url="'+url+'"',
        'format': 'json',
        'jsonCompat': 'new',
    },
    'dataType': 'jsonp',
    'success': function(response) {
        console.log(response);
    },
});
 

─░┼čte bir a├ž─▒klama ile link: https://vverma.net/fetch-any-json-using-jsonp-and-yql.html


8







Entity Framework kullan─▒yorsan─▒z , CORS etkinle┼čtirmi┼č olsan─▒z bile bu hatan─▒n bazen at─▒laca─č─▒ g├Âr├╝l├╝yor . Sorgunun tamamlanamamas─▒ nedeniyle hatan─▒n olu┼čtu─čunu anlad─▒m. Bunun ayn─▒ durumda ba┼čkalar─▒na da yard─▒mc─▒ olaca─č─▒n─▒ umuyorum.

A┼ča─č─▒daki kod XMLHttpRequest cannot load http://myApiUrl/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. hatay─▒ atabilir :

 using (DBContext db = new DBContext())
{
    return db.Customers.Select(x => new
    {
        Name = x.Name,
        CustomerId = x.CustomerId,
    });
}
 

Bunu d├╝zeltmek i├žin, sorgunun sonunda .ToList() veya .FirstOrDefault() sonunda bir sonland─▒rma ├ža─čr─▒s─▒ gerekir, ┼č├Âyle:

 using (DBContext db = new DBContext())
{
    return db.Customers.Select(x => new
    {
        Name = x.Name,
        CustomerId = x.CustomerId,
    }).ToList();
}
 

6







Benim durumumda JEE7 JAX-RS uygulamas─▒n─▒ kullan─▒yordum ve a┼ča─č─▒daki p├╝f noktalar─▒ benim i├žin m├╝kemmel ├žal─▒┼čt─▒:

 @GET
    @Path("{id}")
    public Response getEventData(@PathParam("id") String id) throws FileNotFoundException {
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream("/eventdata/" + id + ".json");
        JsonReader jsonReader = Json.createReader(inputStream);
        return Response.ok(jsonReader.readObject()).header("Access-Control-Allow-Origin", "*").build();
    }
 

6







Htaccess kullanarak (yaz─▒ tipi i├žin benim durumumda) ba┼čar─▒l─▒ bir ┼čekilde ├ž├Âzmeyi ba┼čard─▒m ama a├ž─▒k├žas─▒, OP biraz farkl─▒ soruyor. Ancak FileMatch desenini kullanabilir ve cros hatas─▒ vermeyecek ┼čekilde herhangi bir uzant─▒ t├╝r├╝ ekleyebilirsiniz.

 <IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>
 

https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch


6











Sunucunuz bir Springboot Uygulamas─▒ysa, l├╝tfen bu ek notu en ├╝stteki dinlenme denetleyicinize ekleyin - @CrossOrigin

┼×imdi ├žal─▒┼čmas─▒ gerekiyor. Te┼čekk├╝rler


5







Pop├╝ler soru - Bu kadar─▒n─▒ okuduysan─▒z ve ba┼čka hi├žbir ┼čey yard─▒mc─▒ olmad─▒ysa bakmak i├žin ba┼čka bir ┼čey. Akamai, Limelight veya benzeri bir CDN'niz varsa, kayna─č─▒n URI'sine sahip oldu─čunuz ├Ânbellek anahtar─▒n─▒ kontrol etmek isteyebilirsiniz. Origin ba┼čl─▒k de─čerini i├žermiyorsa, ba┼čka bir Origin'den istendi─činde ├Ânbelle─če al─▒nm─▒┼č bir yan─▒t─▒ iade ediyor olabilirsiniz. Yar─▒m g├╝n├╝n├╝ bu hata ay─▒klama i├žin harcad─▒k. CDN yap─▒land─▒rmas─▒, yaln─▒zca bizim olan ve baz─▒ di─čer alanlar i├žin null de─čerine ayarlanm─▒┼č birka├ž alan i├žin Origin de─čerini i├žerecek ┼čekilde g├╝ncellendi. Bu i┼če yar─▒yor ve bilinen alanlar─▒m─▒zdan gelen taray─▒c─▒lar─▒n kaynaklar─▒m─▒z─▒ g├Âr├╝nt├╝lemesini sa─čl─▒yor. Ku┼čkusuz, t├╝m di─čer cevaplar buraya gelmek i├žin ├Ân ┼čartlard─▒r, ancak CDN taray─▒c─▒n─▒zdan ilk atlama ise, bu g├Âzden ge├žirilecek bir ┼čeydir.

Bizim durumumuzda, hizmetimize yapt─▒─č─▒m─▒z baz─▒ talepleri g├Ârebiliyoruz, ancak sitenin g├Ânderdi─či hacmi neredeyse de─čil. Bu bizi CDN'ye ├žekti. Geri d├Ânebildik ve orijinal iste─čin bir taray─▒c─▒ AJAX ├ža─čr─▒s─▒n─▒n par├žas─▒ de─čil do─črudan bir istek taraf─▒ndan sunuldu─čunu g├Ârd├╝k ve yan─▒t ba┼čl─▒─č─▒ Access-Control-Allow-Origin yan─▒t─▒ dahil edilmedi. G├Âr├╝n├╝┼če g├Âre CDN bu de─čeri ├Ânbelle─če ald─▒. Akamai CDN yap─▒land─▒rmas─▒, Origin iste─či ba┼čl─▒k de─čerini, e┼čle┼čmenin bir par├žas─▒ olarak g├Ârmeyi ayarlad─▒, bizim i├žin ├žal─▒┼čmas─▒n─▒ sa─člad─▒.


4







GoLang API'si i├žin:

├ľncelikle CORS'un ne oldu─čunu bilmek i├žin MDN CORS Doc'a g├Âz atabilirsiniz . Bildi─čim kadar─▒yla CORS, ─░ste─čin K├Âkeni'nin Sunucu Kayna─č─▒na eri┼čmesine izin verip vermeyece─či ile ilgili.

Ayr─▒ca Sunucu Yan─▒t─▒ ayar─▒n─▒ Access-Control-Allow-Origin yaparak hangi istek kayna─č─▒n─▒n sunucuya eri┼čebilece─čini s─▒n─▒rlayabilirsiniz Header .

├ľrne─čin, Sunucu Yan─▒t─▒nda a┼ča─č─▒daki ba┼čl─▒─č─▒n ayarlanmas─▒, yaln─▒zca g├Ânderilen iste─čin http://foo.example sunucunuza eri┼čebilece─či anlam─▒na gelir :

 Access-Control-Allow-Origin: http://foo.example
 

ve a┼ča─č─▒dakilerden herhangi bir kaynaktan (veya etki alan─▒ndan) g├Ânderilen izin iste─čini kabul et:

 Access-Control-Allow-Origin: *
 

Ve hata mesaj─▒nda ÔÇőÔÇőbildi─čim gibi requested resource , sunucunun kayna─č─▒ anlam─▒na gelir, yani Sunucu Yan─▒t─▒n─▒za ba┼čl─▒k No 'Access-Control-Allow-Origin' header is present on the requested resource. koymad─▒─č─▒n─▒z anlam─▒na gelir Access-Control-Allow-Origin , ya da belki de ayarlars─▒n─▒z ancak iste─čin kayna─č─▒ liste i├žinde de─čildir, Access-Control-Allow-Origin bu nedenle talebe izin verilmez:

─░stenen kaynakta 'Eri┼čim Kontrol├╝-─░zin Verme-Kayna─č─▒' ba┼čl─▒─č─▒ yok. K├Âkeni 'null' bu nedenle eri┼čime izin verilmiyor.

GoLang'da gorilla/mux API sunucusu olu┼čturmak i├žin paket kullan─▒yorum ve CORS'a yan─▒t ba┼čl─▒─č─▒na localhost:9091 ekleyerek izin veriyorum "Access-Control-Allow-Origin", "*" :

 func main() { // API Server Code
    router := mux.NewRouter()
    // API route is /people,
    //Methods("GET", "OPTIONS") means it support GET, OPTIONS
    router.HandleFunc("/people", GetPeople).Methods("GET", "OPTIONS")
    log.Fatal(http.ListenAndServe(":9091", router))
}

// Method of '/people' route
func GetPeople(w http.ResponseWriter, r *http.Request) {

    // Allow CORS by setting * in sever response
    w.Header().Set("Access-Control-Allow-Origin", "*")

    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    json.NewEncoder(w).Encode("OKOK")
}
 

Ve istemcide JavaScript kullan─▒yorum, localhost:9092 Chrome'un iste─či ├╝zerine Sunucu'dan ba┼čar─▒yla "OKOK" alabilir localhost:9091 .

 function GetPeople() {
    try {
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", "http://localhost:9091/people", false);
        xhttp.setRequestHeader("Content-type", "text/html");
        xhttp.send();
        var response = JSON.parse(xhttp.response);
        alert(xhttp.response);
    }
    catch (error) {
        alert(error.message);
    }
}
 

Yan─▒ s─▒ra, istek / cevap ba┼čl─▒─č─▒n─▒ gibi ara├žlar ile kontrol edebilirsiniz Fiddler .


4







Taray─▒c─▒dan bu hata mesaj─▒n─▒ al─▒rsan─▒z:

 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'ÔÇŽ' is therefore not allowed access
 

kontrol├╝n├╝z d─▒┼č─▒nda olan uzaktaki bir sunucuya Ajax POST / GET iste─či yapmaya ├žal─▒┼č─▒rken, l├╝tfen bu basit d├╝zeltmeyi unutmay─▒n:

 <?php header('Access-Control-Allow-Origin: *'); ?>
 

Ger├žekten de, ├Âzellikle sorgunuzu al─▒p uzak sunucuya g├Ânderen bir i├ž proxy olan Ajax iste─činde bulunmak i├žin JavaScript kullan─▒yorsan─▒z.

─░lk ├Ânce JavaScript kodunuzda, kendi sunucunuza Ajax aramas─▒ yap─▒n;

 $.ajax({
    url: yourserver.com/controller/proxy.php,
    async: false,
    type: "POST",
    dataType: "json",
    data: data,
    success: function (result) {
        JSON.parse(result);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr);
    }
});
 

Ard─▒ndan, POST verilerinizi sarmak ve bunlar─▒ uzak URL sunucusuna parametre olarak eklemek i├žin proxy.php adl─▒ basit bir PHP dosyas─▒ olu┼čturun. Expedia Otel arama API's─▒nda bu sorunu nas─▒l atlad─▒─č─▒m─▒ size ├Ârnek olarak verece─čim:

 if (isset($_POST)) {
  $apiKey = $_POST['apiKey'];
  $cid = $_POST['cid'];
  $minorRev = 99;

  $url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . '&' . 'minorRev=' . $minorRev . '&' . 'apiKey=' . $apiKey;

  echo json_encode(file_get_contents($url));
 }
 

Yaparak:

 echo json_encode(file_get_contents($url));
 

Sadece ayn─▒ sorguyu yap─▒yorsunuz, ancak sunucu taraf─▒nda ve bundan sonra, iyi ├žal─▒┼čmas─▒ gerekir.

Cevap NizarBsb'den kopyaland─▒ ve yap─▒┼čt─▒r─▒ld─▒https://stackoverflow.com/users/1106312/nizar-bsb


4







Bunu arka u├žta (Flask'ta) ├Ân u├žtan ziyade d├╝zeltmek istemeniz durumunda, Flask CORS Python paketini kesinlikle tavsiye ederim. ┼×i┼česi CORS

App.py'nizdeki basit bir sat─▒rla, standard─▒ otomatik olarak ekleyebilir, herhangi bir kaynak ba┼čl─▒─ča izin verebilir veya istedi─činiz ┼čekilde ├Âzelle┼čtirebilirsiniz.


4







JavascriptÔÇÖten php apiÔÇÖye kadar bir├žok kez bu ba┼č─▒ma geliyor, ├ž├╝nk├╝ birka├ž nedenden biri. <?php header('Access-Control-Allow-Origin: *'); ? Birini koymak i├žin unuttum . Bu, alt etki alan─▒ eri┼čimi i├žin faydal─▒d─▒r. Di─čer bir neden ise, jQuery ajax iste─činde belirli bir dataType belirtip farkl─▒ bir dataType verdi─čim i├žin bir hata veriyor.

Bu hatan─▒n en son ve en belirgin nedeni, talep etti─činiz sayfada ayr─▒┼čt─▒rma hatas─▒ olmas─▒d─▒r. Taray─▒c─▒n─▒zda bu URLÔÇÖyi t─▒klad─▒─č─▒n─▒zda, b├╝y├╝k olas─▒l─▒kla fazla bir ├ž├Âz├╝mleme hatas─▒ g├Âr├╝rs├╝n├╝z ve sorunu gidermek i├žin bir sat─▒r numaras─▒na sahip olursunuz.

Umar─▒m bu birine yard─▒mc─▒ olur. Bu hata ay─▒klama her zaman biraz zaman ald─▒ ve do─črulamak i├žin bir kontrol listesi olsayd─▒.


3







Bir JSONP iste─činde "jsonpCallback" ─▒ yakalay─▒p geri g├Ândermelisiniz:

 $.ajax({
      url: lnk,
      type: 'GET',
      crossDomain: true,
      dataType: 'jsonp',
      success: function (ip) { console.log(ip.ip); },
      error: function (err) { console.log(err) }
});
 

Arka u├ž taraf─▒nda (arka u├ž olarak PHP kullan─▒yorsan─▒z):

 echo $_GET['callback'].'({"ip":"192.168.1.1"})';
 

Bu durumda, arka u├ž yan─▒t─▒ a┼ča─č─▒daki gibidir:

jQuery331009526199802841284_1533646326884 ({ "ip": "192.168.1.1"})

Ancak, ├Ân u├žta el ile bir "jsonpCallback" ayarlayabilir ve arka u├ž taraf─▒ndan yakalayabilirsiniz:

 $.ajax({
      url: lnk,
      type: 'GET',
      crossDomain: true,
      dataType: 'jsonp',
      jsonpCallback: 'get_ip',
      success: function (ip) { console.log(ip.ip); },
      error: function (err) { console.log(err) }
});
 

Bu durumda, arka u├ž yan─▒t─▒ a┼ča─č─▒daki gibidir:

get_ip ({ "ip": "192.168.1.1"})


3







Bu yan─▒tlar─▒n ├žo─ču, kullan─▒c─▒lara CORS ├╝stbilgilerini kontrol ettikleri bir sunucuya nas─▒l ekleyeceklerini s├Âyler.

Bununla birlikte, bir web sayfas─▒nda kontrol etmedi─činiz bir sunucudan veriye ihtiyac─▒n─▒z varsa, ├ž├Âz├╝mlerden biri sayfan─▒zda bir komut dosyas─▒ etiketi olu┼čturmakt─▒r, src niteli─čini CORS ba┼čl─▒klar─▒ olmayan API u├ž noktas─▒na ayarlay─▒n, ard─▒ndan bu verileri y├╝kleyin. sayfaya:

 window.handleData = function(data) {
  console.log(data)
};

var script = document.createElement('script');
script.setAttribute('src','https://some.api/without/cors/headers.com&callback=handleData');
document.body.appendChild(script);
 

3







Bu hatay─▒ $http.get A├ž─▒sal olarak ald─▒m . Bunun $http.jsonp yerine kullanmam gerekiyordu .


2







Web sitemde (.NET tabanl─▒) Bunu yeni ekledim:

 <system.webServer>
 <httpProtocol>  
    <customHeaders>  
     <add name="Access-Control-Allow-Origin" value="*" />  
     <add name="Access-Control-Allow-Headers" value="Content-Type" />  
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />  
    </customHeaders>  
  </httpProtocol>         
</system.webServer>
 

Bu video i├žin ├žok te┼čekk├╝rler .


2







CORS sizin i├žin.

CORS, "├çapraz K├Âkenli Kaynak Payla┼č─▒m─▒" d─▒r ve etki alanlar─▒ aras─▒ istek g├Ândermenin bir yoludur. ┼×imdi hem XMLHttpRequest2 hem de Fetch API's─▒ CORS'u destekliyor.

Ancak bunun s─▒n─▒rlar─▒ var. Sunucunun Eri┼čim Denetimi-─░zin Verme-Orijini i├žin belirli bir hak talebinde bulunmas─▒ gerekir ve '*' olarak ayarlanamaz.

Herhangi bir kayna─č─▒n size istek g├Ânderebilmesini istiyorsan─▒z, JSONP'ye ihtiyac─▒n─▒z var ( Access-Control-Allow-Origin ayar─▒na da ihtiyac─▒n─▒z var , ancak '*' olabilir).

Neyi se├žece─činizi bilmiyorsan─▒z, ├žok say─▒da istek yolu i├žin, bunu yapmak i├žin tamamen i┼člevsel bir bile┼čene ihtiyac─▒n─▒z oldu─čunu d├╝┼č├╝n├╝yorum. Basit bir bile┼čen catta tan─▒tmama izin verinhttps://github.com/Joker-Jelly/catta


Modern bir taray─▒c─▒ kullan─▒yorsan─▒z (> Internet Explorer9, Chrome, Firefox, Edge, vb.), Basit ama g├╝zel bir bile┼čen kullanman─▒z ├Ânerilir, https://github.com/Joker-Jelly/catta . Ba─č─▒ml─▒l─▒─č─▒ yoktur, 3 KB'den k├╝├ž├╝kt├╝r ve ayn─▒ basit s├Âzdizimi ve se├ženekleriyle Fetch, Ajax ve JSONP'yi destekler.

 catta('./data/simple.json').then(function (res) {
  console.log(res);
});
 

Ayr─▒ca ES6 mod├╝l├╝, CommonJS ve hatta <script> HTML gibi projenize alma i┼člemlerini destekler .


2



─░lgili yay─▒nlar


Access-Control-Allow-Origin ba┼čl─▒─č─▒ nas─▒l ├žal─▒┼č─▒r?

REST API'sinden veri almaya ├žal─▒┼č─▒rken istenen kaynakta 'Eri┼čim Kontrol├╝-─░zin Verme-Ba┼čl─▒─č─▒' ba┼čl─▒─č─▒ bulunmuyor

─░stenen kaynakta 'Eri┼čim Kontrol├╝-─░zin Verme-Kayna─č─▒' ba┼čl─▒─č─▒ yok. K├Âkeni 'ÔÇŽ' eri┼čimine izin verilmiyor

MVC web api: ─░stenen kaynakta 'Eri┼čim Kontrol├╝-─░zin-K├Âken'e' ba┼čl─▒─č─▒ yok

jQuery xml hatas─▒ '─░stenilen kaynak ├╝zerinde' Eri┼čim Kontrol-─░zin Verme-K├Âken Yok 'ba┼čl─▒─č─▒ var.'

XMLHttpRequest, XXX No 'Access-Control-Allow-Origin' ba┼čl─▒─č─▒n─▒ y├╝kleyemiyor

─░stenen kaynak hatas─▒nda 'Eri┼čim Kontrol├╝-─░zin Verme-Ba┼čl─▒─č─▒' ba┼čl─▒─č─▒ yok

─░stenen kaynak ├╝zerinde 'Eri┼čim Kontrol├╝-─░zin Verme-Ba┼čl─▒─č─▒' ba┼čl─▒─č─▒ bulunmuyor - AngularJS

Bahar CORS 'Eri┼čim Kontrol-─░zin-K├Âken' ba┼čl─▒─č─▒ yok

API A─č Ge├židi CORS: 'Eri┼čim Kontrol├╝-─░zin-K├Âken' ba┼čl─▒─č─▒ yok

Etiketle ilgili di─čer sorular [jquery]


Bir GitHub ├žatal deposunu nas─▒l g├╝ncellerim?

Ne zaman bir s─▒n─▒f vs bir yap─▒ C++ kullanmal─▒s─▒n─▒z?

ana dal ve 'k├Âkeni / ana' birbirinden uzakla┼čt─▒, 'dallar─▒' nas─▒l 'ayr─▒lmal─▒'?

Ayarlar─▒ app.config veya web.config'ten .net'te okuma

Taray─▒c─▒ g├Âr├╝n├╝m penceresi boyutlar─▒n─▒ JavaScript ile al─▒n

Birim testi, Entegrasyon Testi, Duman testi, Regresyon Testi nedir?

Mevcut bir geri ├ža─č─▒rma API'sini vaatlere nas─▒l d├Ân├╝┼čt├╝r├╝r├╝m?

Bir arg├╝man ve bir parametre aras─▒ndaki fark nedir?

Linux'ta Epoch'tan bu yana saniye cinsinden ge├žerli saati al─▒n

T├╝m sunucu taraf─▒ kodu i├žin ConfigureAwait'i ├ža─č─▒rmak i├žin en iyi y├Ântem