questions - what is javascript




কৌণিক $ http পুট/পোস্টের পরিবর্তে বিকল্পগুলি প্রেরণ করছে (2)

আমি কোনও পিএইচপি ব্যাকএন্ডের মাধ্যমে মাইএসকিউএল ডাটাবেসে ডেটা আপডেট / সন্নিবেশ করার চেষ্টা করছি। আমি অ্যাংুলারজেএস দিয়ে ফ্রন্ট এন্ড তৈরি করছি এবং REST এপিআইয়ের সাথে যোগাযোগের জন্য $http পরিষেবাটি ব্যবহার করছি।

আমার সেটআপটি দেখতে এমন দেখাচ্ছে:

আমি $ HTTP সরবরাহকারীর মাধ্যমে শিরোনামটি সেট করছি:

 $httpProvider.defaults.withCredentials = true;
 $httpProvider.defaults.headers = {'Content-Type': 'application/json;charset=utf-8'};

এবং পোষ্ট-কলটি দেখে মনে হচ্ছে:

   return $http({
      url: url,
      method: "POST",
      data: campaign
    });

ক্রোমের ডেভ কনসোল আমাকে এটি দেখায়:

আমি যখন POST থেকে PUT এ পরিবর্তন করি, আমি পরিবর্তে একটি PUT একটি অপশন কল পাঠাচ্ছি। এবং কন্টেন্ট-টাইপ কেবল কন্টেন্ট-টাইপ পরিবর্তন করে।

আমার অনুরোধের পেডলোডটি একটি বিষয় হিসাবে প্রেরণ করা হয়েছে:

আমি কীভাবে আমার শিরোনামটি সঠিকভাবে সেট করব?

সম্পাদনা করুন:

পিএইচপি ব্যাকেন্ডে কিছু শিরোনাম সেট করে:

   $e->getResponse()
              ->getHeaders()
              ->addHeaderLine('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

   $e->getResponse()
              ->getHeaders()
              ->addHeaderLine('Access-Control-Allow-Origin', '*');

কিছু অনুপস্থিত আছে?


আপনাকে নিজের $http শিরোনামগুলি ম্যানুয়ালি নির্দিষ্ট করার দরকার নেই, এটি সব আপনার পর্দার আড়ালেই করা হয়ে গেছে এবং সেগুলি POST এবং PUT টাইপের অনুরোধগুলির জন্য স্বয়ংক্রিয়ভাবে application/json সেট হয়ে যায়। সুতরাং আপনার যা করা উচিত তা হ'ল

$http.post(url, data);
$http.put(url, data);

ঠিক আছে, আমি এটি সমাধান করেছি।

সমস্যা কি ছিল?
ডিলিট, পুট এবং পোস্টের জন্য CORS ওয়ার্কফ্লো নিম্নরূপ:

এটি যা করে তা হ'ল:

  1. কোন অনুরোধ করা হবে তা যাচাই করা হচ্ছে
  2. এটি পোস্ট, পুট বা মুছে ফেললে
  3. এটি যে ডোমেনটি থেকে অনুরোধটি প্রেরণ করা হয়েছে এটি সার্ভার থেকে প্রাপ্ত অনুরূপ কিনা তা পরীক্ষা করার জন্য প্রথমে একটি বিকল্প অনুরোধ প্রেরণ করে।
  4. যদি তা না হয় তবে এটি চায় যে কোনও অ্যাক্সেস-শিরোনামকে এই অনুরোধটি প্রেরণের অনুমতি দেওয়া হোক

এখানে গুরুত্বপূর্ণ: একটি বিকল্পের অনুরোধ শংসাপত্রগুলি প্রেরণ করে না

সুতরাং আমার ব্যাকএন্ড সার্ভার PUT অনুরোধটি অস্বীকার করে।

সমাধান:
এটি .htaccess ফাইলের মধ্যে রেখে দেওয়া হচ্ছে

RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ blank.php [QSA,L]
Header set Access-Control-Allow-Origin "http://sub.domain:3000"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"

এর পরে, পাবলিক ফোল্ডারের ভিতরে একটি ফাঁকা। Php ফাইল তৈরি করুন k

সম্পাদনা: একজন মন্তব্যকারী উল্লেখ করেছেন যে, খালি পিএইচপি ফাইল তৈরির পরিবর্তে, আপনি নিজের .htaccess ফাইলটিতে এই পুনর্লিখনের নিয়মটি যুক্ত করতে পারেন \;

RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]

স্পষ্ট করা:

  1. আমি ইতিমধ্যে অ্যাক্সেস-নিয়ন্ত্রণ-শিরোনাম প্রেরণ করেছি
  2. এটি কী সমাধান করেছিল তা প্রথম দুটি লাইন ছিল এবং
  3. পোর্ট সহ নির্দিষ্ট সাবডোমেন থেকে অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স

সিওআরএস সম্পর্কে আরও জানার জন্য আমি খুঁজে পেতে পারি সেরা ওয়েবসাইট।





angularjs