Web開發都應該知道HTTP

前言

  作java web的,怎麼能不熟悉http。能夠說這是對web開發最重要的一條協議,面試的時候也不免會被問到這個問題,因此必須深入瞭解這個協議。html

HTTP簡單介紹

  首先咱們要知道什麼是協議,協議就是一系列的信息交換規則。只有徹底符合規則,兩個相互獨立的系統才能交互。顯然http也是這樣的。java

  它中文叫作超文本傳輸協議,它是無狀態的協議,它是屬於七層結構裏的最上層--應用層的協議,它的默認端口是80,它的目前版本是HTTP/1.1,它是本質上也是基於文本流的(固然有時候也會有一些Media類型的)。web

URL簡介

  

  URL是用來惟一肯定網上資源的,它的格式如上圖所示。面試

  http中,分Client和Server,因此說HTTP是基於TCP的。通常來講是Client發起請求,Server相應。具體來講:通常是用於用戶給瀏覽器發請求,而後瀏覽器將請求組成一個符合http協議的報文發送給服務器,服務器根據http規則來解析出請求報文,而後再將返回信息一樣組織成http響應報文,發送給瀏覽器,最後瀏覽器呈現給用戶。chrome

HTTP通常介紹

  

  上圖是chrome-F12下能夠看到的內容,先看request head,http的消息分爲消息頭,和消息體,通常消息體是空的。消息頭包含都是一些元數據(不是用戶相關的),好比編碼信息等,在REST風格下,請求頭比請求體重要。那麼能夠看到第一句就是"GET /yl0822/ HTTP/1.1",GET指的是請求方法:瀏覽器

  ① GET:這是最簡單的http請求方法,點擊鏈接的時候默認使用的就是GET,它就是讓Server把請求的資源給客戶端,而且不作任何修改,也就是說是隻讀的,因此對於資源操做來講,它是安全的。並且GET有很明顯的一點就是query String會顯示在url裏面,這是很是不安全的,因此安全性要求不高的能夠用GET。tomcat

  ② POST:用於你想要在服務器處理請求,它將請求數據寫在消息體裏面,因此是比較安全的。安全

  ③ DELETE、PUT:不作介紹,能夠用POST代替,因此歷來沒用過。服務器

  /yl0822/是路由,指向請求目標,HTTP/1.1是協議版本。網絡

  Host是主機地址,其實是IP地址,爲方便記憶才用cnblogs、baidu、google啥的,沒寫端口是由於默認就是80。其餘鍵值對都是客戶端對請求的約束。

  再看response,和請求不同,對響應來講響應體是很是重要的,由於它就是你看到的網頁,響應頭中有兩個要注意的,其一就是stateCode,各類狀態碼錶明着什麼意思,網上有不少了,這裏就不贅述了。另一個就是Content-Type,表示請求的返回類型,通常的有"text/html"、"text/plain"、"image/gif"、"image/jpeg"、"video/mpeg"等等。

  

  標準的Http請求和響應中間都是隔着一行空行的,叫Blank Line。以這個來識別head和body。

實現一個簡單的Server

  說的很簡單,實現起來其實也簡單,下面實現一個簡單的Http服務器。

 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.io.PrintWriter;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 
 7 public final class SimpleServer {
 8     public static void main(String[] args) throws Exception{
 9         //a port is needed
10         int port = 80;
11         //Establish the listen socket
12         ServerSocket serverSocket = new ServerSocket(port);
13         //Process HTTP Service requests in an infinite loop
14         System.out.println("waiting for connect...");
15         while (true){
16             //listen for a tcp connection request
17             Socket socket = serverSocket.accept();
18             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
19             PrintWriter out = new PrintWriter(socket.getOutputStream());
20             /**
21              * 讀取請求head信息,
22              * */
23             String str = ".";
24             while (!str.equals("")){
25                 str = in.readLine();
26                 System.out.println(str);
27             }
28 
29             //返回請求響應
30             String response = "<html><head>" +
31                     "<title>Simpl Web Page</title></head>\n" +
32                     "<h1>Congratulations!!!</h1>\n" +
33                     "<h3>This page was returned by " + "localhost" + "</h3>\n" +
34                     "<p>This is the first page hosted by your web server.\n</p>" +
35                     "Visit <A HREF=\"http://www.techwiki.ordak.org\"> http://www.techwiki.ordak.org</A> for more sample codes.\n" +
36                     "</html>\n";
37             out.println("HTTP/1.1 200 OK");
38             out.println("Content-Type: text/html");
39             out.println("Server: SimpleServer");
40             out.println("Content-length: "+response.length());
41             //this blank line signals the end of the headers
42             out.println("");
43             out.println(response);
44             out.flush();
45             socket.close();
46          }
47     }
48 }

  而後在瀏覽器輸入localhost便可看到響應了。若是有時間的話,你們能夠看下tomcat或jetty的源碼,裏面對http協議的解析作的很是到位,也給了許多接口來獲取和修改http的設置。

HTTPS是什麼

  HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。

https和http的區別

  https:URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司進行,提供了身份驗證與加密通信方法,如今它被普遍用於萬維網上安全敏感的通信,例如網銀支付方面。

  1、https協議須要到ca申請證書,通常免費證書不多,須要交費。https 能夠是按單個域名購買費用,若是全站都作https費用會比較高。

  2、http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議。

  3、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。

  4、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

  5、https是在外網傳輸節點上進行加密已防止信息被第三方竊聽或篡改。HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

相關文章
相關標籤/搜索