Μετάβαση στο περιεχόμενο
EuroVPSEuroVPS
Περιοχή πελατών

Πλήρης οδηγός για τους κωδικούς κατάστασης HTTP: σειρά 300

Οι κωδικοί κατάστασης HTTP 300 προορίζονται για ανακατευθύνσεις. Οι περισσότερες ανακατευθύνσεις είναι διαφανείς για τον τελικό χρήστη και τις χειρίζεται εξ ολοκλήρου ο user-agent.

Από Thomas

Ενημερώθηκε 22 Οκτωβρίου 20266 λεπτά ανάγνωσης
Εικόνα εξωφύλλου: οδηγός σφαλμάτων HTTP, σειρά 300

Για να καταλάβετε καλύτερα γιατί οι ανακατευθύνσεις είναι τόσο σημαντικές, βοηθά να καταλάβετε γιατί θα χρησιμοποιούσε κανείς μια ανακατεύθυνση εξαρχής.

Οι ανακατευθύνσεις συνήθως προκύπτουν από μια αλλαγή. Μπορεί να είναι αλλαγή υπολογιστικών πόρων, αλλαγή ορολογίας μάρκετινγκ, αλλαγή πολιτικής, αλλαγή στρατηγικής SEO, ή αλλαγή στη λειτουργία της επιχείρησης. Κάπου, κάτι άλλαξε και απαιτεί το ίδιο URI να είναι προσβάσιμο σε διαφορετική τοποθεσία.

Όταν γίνονται αλλαγές, οι μηχανές αναζήτησης και άλλες πηγές θα έχουν τους παλιούς συνδέσμους μέχρι το site να ευρετηριαστεί ξανά.

Η εναλλακτική στην ανακατεύθυνση θα ήταν ένα σφάλμα 404 «document not found».

Ένα ακραίο σενάριο που επιβάλλει την ανακατεύθυνση ενός user-agent θα ήταν μια εταιρεία που αναδιοργανώνει τη γκάμα προϊόντων της. Ας πούμε, για παράδειγμα, ότι η ACME Co. μετέφερε τη σειρά Widgets στην ACME Labs. Η τρέχουσα πολιτική της ACME ορίζει δομή web της μορφής: acmeco/{division}/{productline}.

Έτσι η ACME μπορεί να έχει:

www.acme.com www.acme.com/marketing/seotechnologies/ www.acme.com/marketing/billboards/ www.acme.com/consumergoods/sports/ www.acme.com/consumergoods/clothing/ www.acme.com/consumergoods/widgets/ www.acme.com/labs/widgets/ www.acme.com/labs/foobars/ www.acme.com/labs/betaproducts/

Τα ACME Widgets βρίσκονταν στο www.acme.com/consumergoods/widgets/ τα τελευταία 5 χρόνια και δέχονται δεκάδες χιλιάδες επισκέψεις την ώρα σε αυτή την τοποθεσία.

Μπορείτε να φανταστείτε πόσα έσοδα θα μπορούσε να κοστίσει στην ACME Co. αυτή η απλή μετακίνηση, σε χαμένες πωλήσεις, σε εξυπηρέτηση πελατών που απαντά σε παράπονα, καθώς και σε στελέχη που απαντούν στο τηλέφωνο για επίσημες δηλώσεις σχετικά με την αγαπημένη σειρά Widget;

Και οι μηχανές αναζήτησης; Ένα καλό μέρος των πωλήσεων Widget της ACME Co. προέρχεται από επισκέψεις μέσω μηχανών αναζήτησης. Για να μην αναφέρουμε την καμπάνια Google Ads και το URL σε φυλλάδια και επαγγελματικές κάρτες.

Μια ανακατεύθυνση της σειράς 300 μπορεί να λύσει το πρόβλημα για όλους στην ACME Co. Η ACME μπορεί απλώς να ρυθμίσει τον web server να ανακατευθύνει όλα τα αιτήματα για www.acme.com/consumergoods/widgets/ στο www.acme.com/labs/widgets/.

(hr)

Παράδειγμα 301 ανακατεύθυνσης από τον πραγματικό κόσμο

Στην EuroVPS χρησιμοποιούμε μια ανακατεύθυνση 301 για να βεβαιωθούμε ότι οι επισκέπτες χρησιμοποιούν το ασφαλές πρωτόκολλο HTTPS.

Να ακριβώς πώς η 301 ανακατεύθυνση εξασφαλίζει ότι κάθε επισκέπτης θα χρησιμοποιήσει HTTPS όταν επισκέπτεται την EuroVPS:

  1. ο user-agent ζητά το http://www.eurovps.com/
  2. ο web server απαντά με κωδικό κατάστασης 301
  3. ο web server ορίζει μια κεφαλίδα Location προς την έκδοση https
  4. οι περισσότεροι user-agents θα ανακατευθυνθούν αυτόματα στο νέο URL
Ανακατεύθυνση όταν η κεφαλίδα Location δεν ακολουθείται
ένα μήνυμα εμφανίζεται για user-agents που δεν τιμούν την κεφαλίδα Location.

Οι ανακατευθύνσεις μπορούν να γίνουν σε γλώσσες scripting όπως Python Django, PHP και ASP .Net. Ωστόσο, μια πιο στιβαρή λύση είναι να αφήσετε τις ανακατευθύνσεις στον web server με έναν κανόνα rewrite.

Ανακατεύθυνση σε PHP:

<?php // Permanent 301 Redirect via PHP header("HTTP/1.1 301 Moved Permanently"); header("Location: https://eurovps.com/"); exit; // stop the script once the redirect is sent

Το πρόβλημα με τις ανακατευθύνσεις σε αυτό το υψηλό επίπεδο είναι ότι μπορεί να καταλήξουμε να επεξεργαζόμαστε 100 σελίδες! Ή ακόμη χειρότερα, να πειράζουμε κώδικα σε ένα σύστημα διαχείρισης περιεχομένου που μπορεί να μην κάνει τις ανακατευθύνσεις όπως θα θέλαμε.

Μια πολύ πιο κομψή λύση είναι να κάνει ο web server όλη την ανακατεύθυνση για εμάς.

Στον Apache οι ανακατευθύνσεις θα μπορούσαν να γίνουν ως εξής:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Στον nginx η ίδια ανακατεύθυνση είναι μία γραμμή στο server block που ακούει στη θύρα 80:

server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; }

(hr)

Ανακατευθύνσεις με κωδικό κατάστασης 300

300 Multiple Choices

Το 300 Multiple Choices είναι μια ανακατεύθυνση που σπάνια χρησιμοποιείται στον πραγματικό κόσμο. Το 300 Multiple Choices συναντάται όταν ένας ζητούμενος πόρος δείχνει σε πολλούς προορισμούς για το ίδιο ζητούμενο έγγραφο. Παρουσιάζεται στον τελικό χρήστη μια επιλογή ενέργειας, ώστε να διαλέξει την επιθυμητή.

301 Moved Permanently

Οι 301 ανακατευθύνσεις είναι συνηθισμένες γιατί οι μηχανές αναζήτησης αντιμετωπίζουν το 301 ως μόνιμη μετακίνηση: ενημερώνουν το ευρετήριό τους στο νέο URI και μεταφέρουν τα σήματα κατάταξης.

Όταν ένας client συναντά ένα 301, οι σελιδοδείκτες και οι αυτοματοποιημένοι user-agents πρέπει να ενημερωθούν στο νέο URI.

302 Found

Οι ανακατευθύνσεις 302 πρέπει να χρησιμοποιούνται όταν ένα ζητούμενο URI βρίσκεται προσωρινά σε νέα τοποθεσία. Ο user-agent ακολουθεί την κεφαλίδα Location στο προσωρινό URI. Για ιστορικούς λόγους οι περισσότεροι clients μετατρέπουν ένα POST σε GET όταν ακολουθούν ένα 302. Χρησιμοποιήστε 307 όταν η μέθοδος πρέπει να διατηρηθεί.

Σε αντίθεση με το 301, οι user-agents πρέπει να συνεχίσουν να χρησιμοποιούν το αρχικό URI, γιατί πρόκειται για προσωρινή ανακατεύθυνση.

303 See Other

Το 303 είναι κυρίως για αιτήματα POST και PUT που οδηγούνται σε διαφορετικό URI από αυτό που ζήτησε αρχικά ο user-agent στο αίτημα POST ή PUT.

Ένα παράδειγμα θα μπορούσε να είναι η μεταφόρτωση ενός μεγάλου αρχείου που μπορεί να πάρει μερικά λεπτά:

  1. ο user-agent υποβάλλει ένα μεγάλο αρχείο με PUT ή POST
  2. το αρχείο προορίζεται για το αρχικό URI
  3. ο web server επιστρέφει 303 ανακατευθύνοντας σε μια σελίδα κατάστασης μεταφόρτωσης
  4. ο user-agent θα χρησιμοποιήσει GET μέσω του 303, ζητώντας μια σελίδα κατάστασης μεταφόρτωσης

304 Not Modified

Το 304 Not Modified χρησιμοποιείται για σκοπούς caching. Το 304 στέλνεται ως κατάσταση σε έναν user-agent που ζητά έλεγχο της τρέχουσας κατάστασης μιας αποθηκευμένης σελίδας.

Αν η ζητούμενη σελίδα είναι ακόμη επίκαιρη, ο server απαντά με 304 και χωρίς σώμα, και ο user-agent δείχνει το αποθηκευμένο αντίγραφό του στον τελικό χρήστη.

Ανακατεύθυνση 304
Παραπάνω, ένας έλεγχος σε ένα αποθηκευμένο αρχείο javascript.

305 Use Proxy (καταργημένο)

Το 305 Use Proxy έχει καταργηθεί. Η τρέχουσα προδιαγραφή HTTP, το RFC 9110, το αναφέρει ως μη χρησιμοποιούμενο πλέον, και οι browsers δεν το εκτελούν. Μην το χρησιμοποιείτε.

307 Temporary Redirect

Το 307 μοιάζει με το 302 αλλά απαιτεί να χρησιμοποιηθεί η ίδια μέθοδος αιτήματος στο ανακατευθυνόμενο URI. Θα χρησιμοποιούνταν, για παράδειγμα, όταν ένα αίτημα POST πρέπει να σταλεί σε άλλο URI.

Με ένα 302, οι περισσότεροι clients αλλάζουν σε αίτημα GET για να λάβουν το ανακατευθυνόμενο URI.

308 Permanent Redirect

Το 308 είναι το μόνιμο αντίστοιχο του 307. Όπως το 301, λέει στους clients ότι ο πόρος μετακινήθηκε οριστικά. Όπως το 307, απαιτεί ο client να επαναλάβει το αίτημα με την ίδια μέθοδο. Χρησιμοποιήστε το όταν μια μόνιμη μετακίνηση πρέπει να κρατήσει ένα POST ως POST.

Οι κωδικοί κατάστασης σε αυτόν τον οδηγό ορίζονται στο RFC 9110 (HTTP Semantics).

Σχετικό άρθρο: Πλήρης οδηγός για τους κωδικούς κατάστασης HTTP: σειρά 400

Από το αρχείο του blog της EuroVPS, πρώτη δημοσίευση 12 Δεκεμβρίου 2019.

Όλες οι σημειώσεις