1. 程式人生 > >Web的基本工作原理、HTTP協議和URL說明

Web的基本工作原理、HTTP協議和URL說明

發送 agen mes servlet img 設置 encoding 各類 doc

Web工作原理

客戶端和Web服務器通過HTTP協議進行通信。Web服務器有是也叫HTTP服務器或Web容器。HTTP協議采用的是請求/響應模式。即客戶端發起HTTP請求,web服務器接收並解析處理HTTP請求,然後將HTTP響應發送給客戶端。

Web服務器

Web服務器指的是一個軟件程序,例如Apache Tomcat、Jboos等。它們的作用就是管理Web應用,當客戶端發出一個HTTP請求,相應的Web服務器接收HTTP請求後,調用相應的web應用處理請求,然後Web服務器再將響應結果返回給客戶端。
額外說明:服務器是一個硬件概念,指的是24小時不間斷運行的主機。簡單來說就是一臺電腦,裏面配置好了Web服務器和web應用。客戶端就可以通過URL地址向該服務器發出HTTP請求,訪問Web應用的資源文件了。

URL(Uniform Resource Location 統一資源定位器)

當客戶端(瀏覽器)輸入一個URL地址,就能接收到Web服務器發送過來的數據。這個過程就是在使用HTTP協議通信。

URL格式:protocol://[host.]domain[:port][/context][/resource][?query string]     其中只有協議和域名是必需的,其他都是可選的。 
        應用層協議://主機IP或域名:端口/資源所在路徑/文件名?請求參數 

URL各參數的說明:

協議:采用何種方式進行通信。
IP和域名是一樣的,域名映射一個IP地址。作用就是標識一臺計算機地址,這裏就用於確定服務器地址。
端口:找到計算機後,通過端口確定一個計算機上的程序。例如Tomcat的默認端口就是8080
[/context][/resource]:Web應用中指定資源的路徑。
[?query string]:表單提交的數據作為請求參數,就是這裏的查詢字符串

以一個Tomcat配置的Web應用為例。瀏覽器輸入URL地址:http://localhost:8080/MyWebProgram/index.jsp?admin=abc&info=123456 【URL地址中,?之後是參數,多個參數之間用&分開】

瀏覽器發出一個訪問/MyWebProgram/index.jsp 資源的HTTP請求,8080端口的程序,即Web服務器(Tomcat)接收並解析HTTP請求後,將index.jsp作為響應主體發送給瀏覽器。這樣,一次請求/響應的通信過程就結束了。當然,這裏的index.jsp會先被編譯成Servlet,然後轉成HTML文檔才發送過去。關於Servlet/JSP這裏不詳述。

HTTP協議

HTTP通信不受限於特定的系統平臺和編程語言,因為HTTP協議嚴格規定了HTTP請求和HTTP響應的數據格式。所以HTTP客戶端(瀏覽器)和Web服務器遵守HTTP協議,那麽就可以看懂雙方的數據,從而順利地通信。

HTTP協議的請求格式和響應格式

HTTP請求格式由三部分組成:

請求方法、URI和HTTP協議版本
請求頭(Request Header):包含許多客戶端環境和請求正文的有用信息。
請求主體(正文)(Request Content):包含請求參數。它和請求頭之間用空格隔開,用於表示請求頭結束。

以一個Servlet為例,向該Servlet發起請求,獲取HTTP請求信息:

GET /TestServlet/testRequestHeaders HTTP/1.1
-------Request Header Infomation--------
accept---application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
accept-language---zh-CN
ua-cpu---AMD64
accept-encoding---gzip, deflate
user-agent---Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
host---localhost:8089
connection---Keep-Alive

這個例子描述了HTTP請求包含那些信息。這裏采用的GET請求方法。關於各類請求方法的區別,後面會說到。 本例的Servlet代碼如下:

@WebServlet(urlPatterns= {"/testRequestHeaders"} , name="requestHeaderTest")
public class RequestFormat extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    
PrintWriter pw = resp.getWriter();
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
pw.write("<html><head></head><body>");
//HTTP請求首行部分
pw.write(req.getMethod() + req.getRequestURI() + req.getProtocol() + "<br>");
//HTTP請求頭
pw.println("-------Request Header Infomation--------<br>");
Enumeration<String> headers = req.getHeaderNames(); //獲取所有請求頭的名稱
while(headers.hasMoreElements()) {
String header = (String)headers.nextElement();
pw.write(header + "---" + req.getHeader(header) + "<br>");
}
pw.write("</body></html>");
}
}

HTTP請求方法

HTTP請求方法有七種,最常用的當屬GET和POST方法,關於另外5種這裏不介紹了,因為不常用。
GET方式:
POST方式:

HTTP響應格式,由三部分組成:

HTTP協議版本 、狀態代碼和描述
響應頭(Response Header)
響應主體/內容(Response Content)

技術分享圖片技術分享圖片

這裏的響應主體是HTML文檔。大部分情況下都是HTML文檔作為響應,前面的Servlet例子中,生成的HTML文檔就是響應主體,由Web服務器發送給客戶端(瀏覽器)。但有時候響應主體不是HTML文檔,例如是一個DOC文檔,那麽瀏覽器就可能會借助本機的WORD程序來打開。如果是一個rar壓縮文檔,那麽就會下載該文檔。所以根據不同的響應內容類型,瀏覽器會采用不同的方式。要設置響應內容類型,Servlet中調用:response.setContextType()。該方法很重要,熟記!

Web的基本工作原理、HTTP協議和URL說明