Πρωτόκολλο Μεταφοράς Υπερκειμένου

Το **Πρωτόκολλο Μεταφοράς Υπερκειμένου** (HyperText Transfer Protocol, HTTP) είναι ένα πρωτόκολλο επικοινωνίας. Αποτελεί το κύριο πρωτόκολλο που χρησιμοποιείται στους φυλλομετρητές του Παγκοσμίου Ιστού για να μεταφέρει δεδομένα ανάμεσα σε έναν διακομιστή (server) και έναν πελάτη (client).

## Ιστορία
Ο όρος υπερκείμενο (hypertext), που περιέχεται στην ονομασία του πρωτοκόλλου, χρησιμοποιήθηκε αρχικά από τον Τεντ Νέλσον το 1965. Η γενική ιδέα του πρωτοκόλλου προτάθηκε, μαζί με τη δημιουργία της γλώσσας HTML, από τον Τιμ Μπέρνερς Λι και την ομάδα του, ώστε, σε συνδυασμό με το ήδη υπάρχον Διαδίκτυο και το πρωτόκολλο TCP, να γίνει εφικτή η δημιουργία του Παγκόσμιου Ιστού(WWW).

Η πρώτη τεκμηριωμένη έκδοση ήταν η έκδοση 0.9.Η τωρινή έκδοση είναι η 3.0

Αρχικά το πρωτόκολλο δεν μετέφερε καμία πληροφορία σχετικά με το πρόγραμμα-πελάτης και η μόνη επιλογή που υπήρχε ήταν η ζήτηση από τον εξυπηρετητή μίας σελίδας κειμένου το οποίο περιείχε μόνο χαρακτήρες ASCII και πιθανόν χαρακτήρες τερματισμού γραμμής.

Σήμερα το πρωτόκολλο αυτό είναι πλέον καθιερωμένο και διαδεδομένο σε σημείο που σχεδόν όλοι οι φυλλομετρητές να το θεωρούν δεδομένο και να το χρησιμοποιούν σε περίπτωση που ο χρήστης δεν καθορίσει ποιο πρωτόκολλο θέλει να χρησιμοποιήσει. Αν δηλαδή ο χρήστης δεν γράψει:
:
αλλά γράψει σκέτο το:
:my.url
σχεδόν όλοι οι φυλλομετρητές θεωρούν σαν δεδομένο το πρωτόκολλο http και όχι κάποιο άλλο (https, ftp, mail, gopher (αγγλική έκδοση) κλπ.)

## Τεχνικά χαρακτηριστικά

Η διαδικασία που ακολουθούσε το αρχικό πρωτόκολλο ήταν η εξής:
* Σύνδεση στον εξυπηρετητή
* Ερώτηση προς τον εξυπηρετητή
* Απάντηση από τον εξυπηρετητή

Σήμερα χρησιμοποιεί πολύ περισσότερα χαρακτηριστικά τα οποία παρέχουν ακόμα και τη δυνατότητα στο πρόγραμμα-πελάτης να στέλνει δεδομένα στον εξυπηρετητή.

## Μέθοδοι αίτησης του HTTP
Αν και το HTTP πρωτόκολλο σχεδιάστηκε για χρήση στον Ιστό, υποστηρίζει λειτουργίες που είναι πιο γενικές απ’ ότι απαιτείται. Οι λειτουργίες αυτές ονομάζονται **μέθοδοι**. Κάθε αίτηση αποτελείται από μία ή περισσότερες γραμμές κειμένου ASCII.Η πρώτη λέξη της πρώτης γραμμής της αίτησης είναι το όνομα της ζητούμενης μεθόδου.

Παρακάτω παρουσιάζονται συνοπτικά οι ενσωματωμένες μέθοδοι αίτησης του πρωτοκόλλου HTTP:

**GET**

Η μέθοδος GET ζητά από το διακομιστή να στείλει τη σελίδα. Η σελίδα κωδικοποιείται κατάλληλα σε μορφή MIME.Η πιο συνήθης μορφή της μεθόδου GET είναι η εξής:            

GET όνομα_αρχείου  HTTP/1.1

όπου το όνομα_αρχείου προσδιορίζει το όνομα του πόρου που πρέπει να προσκομιστεί και το 1.1 είναι η έκδοση του πρωτοκόλλου που χρησιμοποιείται.

**HEAD**

Η μέθοδος HEAD ζητά μόνο την κεφαλίδα του μηνύματος, χωρίς τη πραγματική σελίδα. Η μέθοδος αυτή μπορεί να χρησιμοποιηθεί για τη συλλογή πληροφοριών για λόγους δεικτοδότησης ή απλώς και μόνο για τον έλεγχο εγκυρότητας μιας διεύθυνσης URL.

**POST**

Η μέθοδος POST χρησιμοποιείται κατά την υποβολή φορμών. Όπως και η μέθοδος GET, η POST  περιέχει μια διεύθυνση URL αλλά αντί να ανακτά απλώς τη σελίδα μεταφέρει δεδομένα στον διακομιστή όπως για παράδειγμα τα περιεχόμενα της φόρμας. Έπειτα ο διακομιστής κάνει κάτι με αυτά τα δεδομένα ανάλογα με το URL.Τέλος, η μέθοδος επιστρέφει μια σελίδα που δείχνει το αποτέλεσμα.

**PUT**

Η μέθοδος PUT είναι η αντίστροφη της GET, δηλαδή αντί να διαβάζει τη σελίδα, γράφει τη σελίδα. Η μέθοδος αυτή κάνει εφικτή την κατασκευή μιας συλλογής ιστοσελίδων σε έναν απομακρυσμένο διακομιστή. Το σώμα της αίτησης περιέχει τη σελίδα. Μπορεί να κωδικοποιείται μέσω του MIME,  οπότε οι γραμμές που ακολουθούν την PUT μπορεί να περιέχουν κεφαλίδες Content-Type και πιστοποίησης  ταυτότητας, ώστε να αποδείξουν ότι ο αιτών έχει πραγματικά την άδεια να εκτελέσει τη ζητούμενη λειτουργία.

**DELETE**

Η μέθοδος DELETE καταργεί τη σελίδα ή τουλάχιστον δηλώνει ότι ο διακομιστής Ιστού έχει συμφωνήσει να καταργήσει τη σελίδα. Όπως και με την PUT και σε αυτή τη μέθοδο παίζουν μεγάλο ρόλο η πιστοποίηση της ταυτότητας και της άδειας εκτέλεσης της λειτουργίας.

**TRACE**

Η μέθοδος TRACE χρησιμοποιείται για αποσφαλμάτωση. Ζητά από τον διακομιστή να επιστρέψει την αίτηση. Η μέθοδος αυτή είναι χρήσιμη όταν η επεξεργασία των αιτήσεων δεν γίνεται σωστά και ο πελάτης θέλει να δει ποια αίτηση έλαβε πραγματικά ο διακομιστής.

**CONNECT**

Η μέθοδος CONNECT επιτρέπει στον χρήστη να πραγματοποιήσει σύνδεση με έναν διακομιστή Ιστού μέσω μιας ενδιάμεσης συσκευής, για παράδειγμα  μέσω μια κρυφής μνήμης Ιστού. 

**OPTIONS**

Η μέθοδος OPTIONS παρέχει έναν τρόπο ώστε ο πελάτης να στέλνει ερωτήματα στον διακομιστή σχετικά με μια σελίδα και να λαμβάνει τις μεθόδους και τις κεφαλίδες που μπορούν να χρησιμοποιηθούν με αυτή τη σελίδα.

## Κωδικοί κατάστασης
Κάθε αίτηση λαμβάνει μια απάντηση η οποία αποτελείται από μια γραμμή κατάστασης και πιθανόν πρόσθετες πληροφορίες. Η γραμμή κατάστασης περιέχει ένα τριψήφιο κωδικό κατάστασης, ο οποίος δηλώνει κατά πόσον εξυπηρετήθηκε η αίτηση και αν δεν εξυπηρετήθηκε, γιατί συνέβη αυτό. Το πρώτο ψηφίο χρησιμοποιείται για την υποδιαίρεση των αιτήσεων σε 5 κατηγορίες.

Οι κωδικοί **1xx** χρησιμοποιούνται σπανίως στη πράξη. Παράδειγμα: 100= ο διακομιστής συμφωνεί να χειριστεί την αίτηση του πελάτη.

Οι κωδικοί **2xx** σημαίνουν ότι ο χειρισμός της αίτησης έγινε με επιτυχία και ότι επιστρέφεται το περιεχόμενο αν υπήρχε. Παράδειγμα: 200 = η αίτηση πέτυχε, 204 = δεν υπάρχει περιεχόμενο.

Οι κωδικοί **3xx** λένε στον πελάτη να ψάξει αλλού, είτε χρησιμοποιώντας μια διαφορετική διεύθυνση URL, είτε εξετάζοντας την κρυφή μνήμη. Παράδειγμα: 301 = η σελίδα μετακινήθηκε.

Οι κωδικοί **4xx** σημαίνουν ότι η αίτηση απέτυχε λόγω κάποιου σφάλματος του πελάτη, όπως άκυρη αίτηση ή ανύπαρκτη σελίδα. Παράδειγμα: 403 = απαγορευμένη σελίδα, 404 = η σελίδα δεν βρέθηκε.

## Ανάπτυξη και συντήρηση
Η ανάπτυξη του HTTP έγινε υπό την εποπτεία του World Wide Web Consortium και του Internet Engineering Task Force (IETF).

## Ασφάλεια
Το απλό πρωτόκολλο http δεν εγγυάται καμία ασφάλεια.

## Δείτε επίσης
* HTTPS (Πρωτόκολλο μεταφοράς υπερκειμένου με ασφάλεια)

## Παραπομπές


## Εξωτερικοί σύνδεσμοι
* Hypertext Transfer Protocol
* HTTP request methods
* List of HTTP status codes
* HTTP V 2.0

Κατηγορία:Πρωτόκολλα του ίντερνετ
Κατηγορία:Πρωτόκολλα δικτύου