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.