1.2.3 HTTP

Definice komunikace mezi WWW serverem a WWW klientem.

Ve verzi 0.9 - co nejjednodušší. Verze 1.0 přidává podporu vyrovnávací paměti a inspiruje se protokolem el. pošty a MIME.

Popis

Klient naváže spojení se serverem prostřednictvím nějakého transportního protokolu (obvykle TCP) a položí mu dotaz. Server na něj odpoví. Pak obvykle uzavře spojení. Takováto komunikace je často označována jako bezstavový protokol (komunikace) neboť server o klientech ví pouze v "krátkém" okamžiku dotazu a odpovědi.

Častým způsobem komunikace je komunikace s využitím nepřímého spojení mezi serverem a klientem prostřednictvím nějakého prostředníka.

Komunikace

Proxy - od klienta obdrží URL dekóduje jej a dotáže se serveru. Odpověď serveru předá klientovi. Často se využívá při přístupu odstíněných počítačů např. firewallem.

Gateway - slouží jako prostředník pro překlad HTTP do jiného protokolu. Např. e-mail - zaslání požadavku na server přes e-mail - převedení do http - obdržení odpovědi v http - převedení do e-mail a odeslání klientovi.

Proxy Cache - proxy s vyrovnávací pamětí - ukládá často používané stránky a klient pak nepřistupuje k těmto stránkám přímo u serverů, ale získává je z "paměti" proxy serveru.

Prostředníci

Dotaz - první řádek + hlavičky + prázdný řádek + tělo dokumentu

první řádek - metoda + lokátor + verze HTTP - nejčastější metodou je GET a POST (post má tělo - údaje z formulářů), lokátor - objekt na serveru, kterého se dotaz týká

hlavičky - název + : + hodnota - př. User-Agent: Mozila/4.76 [en] (WinNT; I)

Odpověď - první řádek + hlavičky + prázdný řádek + tělo dokumentu

první řádek - id protokolu + stavový kód + vysvětlení - př. HTTP/1.1 200 OK - dotaz vyřízen kladně

hlavičky - název + : + hodnota - př. Server: IIS/2.0, Content-type: text/html

Dotaz a odpověď

Např. Content-type - MIME typ předávaných dat
Content-length - délka dat
Content-Language, Content-Encoding

Hlavičky

 

SAMOSTATNÝ ÚKOL 3

 

V příkazovém řádku napište telnet gis.vsb.cz 80 a do vytvořeného spojení zašlete následující text (takový zasílá WWW serveru prohlížeč MSIE 6.0):

GET / HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, 
image/pjpeg, application/vnd.ms-powerpoint, 
application/vnd.ms-excel, application/msword, */*
Accept-Language: cs
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: 158.196.143.23:80
Connection: Keep-Alive

Výstup, který obdržíte si uložte do souboru, k pozdější analýze na tutorialu.

Zaslání požadavku na WWW server, obdržení odpovědi

 

SAMOSTATNÝ ÚKOL 4

 

Pokud zvládáte programování v jazyce Java, můžete se pokusit o zprovoznění serveru, který vypíše obsah požadavku WWW klienta do systémového výstupu.

Zde je kód serveru:

import java.io.*;
import java.net.*;
import java.util.*;

class SimpleThread extends Thread {
  Socket s;
  int id;
  public SimpleThread(String str, Socket ss, int cid){
    super(str);
    s = ss;
    id=cid;
  }
  public void run() {
    try {
      DataInputStream dis = new DataInputStream(s.getInputStream());
      String header;
      //ctení streamu z klienta
      while ((header = dis.readLine())!= null) {
        System.out.println(header);
      }
    } catch (IOException e) {
      System.out.println("Chyba cteni z klienta: " + e);
    }
  }
}

public class MyServer {
  public static void main(String args[]) {
    int iii=1;
    ServerSocket ser = null;
    Socket s = null;
    try {
      ser = new ServerSocket(2255);
    }	catch (IOException e) {
      System.out.println("chyba Serveru: " + e);
    }
    while (true) {
      try {
        System.out.println("Starting Thread");
        s = ser.accept();
        new SimpleThread(new Integer(iii).toString(), s, iii).start();
        iii++;
      } catch (IOException e) {
        System.out.println("chyba zapis: " + e);
        //System.exit(0);
      }
    }
  }
}

V prohlížeči zadejte adresu http://127.0.0.1:2255/. Výstup, který na straně serveru obdržíte srovnejte s textem v předchozím úkolu.

Přijetí požadavku WWW klienta.