কীভাবে একটি অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স শিরোনাম যুক্ত করবেন


101

আমি একটি ওয়েবসাইট ডিজাইন করছি (উদাহরণস্বরূপ mywebsite.com) এবং এই সাইটটি অন্য সাইট থেকে ফন্ট-ফেস ফন্টগুলি লোড করে (বলুন অ্যানাদারসাইট ডটকম)। ফায়ারফক্সে ফন্টের ফন্ট লোড করতে আমার সমস্যা হয়েছিল এবং আমি এই ব্লগে পড়ি :

ফায়ারফক্স (যা v3.5 থেকে @ ফন্ট-ফেস সমর্থন করে) ডিফল্টরূপে ক্রস-ডোমেন ফন্টকে অনুমতি দেয় না। এর অর্থ হ'ল ফন্টটি অবশ্যই একই ডোমেন (এবং সাব-ডোমেন) থেকে পরিবেশন করা উচিত যদি না আপনি ফন্টটিতে একটি "অ্যাক্সেস-কন্ট্রোল-অলজিন-অরিজিন" শিরোনাম যোগ করতে না পারেন।

আমি কীভাবে অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স শিরোনামটি ফন্টে সেট করতে পারি?


পাওয়া যায় নি এই সম্পর্কিত: stackoverflow.com/q/14003332/1423096
আলো Malbarez

উত্তর:


165

সুতরাং আপনি যা করছেন তা হ'ল ... ফন্ট ফাইল ফোল্ডারে একটি htaccess ফাইল এতে অন্তর্ভুক্ত করুন।

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

আপনার দূরবর্তী সিএসএস ফাইলেও, ফন্ট-মুখের ঘোষণার জন্য ফন্ট-ফাইলের সম্পূর্ণ নিখুঁত URL দরকার (স্থানীয় সিএসএস ফাইলগুলিতে প্রয়োজন হয় না):

যেমন

@font-face {
    font-family: 'LeagueGothicRegular';
    src: url('http://www.example.com/css/fonts/League_Gothic.eot?') format('eot'),
         url('http://www.example.com/css/fonts/League_Gothic.woff') format('woff'),
         url('http://www.example.com/css/fonts/League_Gothic.ttf') format('truetype'),
         url('http://www.example.com/css/fonts/League_Gothic.svg')

}

এটি সমস্যার সমাধান করবে। একটি বিষয় লক্ষণীয় হ'ল আপনি যা নির্দিষ্ট করতে পারেন তা ঠিক কোন ডোমেনগুলিকে আপনার ফন্টে অ্যাক্সেস করার অনুমতি দেওয়া উচিত। উপরের htaccess এ আমি উল্লেখ করেছি যে প্রত্যেকে আমার ফন্টটি অ্যাক্সেস "*"করতে পারে তবে আপনি এটিকে সীমাবদ্ধ করতে পারেন:

একটি একক ইউআরএল:

শিরোনাম সেট অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স http://example.com

অথবা URL এর একটি কমা-বিস্মৃত তালিকা

Access-Control-Allow-Origin: http://site1.com,http://site2.com

(বর্তমান বাস্তবায়নে একাধিক মান সমর্থিত নয়)


4
আপনাকে পুরো পথ ব্যবহার করতে হবে না। url('/fonts/League_Gothic.woff') format('woff')আপনি 'ফন্টস' ফোল্ডারটিকে আপনার সিএসএস ফাইলের মতো একই ডিয়ারে রেখেছেন বলে ধরে নেওয়া সহজ Simple
স্ট্রেওজেক্ট

4
এই সমাধানটি ক্রস ডোমেন .ajax অনুরোধগুলির জন্যও বৈধ !! চমৎকার!
ইসহাক

4
@ স্ট্রেওজেক্ট - দূরবর্তী সিএসএস ফাইলের পুরো পথ ব্যবহার করা প্রয়োজন। স্থানীয় সিএসএস ফাইলের দরকার নেই।
মাজতেটক

একাধিক ইউআরএল, কমা-বিস্মৃত বা অন্যথায় শ্বেত তালিকাভুক্ত করা দৃশ্যত সম্ভব নয়; দেখতে বাগ 671608
Tgr

4
এই উত্তরটি ( স্ট্যাকওভারফ্লো.com/ a/ 4110601 ) মনে হয় যে কমা দ্বারা পৃথক করা তালিকা কাজ করে না
আসফ

21

অফিসিয়াল ডক্স অনুসারে , আপনি যখন এটি ব্যবহার করেন ব্রাউজারগুলি এটি পছন্দ করে না

Access-Control-Allow-Origin: "*"

আপনি যদি ব্যবহার করেন তবে শিরোনাম

Access-Control-Allow-Credentials: "true"

শিরোনাম পরিবর্তে, তারা আপনাকে তাদের উত্সকে বিশেষভাবে অনুমতি দেওয়ার জন্য চায়। আপনি যদি এখনও সমস্ত উত্সকে অনুমতি দিতে চান তবে এটি কার্যকর করতে আপনি কিছু সাধারণ অ্যাপাচি যাদু করতে পারেন (নিশ্চিত হয়ে নিন যে আপনি mod_headersসক্ষম করেছেন):

Header set Access-Control-Allow-Origin "%{HTTP_ORIGIN}e" env=HTTP_ORIGIN

ব্রাউজারগুলি Originসমস্ত ক্রস-ডোমেন অনুরোধগুলিতে শিরোনাম প্রেরণ করা প্রয়োজন । ডক্সটি সুনির্দিষ্টভাবে জানিয়েছে যে আপনি Access-Control-Allow-Originযদি অনুরোধটি গ্রহণ করার / গ্রহণ করার পরিকল্পনা করছেন তবে আপনাকে এই শিরোলেখটিকে শিরোনামে ফিরে শিরোনাম করতে হবে। এই Headerনির্দেশনাটি এটাই করছে।


4
এটি আমার জন্যও কাজ করে বলে মনে হচ্ছে, যদিও আপনি যদি দুটি অ্যাক্সেস সাইটগুলিতে অ্যাক্সেস করেন এমন দুটি সাইট দেখতে যান তবে আপনার ক্যাশে সাফ করার দরকারের পার্শ্ব প্রতিক্রিয়া রয়েছে বলে মনে হচ্ছে
জ্যাক জেমস

4
@ জ্যাক: হ্যাঁ, এটি সিডিএন সামগ্রীর জন্য একটি বড় বিষয় (আপনার দিকে ফন্ট ফাইলগুলি দেখছে)। ক্যাশিং সেটিংসের উপর নির্ভর করে আপনি ফাইলের সামগ্রী এবং একটি ভুল সিওআরএস শিরোলেখ স্থানীয়ভাবে (আপনার দৃশ্যের মতো) বা প্রক্সিতে স্থির থাকতে পারেন! (সঙ্গে ক্যাশে-কীট ধ্বংস দিবসে ?yourdomainপরেরটির ক্ষেত্রে কাজ, কিন্তু যা CDN একটু ব্যবহারের সুবিধা devalues)
ওভার

4
কিছু কারণে, HTTP_ORIGIN আমার জন্য সেট করা হয়নি, আমাকে এই লাইনটি যুক্ত করতে হয়েছিল SetEnvIfNoCase Origin (.+) HTTP_ORIGIN=$1
ডেভিড রিক্সিটেলি

5

দুর্ভাগ্যক্রমে গৃহীত উত্তরগুলি আমার পক্ষে কাজ করে না, যেহেতু আমার সাইটের সিএসএস ফাইলগুলি ফন্ট সিএসএস ফাইলগুলি ইমপোর্ট করে, এবং এগুলি সমস্ত একটি র‌্যাকস্পেস ক্লাউড ফাইল সিডিএনতে সঞ্চিত।

যেহেতু অ্যাপাচি শিরোনাম কখনই উত্পন্ন হয় না (যেহেতু আমার সিএসএস আপাচে নেই), তাই আমাকে বেশ কয়েকটি জিনিস করতে হয়েছিল:

  1. ক্লাউড ফাইল ইউআইতে যান এবং প্রতিটি ফন্ট-দুর্দান্ত ফাইলের জন্য একটি কাস্টম শিরোনাম (মান * সহ অ্যাক্সেস-কন্ট্রোল-অরিজিন-অরিজিন) যুক্ত করুন
  2. Woff এবং ttf ফাইলের কন্টেন্ট-টাইপ যথাক্রমে ফন্ট / woff এবং ফন্ট / ttf এ পরিবর্তন করুন

আপনি কেবল # 1 দিয়ে পালাতে পারবেন কিনা দেখুন, যেহেতু দ্বিতীয়টির জন্য কমান্ড লাইনের কিছুটা কাজ প্রয়োজন।

# 1 এ কাস্টম শিরোনাম যুক্ত করতে:

  • ফাইলটির জন্য ক্লাউড ফাইল ধারক দেখুন
  • ফাইলটি স্ক্রোল ডাউন
  • কগ আইকন ক্লিক করুন
  • শিরোনাম সম্পাদনা ক্লিক করুন
  • অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স নির্বাচন করুন
  • একক অক্ষর যুক্ত করুন '*' (উদ্ধৃতি ব্যতীত)
  • প্রবেশ করুন
  • অন্যান্য ফাইলের জন্য পুনরাবৃত্তি

আপনার যদি চালিয়ে যাওয়া এবং # 2 করার দরকার হয় তবে আপনার সিআরএল সহ একটি কমান্ড লাইন প্রয়োজন

curl -D - --header "X-Auth-Key: your-auth-key-from-rackspace-cloud-control-panel" --header "X-Auth-User: your-cloud-username" https://auth.api.rackspacecloud.com/v1.0

ফিরে আসা ফলাফলগুলি থেকে, এক্স-আউথ-টোকেন এবং এক্স-স্টোরেজ-ইউরেলের জন্য মানগুলি বের করুন

curl -X POST \
  -H "Content-Type: font/woff" \
  --header "X-Auth-Token: returned-x-auth-token" returned-x-storage-url/name-of-your-container/fonts/fontawesome-webfont.woff

curl -X POST \
  -H "Content-Type: font/ttf" \
  --header "X-Auth-Token: returned-x-auth-token" returned-x-storage-url/name-of-your-container/fonts/fontawesome-webfont.ttf

অবশ্যই, আপনি যদি র্যাকস্পেস সিডিএন ব্যবহার করেন তবে এই প্রক্রিয়াটি কেবলমাত্র কার্যকর হয়। অন্যান্য সিডিএনগুলি অবজেক্ট শিরোনামগুলি সম্পাদনা করতে এবং সামগ্রীর ধরণের পরিবর্তন করতে অনুরূপ সুবিধা সরবরাহ করতে পারে, তাই আপনি ভাগ্যবান হবেন (এবং এখানে কিছু অতিরিক্ত তথ্য পোস্ট করুন)।


3

জাভা ভিত্তিক অ্যাপ্লিকেশনটির জন্য আপনার ওয়েব.এক্সএমএল ফাইলটিতে এটি যুক্ত করুন:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.ttf</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.otf</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.eot</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.woff</url-pattern>
</servlet-mapping>

1

এই লিঙ্কটি পরীক্ষা করে দেখুন .. এটি অবশ্যই আপনার সমস্যার সমাধান করবে .. ক্রস ডোমেন তৈরির প্রচুর সমাধান রয়েছে GET Ajax কল করুন ক্রস DOMAIN এর জন্য পোষ্টের অনুরোধ এখানে সলভ করা আছে । এটি বের করতে আমার 3 দিন সময় লেগেছে।

http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx


লিঙ্কটি এখন মারা গেছে
পল হিল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.