要了解 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
- 附加部分