《老羅Android》學習之 HTTP編程(一)

1. HTTP協議的定義
   WWW是以Internet作爲傳輸媒介的一個應用系統,WWW網上基本的傳輸單位是Web網頁。WWW的工作是基於客戶機/服務器計算模型,由Web瀏覽器和Web服務器構成,即B/S結構,兩者之間採用超文本傳輸協議HTTP進行通信。
   HTTP協議是基於TCP/IP協議之上的協議,是Web瀏覽器和Web服務器之間的應用層的協議,是通用的、無狀態的面向對象的協議。
  如果要實現網絡互聯我們要思考兩個需要解決的技術問題:
第一:瀏覽器和服務器是通過什麼來連接的。
第二:這種連接方式是怎麼實現的。

通過Internet去發送到服務器當中,而Internet內部可以通過三種方式來實現發送信息和數據:
第一種:HTTP協議,也是在工作中最常用的,是建立在TCP/IP基礎上實現的。
第二種:FTP協議
第三種:TCP/IP協議,它也是最底層的協議,其它的方式必須是要通過它,但是要想實現這種協議必須要實現socket編程,這種方法是用來上傳一些比較大的文件,視頻,進行斷點續傳的操作。
2. HTTP協議實例剖析
客戶端連接服務器實現內部的原理如下:
 
流程分析:
第一步:在瀏覽器客戶端中得到用戶輸入的內容。
第二步:瀏覽器得到這個網址之後,內部會將這個域名發送到DNS上,進行域名解析。得到它的IP之後就會鏈接到指定的服務器上,假如服務器的地址是:221.104.13.32:80,從瀏覽器到服務器端口它使用到最底層的TCP/IP協議
第三步:實現TCP/IP協議用Socket來完成,使用了Socket的套接字。
第四步:服務器端的80端口監聽客戶端的鏈接,這樣客戶端到服務器就鏈接上了。
HTTP請求體的內容介紹
   

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
  2. <%String path = request.getContextPath();%> 
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  4. <html> 
  5.     <head> 
  6.         <title>測試HTTP協議體的內容</title> 
  7.         <meta http-equiv="pragma" content="no-cache"> 
  8.         <meta http-equiv="cache-control" content="no-cache"> 
  9.         <meta http-equiv="expires" content="0"> 
  10.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
  11.         <meta http-equiv="description" content="This is my page"> 
  12.         <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> 
  13.     </head> 
  14.     <body> 
  15.         <form name="form1"  method="post" action="<%=path %>/LonginServlet"> 
  16.             用戶名: 
  17.             <input type="text" name="username" value="admin" /><br /> 
  18.             密  碼: 
  19.             <input type="password" name="password" value="123" /><br /> 
  20.             <input type="submit" name="submit" value="提交表單" /> 
  21.         </form> 
  22.     </body> 
  23. </html> 
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>測試HTTP協議體的內容</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--	<link rel="stylesheet" type="text/css" href="styles.css">	-->
	</head>
	<body>
		<form name="form1"  method="post" action="<%=path %>/LonginServlet">
			用戶名:
			<input type="text" name="username" value="admin" /><br />
			密  碼:
			<input type="password" name="password" value="123" /><br />
			<input type="submit" name="submit" value="提交表單" />
		</form>
	</body>
</html>

<form name="form1"  method="post" action="<%=path %>/LonginServlet"> 表單中方法爲 post, 所以提交後會跳轉到 "<%=path %>/LonginServlet",轉換一下是:http://192.168.1.105:8080/MyHTTP/LonginServlet;    並調用 LonginServlet.java 的 doPost()方法.
HTTP響應的內容介紹
   
可以用 HTTPWatch 工具查一下,這個操作的過程, HTTPWatch 是IE 的一個插件,安裝後,用IE瀏覽器打開,查看---> 瀏覽欄 就可以看到這個HTTPWatch .
 
   在這裏面可以測試到響應時間,結果,頭部信息等信息.
在這裏面有個 Cookies: JSESSIONIDSent 5444476F20784E44DECCC2900186336D
當用戶登錄時,點擊登錄按鈕後,可能等的時間比較長,就多點了幾次,這樣就多次登錄了. 服務器怎麼判斷是哪個用戶呢? 所有在HTTP的協議體當中要把Cookies的JSESSIONID返回給客戶端,客戶端就知道是哪個用戶登錄了.
HTTP返回請求數據的三種方式
服務器接收到這些內容之後,並按照這些請求的路徑找到對應的頁面,進一步找到對應的網頁內容,返回給客戶端。
服務器返回客戶端的內容有三種方式:
1、以HTML代碼內容返回。
2、以XML字符串的形式返回,在以後的android開發中這種形式返回數據比較多。
3、以JSON對象形式返回,在網絡流量上考慮JSON要比XML方式要好一些,便於解析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章