HTTP-vastaukset

HTTP-pyynnöistä ei ole hyötyä, jos palvelu ei vastaa. Käsittelen tässä artikkelissa lyhyesti HTTP-vastausten muotoa. Sitä varten kirjoitin Java-kielisen testiohjelman, joka lähettää GET-pyynnön haluttuun verkko-osoitteeseen ja palauttaa sieltä HTTP-vastauksen. Testiohjelma on seuraavanlainen:

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

public class WebSocketTest {
    public static void main(String[] args) throws Exception {
        String host=args[0];
        int port=Integer.parseInt(args[1]);
        String pathName=args[2];
        Socket s=new Socket(host, port);
        PrintStream out=new PrintStream(s.getOutputStream());
        out.print("GET "+pathName+" HTTP/1.1\r\n");
        out.print("Host: "+host+":"+port+"\r\n\r\n");
        out.flush(); // submits the query
        while (true) {
            System.out.print((char) (s.getInputStream().read()));
            System.out.flush();
        } // writes the response on standard out and hangs
    }
}

Kun ajoin tätä parametreilla

java WebSocketTest localhost 80 /

sain vastaukseksi koneellani pyörivän Apache-palvelimen oletussivun:

HTTP/1.1 200 OK
Date: Fri, 28 Feb 2014 14:17:49 GMT
Server: Apache/2.4.6 (Ubuntu)
Last-Modified: Mon, 11 Nov 2013 14:35:58 GMT
ETag: "b1-4eae7a684f361"
Accept-Ranges: bytes
Content-Length: 177
Vary: Accept-Encoding
Content-Type: text/html

<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>

Alaosa on tyypillinen verkkosivun määrittelevä HTML-dokumentti, mutta yläosa on mielenkiintoisempi. Ensimmäinen rivi ”HTTP …” kertoo, että kyseessä on HTTP-protokollan versio 1.1 ja status on 200 (OK). Content-length kertoo vastauksen sisällön pituuden ja Content-Type on ns. MIME-tyyppi, joka kertoo, minkätyyppinen dokumentti palautettiin. Nämä tiedot ovat selaimelle ratkaisevan tärkeitä, jotta tiedettäisiin, voiko vastauksen näyttää ruudulla suoraan, vai pyydetäänkö esimerkiksi avaamaan taulukkolaskentaohjelma tai kuvaeditori.