hurriyet / developers.hurriyet.com.tr

Hurriyet Public API dökümantasyonu
https://developers.hurriyet.com.tr
GNU General Public License v3.0
70 stars 10 forks source link

AngularJS Access-Control-Allow-Origin Sorunu #11

Closed eravse closed 8 years ago

eravse commented 8 years ago

Header üzerinde cross origin parametreleri belirtilmesine rağmen AngularJs üzerinde hata alınmaktadır headers: {

                        'Access-Control-Allow-Origin': '*',
                        'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
                        'Access-Control-Allow-Headers': 'Content-Type, X-Requested-With',
                        //'Accept': 'application/json; odata=verbose',
                        'apikey': 'kaslkdşaksşd',

                    },

Browser Console Hata Satırı :

Default.aspx?SPHostUrl=https%3A%2F%2Fabcsharepoint.com&SPLanguage=en-US&SPClientTag=0&SPPr…:1 XMLHttpRequest cannot load https://api.hurriyet.com.tr/v1/pages. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://abc.sharepoint.com' is therefore not allowed access. The response had HTTP status code 401.

yigitozkavci commented 8 years ago

Merhabalar. Datayı client tarafından xhr ile almaya çalıştığınız için bu sorunla karşılaşıyorsunuz. Access-Control-Allow-Origin header'ının request'te değil, response'da, yani server'dan gelen header'ların içinde olması lazım ve çoğunlukla güvenlik sebebiyle konulmaz. Yapabileceğiniz şey şu:

AngularJS ile direkt api'a request atmak yerine api operasyonlarını kendi server'ınızdan yapıp AngularJS ile yazılmış client'ınızın kendi server'ınızı kullanmasıyla bu sorunu çözebilirsiniz. Mesela:

Client ---(GET /pages)--> Server ---(GET https://api.hurriyet.com.tr/v1/pages )--> HurriyetAPI

Not: projede yetkili değilim ve CORS problemi burada da ayrıca açıklanıyor: http://stackoverflow.com/a/23824093/3138171

eravse commented 8 years ago

Tabiki bu seçenek düşünüldü ama sistemi de test etmek amacı ile direk request atmak istedim. ayrıca Jsonp callback ile de deniyorum http 500 alıyorum.

ayrı bir server yazıp direk oradan okumak daha mantıklı olacak sizin dediğiniz gibi.