﻿
{"id":9969,"date":"2018-12-10T18:20:49","date_gmt":"2018-12-10T18:20:49","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=9969"},"modified":"2018-12-10T18:20:49","modified_gmt":"2018-12-10T18:20:49","slug":"node-js-cors-paketiyle-access-control-allow-origin-guvenlik-yonetimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/node-js-cors-paketiyle-access-control-allow-origin-guvenlik-yonetimi\/","title":{"rendered":"Node.js &#8211; Cors Paketiyle &#8216;Access-Control-Allow-Origin&#8217; G\u00fcvenlik Y\u00f6netimi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Node.js temelli geli\u015ftirilen bir sunucunun API&#8217;lar\u0131n\u0131 kullanabilmek i\u00e7in varsay\u0131lan &#8216;Access-Control-Allow-Origin&#8217; g\u00fcvenli\u011fini a\u015fabilmemiz gerekmektedir. Sunucu taraf\u0131ndan hangi adreslerin API&#8217;lara eri\u015febilece\u011fini ayarlamal\u0131 ve bu do\u011frultuda eri\u015fim politikalar\u0131n\u0131 belirlemeliyiz.<\/p>\n<p>Cors ayarlamas\u0131 yap\u0131lmayan bir sunucuya yap\u0131lan talep neticesinde g\u00fcvenlik gere\u011fi do\u011fal refleks devreye girecek ve a\u015fa\u011f\u0131daki hata mesaj\u0131 f\u0131rlat\u0131lacakt\u0131r.<\/p>\n<blockquote><p><span style=\"color: #339966; font-size: 11px;\"><em><strong>Access to XMLHttpRequest at &#8216;http:\/\/localhost:5000\/xyz&#8217; from origin &#8216;http:\/\/xyz.com&#8217; has been blocked by CORS policy: Response to preflight request doesn&#8217;t pass access control check: No &#8216;Access-Control-Allow-Origin&#8217; header is present on the requested resource.<\/strong><\/em><\/span><\/p><\/blockquote>\n<p>\u0130lgili hatadan kurtulabilmek ve sunucunun API&#8217;lar\u0131n\u0131 s\u0131k\u0131nt\u0131s\u0131z kullanabilmek i\u00e7in\u00a0\u00f6zel olarak tasarlanan <a href=\"https:\/\/github.com\/expressjs\/cors\" target=\"_blank\" rel=\"noopener\">cors<\/a> middleware&#8217;\u0131n\u0131 kullanabiliriz.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nnpm install cors --save\r\n<\/pre>\n<p>Paketi sunucuya install ettikten sonra a\u015fa\u011f\u0131daki gibi middleware olarak uygulamaya eklememiz, d\u0131\u015far\u0131dan herhangi bir adres \u00fczerinden gelecek t\u00fcm talepler i\u00e7in g\u00fcvenli\u011fin kald\u0131r\u0131ld\u0131\u011f\u0131 anlam\u0131na gelmekte ve s\u0131k\u0131nt\u0131s\u0131z bir \u015fekilde gelen t\u00fcm taleplerin i\u015flenece\u011fi belirtilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/Modul Variables\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\nvar cors = require(&quot;cors&quot;)\r\n\r\napp.use(cors());\r\n\r\n\/\/Router Variables\r\nconst employeeRouter = require(&quot;.\/routers\/employeeRouter&quot;);\r\nconst tokenRouter = require(&quot;.\/routers\/tokenRouter&quot;);\r\nconst userRouter = require(&quot;.\/routers\/userRouter&quot;);\r\nconst orderRouter = require(&quot;.\/routers\/orderRouter&quot;);\r\n\r\n\/\/Routers\r\napp.use(&quot;\/&quot;, employeeRouter);\r\napp.use(&quot;\/token&quot;, tokenRouter);\r\napp.use(&quot;\/user&quot;, userRouter);\r\napp.use(&quot;\/order&quot;, orderRouter);\r\n\r\napp.listen(5000, () =&gt; console.log(&quot;Yay\u0131n ba\u015flad\u0131...&quot;));\r\n<\/pre>\n<p>Ayriyetten a\u015fa\u011f\u0131daki gibi bir kullan\u0131m ile de belli bir route&#8217;a \u00f6zel cors ayarlamas\u0131 yap\u0131labilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/Modul Variables\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\nvar cors = require(&quot;cors&quot;)\r\n\r\napp.get(&quot;\/page1&quot;, cors(), (request, response, next) =&gt; {\r\n     response.json(&quot;...&quot;);\r\n});\r\n\r\napp.get(&quot;\/page2&quot;, (request, response, next) =&gt; {\r\n     response.json(&quot;...&quot;);\r\n});\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Sunucu API&#8217;lar\u0131n\u0131 kullanacak kaynak adresi direkt olarak konfigure edebilmek i\u00e7in a\u015fa\u011f\u0131daki gibi i\u015flem uygulayabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/Modul Variables\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\nvar cors = require(&quot;cors&quot;)\r\n\r\nvar corsOptions = {\r\n     origin: 'http:\/\/localhost:4200',\r\n     optionsSuccessStatus: 200\r\n}\r\n\r\napp.get(&quot;\/page1&quot;, cors(corsOptions), (request, response, next) =&gt; {\r\n     response.json(&quot;...&quot;);\r\n});\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Burada &#8220;\/page1&#8221; route&#8217;unu, sade ve sadece &#8220;http:\/\/localhost:4200&#8221; adresinden gelecek talepler neticesinde tetikleyecektir. Bu adres d\u0131\u015f\u0131ndaki t\u00fcm talepler &#8216;Access-Control-Allow-Origin&#8217; hatas\u0131yla kar\u015f\u0131la\u015facakt\u0131r.<\/p>\n<p>E\u011fer ki, birden fazla adresi konfigure etmek istiyorsan\u0131z a\u015fa\u011f\u0131daki gibi bir whitelist tan\u0131mlamas\u0131 \u00fczerinden i\u015flemlerinizi ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/Modul Variables\r\nconst express = require(&quot;express&quot;);\r\nconst app = express();\r\nvar cors = require(&quot;cors&quot;)\r\n\r\nvar whitelist = &#x5B;'http:\/\/localhost:4200', 'http:\/\/localhost:4201']\r\nvar corsOptions = {\r\n     origin: (origin, callback) =&gt; {\r\n          if (whitelist.indexOf(origin) !== -1)\r\n               callback(null, true);\r\n          else\r\n               callback(new Error(&quot;! ! !&quot;));\r\n     }\r\n}\r\n\r\napp.get(&quot;\/page1&quot;, cors(corsOptions), (request, response, next) =&gt; {\r\n     response.json(&quot;...&quot;);\r\n});\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Evet, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere &#8220;cors&#8221; paketi sayesinde Node.js serverlar\u0131ndaki &#8216;Access-Control-Allow-Origin&#8217; hatas\u0131ndan kurtulunabilmekte ve belirlenen adreslere API eri\u015fim konfig\u00fcrasyonu sa\u011flanabilmektedir.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Node.js temelli geli\u015ftirilen bir sunucunun API&#8217;lar\u0131n\u0131 kullanabilmek i\u00e7in varsay\u0131lan &#8216;Access-Control-Allow-Origin&#8217; g\u00fcvenli\u011fini a\u015fabilmemiz gerekmektedir. Sunucu taraf\u0131ndan hangi adreslerin API&#8217;lara eri\u015febilece\u011fini ayarlamal\u0131 ve bu do\u011frultuda eri\u015fim politikalar\u0131n\u0131 belirlemeliyiz. Cors ayarlamas\u0131 yap\u0131lmayan bir sunucuya yap\u0131lan talep&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":8600,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2145],"tags":[2235,2236,2147,2707,2708],"class_list":["post-9969","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-node-js","tag-access-control-allow-origin","tag-cors","tag-node-js","tag-node-js-access-control-allow-origin","tag-node-js-cors"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9969","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=9969"}],"version-history":[{"count":16,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9969\/revisions"}],"predecessor-version":[{"id":9985,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/9969\/revisions\/9985"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/8600"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=9969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=9969"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=9969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}