要了解 Web 服務器如何通過 HTTP 協議發送內容,你需要了解一個 HTTP 地址的結構。地址是由 HTTP 前綴,服務器名稱,比如 www.haxe.org,和對特定資源的服務器上可選的相對路徑組成。某些 Web 應用程序也接受其它協議如 HTTPS ,或者 FTP。服務器的名稱在是一個本地地址的時候可以只是一個名字,當在公開訪問的注冊 DNS 服務時是兩個或者更多的被一個點號分隔的多個名字。一個服務也可以是由4個0-255的數值組成的 IP 地址。在多數配置中,下面兩個地址是等效的:
~~~
http://localhost/
http://127.0.0.1/
~~~
互聯網上一個可用的網站有一個由域名等組成。地址 http://www.haxe.org 是由幾個部分組成,從右側開始:
org 是一個頂級域名,表示主機站點屬于非經濟利益組織。專門的組織保留頂級域名,不能被個人或公司收購。
最常見的頂級域名是:
* com 商業網站
* net 一般網站
* edu 教育機構和實體
* gov 政府機構
* 還有一些地域域名比如 fr 法國,it 意大利
1. 地址中,haxe 是一個頂級域名。這是一個由個人或者公司在有限時間內獲得的任意名稱。域名訂閱通常每年進行更新。
2. www 是一個二級域名。頂級域名擁有著可以創建許多二級域名;一些主機商可能會對二級域名的數量做出限制。www 的二級域名是目前事實上的第一級域名的主入口。一個 SLD 是可選的。
3. http 是通過地址連接特定資源的協議。
一個 Web 服務器通常需要配置以使根地址指向內容的主機上的物理目錄。因此,如果一個 Web 服務器,比如 example.com ,配置根目錄指向 D:\WWW,其中包含一個名為 page.html 的文件,這個資源可以使用 URI 地址 http://www.example.com/page.html 來訪問。
目錄和子目錄通過 `/` 進行映射。當一個 URI 指向目錄到一個 目錄而不是一個文件(可能是虛擬的或者真實存在的),web 服務器可以顯示目錄下的內容,如果配置允許的話,或者跳轉到一個默認的頁面。NekoTools 跳轉請求到目錄下的 index.html,index.htm,和 index.n 。如果這些都沒有可用的,會報告一個 404 error 。生產環境的 Web 服務器例如 Apache 有一些可選的配置處理文件、目錄和虛擬路徑、限制訪問等等。
許多情況下,服務器動態的將頁面內容組合起來,通過請求接收到的參數,動態的改變它們的內容。這些參數可以使用 GET 方法或者 POST 方法傳輸(還有其它的一些不常用的方法)。首先添加添加參數到地址中,然后第二個使用請求頭保存它們。添加參數的 GET 語法如下:
~~~
http://www.example.com/page.n?param1=value1¶m2=value2
~~~
param1 是一個變量名,而 value1 是它的值。參數部分跟地址部分通過一個問號標記 ? 分隔,參數之間通過 & 符號組合。每個 key-value 對都有變量名、等號符號 = ,和值組成。因為 HTTP 在 URI 地址中對一些特殊字符進行限制,值和參數必須被編碼。
GET 方法被隱式的用于頁面中的每個標準超鏈接,要使用 POST 方法,需要使用表單提交到指定的方法。另一個 POST 常用的方式是一個 XHR(XML HTTP Request)調用,這是一個 AJAX(Asynchronous JavaScript and XML) 應用非常基礎的功能。POST 方法不實用查詢字符串傳遞參數;它包裝它們到請求頭中。
協議不對 GET 參數做任何大小的限制,但是一些(舊的)瀏覽器和 Web 服務器截取請求字符串為一個固定大小(非常長)。鑒于此,作為一個普遍的規則,GET 方法使用簡短的、用戶友好的參數,而POST 方法用于復雜的、可能是非常大的內容的提交。最后,文件上傳只能通過 POST 方法實現。
目前為止,URI地址已經使用絕對形式,一個包含服務器地址的完整路徑。相對形式在許多情況下也被認可。一個相對路徑用于指向一個和當前文檔或者基礎文檔相關的資源。相對路徑不用指定一個協議,因為當前上下文的協議將被使用。路徑是子目錄名和文件名的一個組合,并和當前的文檔地址結合使用,指示到請求的資源。路徑也可以向后導航,從子到父,使用兩個點號 .. 代替一個目錄名。由 一個斜線 / 開始的相對路徑,表示 URI 是相對于當前主機地址,而不是當前文檔地址。
因此,如果當前的頁面 URI 是 http://www.example.com/pages/first.htm ,相對路徑 second.htm 則指向 http://www.example.com/pages/second.htm 。相對路徑 /images/logo.png 將指向 http://www.example.com/images/logo.png 。同樣的 URI 可以通過 ../images/logo.png 定義 。
- 本書目錄
- 第一章:Haxe介紹
- 互聯網開發的一個問題
- Haxe是什么,為什么產生
- Haxe編譯工具
- Haxe語言
- Haxe如何工作
- 那么Neko是什么
- Haxe和Neko的必須條件
- 本章摘要
- 第二章:安裝、使用Haxe和Neko
- 安裝Haxe
- 使用Haxe安裝程序
- 在Windows上手動安裝Haxe
- Linux上手動安裝Haxe
- 安裝Neko
- Windows上手動安裝Neko
- 在Linux上安裝Neko
- Hello world! 一式三份
- 編譯你的第一個Haxe應用
- 你的程序如何編譯
- HXML編譯文件
- 編譯到Neko
- 編譯為JavaScript
- 程序結構
- 編譯工具開關
- 本章摘要
- 第三章:基礎知識學習
- Haxe層級結構
- 標準數據類型
- 變量
- 類型推斷
- 常數變量
- 簡單的值類型
- 浮點類型
- 整型
- 選擇數值類型
- 布爾類型
- 字符串類型
- 抽象類型
- Void 和 Null
- 動態類型
- unknown類型
- 使用untyped繞過靜態類型
- 注釋代碼
- 轉換數據類型
- Haxe數組
- Array
- List
- Map
- Haxe中使用日期時間
- 創建一個時間對象
- Date組件
- DateTools類
- 操作數據
- 操作符
- Math類
- 使用String函數
- 本章摘要
- 第四章:信息流控制
- 數據存放之外
- 條件語句
- if語句
- switch語句
- 從條件語句返回值
- 循環
- while循環
- for循環
- 循環集合
- Break和Continue
- 函數
- 類的函數
- 局部函數
- Lambda類
- 本章摘要
- 第五章:深入面向對象編程
- 類和對象
- 實例字段
- 靜態字段
- 理解繼承
- Super
- 函數重載
- 構造器重載
- toString()
- 抽象類和抽象方法
- 靜態字段,實例變量和繼承
- 繼承規則
- 使用接口
- 高級類和對象特性
- 類的實現
- 類型參數
- 匿名對象
- 實現動態
- Typedef
- 擴展
- 枚舉
- 構造器參數
- 本章摘要
- 第六章:組織你的代碼
- 編寫可重用代碼
- 使用包
- 聲明一個包
- 隱式導入
- 顯式導入
- 枚舉和包
- 類型查找順序
- 導入一個完整的包
- 導入庫
- Haxe標準庫
- Haxelib庫
- 其他項目中的庫
- 外部庫
- 使用資源
- 文檔化代碼
- 離線文檔
- 在線文檔
- 單元測試
- haxe.unit包
- 編寫測試
- 本章摘要
- 第七章:錯誤調試
- trace函數
- trace輸出
- haxe的trace和ActionScript的trace
- 異常
- 異常處理
- CallStack和ExceptionStack
- 異常管理類
- 創建完全的異常處理類
- 異常類代碼
- 本章摘要
- 第八章:跨平臺工具
- XML
- XML剖析
- Haxe XML API
- 正則表達式
- EReg類
- 模式
- 定時器
- 延遲動作
- 隊列動作
- MD5
- 本章摘要
- 第九章:使用Haxe構建網站
- Web開發介紹
- Web 服務器
- 使用Web服務器發布內容
- HTML速成課程
- Haxe和HTML的區別
- NekoTools Web Server
- Apache安裝mod_neko
- Windows安裝Apache和mod_neko
- Linux安裝Apache和Mod_Neko
- 第一個Haxe網站
- 使用Neko作為網頁Controller
- neko.Web類
- Neko作為前端控制器
- 本章摘要
- 第十章:使用模板進行分離式設計
- 什么是模板
- Template類
- Template語法
- 使用資產
- 何時在模板中使用代碼
- 服務器端模板的Templo
- 安裝Templo
- 使用Templo
- haxe.Template和mtwin.Templo表達式上的區別
- Attr表達式
- Raw表達式
- 邏輯表達式
- 循環表達式
- set, fill, 和 use表達式
- Templo中使用宏
- 手動編譯模版
- 第十一章:執行服務端技巧
- 第十二章:使用Flash構建交互內容
- 第十三章:使用IDE
- 第十四章:通過JavaScript制作更多交互內容
- 第十五章:通過Haxe遠程通信連接所學
- 第十六章:Haxe高級話題
- 第十七章:Neko開發桌面應用
- 第十八章:用SWHX開發桌面Flash
- 第十九章:多媒體和Neko
- 第二十章:使用C/C++擴展Haxe
- 附加部分