2011-09-01 27 views
5

पुनः लोड करने के लिए इस प्रश्न में मिश्रित सामग्री त्रुटि से कोई लेना देना नहीं है। एक साइट लॉन्च करने के बारे में। जब मैं http://example.com से https://example.com पर नेविगेट करता हूं, तो मुझे लगता है कि सीएसएस/जेएस/आदि को फिर से लोड किया गया है क्योंकि मैं रूट सापेक्ष पथ का उपयोग कर रहा हूं:।एचटीटीपीएस से HTTP (स्टाइलशीट्स, जेएस, सीएसएस-स्प्राइट्स, आदि)

एक http sniffer का उपयोग करके मैं देखता हूं कि ब्राउज़र https://www.example.com/_css/main.csshttp://www.example.com/_css/main.css (इसकी नहीं) से अलग है। इस प्रकार, वही सटीक सामग्री दो बार डाउनलोड की जाती है जिससे साइट http से https तक धीमी गति से नेविगेट करने लगती है (यदि उपयोगकर्ता के पास पहले से ही दोनों संस्करण कैश नहीं हैं)।

क्या इसे रोकने के लिए वैसे भी है? उपयोगकर्ता लगभग हमेशा साइट के गैर-एसएसएल संस्करण को हिट करेगा, तो क्या ऐसी कोई स्क्रिप्ट है जो तब तक प्रतीक्षा करेगी जब तक कि http सामग्री को लोड नहीं किया जाता है, जो कि उपयोगकर्ता संस्करण में https संस्करण को मजबूर कर सकता है? या मुझे हमेशा पृष्ठ पर और प्रत्येक सीएसएस पृष्ठभूमि छवि पर पूर्ण पथ (https://www.example.com/_css/main.css) का उपयोग करना चाहिए (केवल 2 मैं sprites का उपयोग करें)। या क्या हम इसके साथ रहते हैं? धन्यवाद।

+0

उदाहरण के लिए कृपया [example.com] (http://www.iana.org/domains/example/) और मित्रों का उपयोग करें। mysite.com एक वास्तविक होस्टिंग कंपनी है और उन्हें 404 त्रुटियां देने पर नकली लिंक की आवश्यकता नहीं है। – Quentin

+0

तय ... – Steve

उत्तर

4

एक http स्निफर मैं देख ब्राउज़र का उपयोग करना लगता है https://www.mysite.com/_css/main.csshttp://www.mysite.com/_css/main.css (इसकी नहीं) से अलग है।

यह समान सामग्री के साथ एक अलग संसाधन है। ब्राउजर को यह जानने का कोई तरीका नहीं है कि उनके पास एक ही सामग्री होगी।

आप एक से दूसरे तक (301 के साथ) रीडायरेक्ट कर सकते हैं ताकि आपके पास एक गैर SSL संस्करण न हो।

क्या इसे रोकने के लिए वैसे भी है?

वास्तव में नहीं।

उपयोगकर्ता हमेशा साइट के गैर-एसएसएल संस्करण को हमेशा हिट करेगा, तो क्या ऐसी कोई स्क्रिप्ट है जो http सामग्री को तब तक इंतजार करेगी जब तक कि उपयोगकर्ता संस्करण कैश में https संस्करण को मजबूर नहीं कर सकता है?

नहीं। यदि कोई यूआरएल मनमाने ढंग से अन्य यूआरएल के लिए सामग्री को पूर्ववत कर सकता है तो यह एक भयानक सुरक्षा समस्या होगी।

या मुझे हमेशा पृष्ठ पर और प्रत्येक सीएसएस पृष्ठभूमि छवि पर केवल पूर्ण पथ (https://www.mysite.com/_css/main.css) का उपयोग करना चाहिए (केवल 2 मैं sprites का उपयोग करता हूं)।

यह काम करेगा, लेकिन मिश्रित सामग्री के मुद्दों का कारण बनता है।

या क्या हम इसके साथ रहते हैं?

हां।

+0

सुरक्षा समस्या के बारे में अच्छा बिंदु, उस बारे में नहीं सोचा था। खैर मुझे लगता है कि जब तक इंटरनेट देवता एक विकल्प के साथ आते हैं तब तक मैं इसके साथ रहूंगा। शांति। – Steve

+0

जावास्क्रिप्ट समाधान के रूप में मुझे लगता है कि: http: //headjs.com/। जहां जावास्क्रिप्ट स्टाइल लोड करने से पहले डिफ़ॉल्ट कार्यक्षमता को ओवरराइड करता है ... उन पंक्तियों के साथ कुछ। लोड http main.css और शेष पृष्ठ की तरह, फिर एक जेएस कोड ट्रिगर करें जो https संस्करण लोड करता है। एसएसएल को मजबूर करने के लिए – Steve

-1

आप प्रोटोकॉल विनिर्देशक बिना फ़ाइलों को संदर्भित कर सकते हैं, जैसे:

<link rel="stylesheet" type="text/css" href="//mysite.com/_css/main.css" /> 

अधिक जानकारी के लिए यह पोस्ट देखें:

Can I change all my http:// links to just //?

+0

के बारे में खेद है जो उन यूआरआई को हल करेंगे जो पहले से ही उपयोग किए जा रहे हैं, जिससे कुछ भी नहीं बदलेगा। – Quentin

+0

मूल रूप से यह पहले से ही हो रहा है। ब्राउजर बस सोचता है कि https main.css http main.css से अलग है, इसलिए यह तकनीकी रूप से एक अलग संसाधन है, लेकिन सामग्री वही है ... kinda sux। – Steve

0

आप एक का उपयोग कर सकते हैं।हर बार https सामग्री लोड करने के लिए htaccess rerriteRule; या एचटीएमएल के http संस्करण में निर्दिष्ट एक रीडायरेक्ट हेडर अधिक धीरे-धीरे काम करेगा (अतिरिक्त राउंड-ट्रिप) लेकिन अन्यथा ठीक है, मुझे विश्वास है।

1

इसे ठीक करने के कुछ तरीके हैं।

  1. base tag का उपयोग करें। फिर अपने संसाधनों के लिए सापेक्ष पथ का उपयोग करें और कैशिंग को http और https के लिए काम करने के लिए माना जाएगा, हालांकि वास्तव में यह पहले ही https पर लोड हो गया था। Demonstration

    <base href="https://example.com/" />

  2. एसएसएल के लिए सब कुछ पुन: निर्देशित उपयोगकर्ता साइट हिट जब अपाचे रास्ता (Redirect SSL) प्रोटोकॉल-संबंधी रास्तों

    Redirect permanent/https://example.com/login

+0

इस समस्या को हल नहीं करता है, यह अभी भी गैर एसएसएल संस्करण से एसएसएल संस्करण में रीडायरेक्ट करता है जो उपयोगकर्ता को चेतावनी देता है! – BigSack

+0

असल में एसएसएल को मजबूर करने से समस्या हल हो जाती है, http://wiki.apache.org/httpd/RewriteHTTPToHTTPS। लेकिन वास्तव में टैग वह है जिसे वे ढूंढ रहे हैं। यह पृष्ठ को प्रत्येक बार https: // संस्करण से लोड करने के लिए सामग्री लोड करने का कारण बनता है, चाहे सब कुछ सुरक्षित है या नहीं। पता नहीं कि आप किस ब्राउजर का उपयोग कर रहे हैं लेकिन आपकी चेतावनी एक अलग घटना है। – Jeff

0

का प्रयोग करें।

इस

<link rel="stylesheet" href="http://domain.com/style.css"> 
<link rel="stylesheet" href="https://domain.com/style.css"> 

उपयोग इस

<link rel="stylesheet" href="//domain.com/style.css"> 

के बजाय

तो यह माता पिता पेज के प्रोटोकॉल का उपयोग करेगा।

संबंधित मुद्दे