标题:网络请求学习笔记——aardio网站开发
关键词:POST、GET、aardio
作者:Puakzl
一、HTTP请求
一个HTTP请求由四个部分组成:请求行、请求头标、空行和请求数据
1.请求行:
请求行由三个标记组成:请求方法、请求URI和HTTP版本,它们用空格分隔。
例如:GET /index.html HTTP/1.1
HTTP规范定义了8种可能的请求方法:
标签 | 说明 |
---|---|
GET |
检索URI中标识资源的一个简单请求 |
HEAD |
与GET方法相同,服务器只返回状态行和头标,并不返回请求文档 |
POST |
服务器接受被写入客户端输出流中的数据的请求 |
PUT |
服务器保存请求数据作为指定URI新内容的请求 |
DELETE |
服务器删除URI中命名的资源的请求 |
OPTIONS |
关于服务器支持的请求方法信息的请求 |
TRACE |
Web服务器反馈Http请求和其头标的请求 |
CONNECT |
已文档化但当前未实现的一个方法,预留做隧道处理 |
2.请求头标:
由关键字/值对组成,每行一对,关键字和值用冒号(
:
)分隔。
头标 | 解释 | 示例 |
---|---|---|
Accept |
指定客户端能够接收的内容类型 | Accept: text/plain, text/html |
Accept-Charset |
浏览器可以接受的字符编码集。 | Accept-Charset: iso-8859-5 |
Accept-Encoding |
指定浏览器可以支持的web服务器返回内容压缩编码类型。 | Accept-Encoding: compress, gzip |
Accept-Language |
浏览器可接受的语言 | Accept-Language: en,zh |
Accept-Ranges |
可以请求网页实体的一个或者多个子范围字段 | Accept-Ranges: bytes |
Authorization |
HTTP授权的授权证书 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control |
指定请求和响应遵循的缓存机制 | Cache-Control: no-cache |
Connection |
表示是否需要持久连接。(HTTP 1.1默认进行持久连接) | Connection: close |
Cookie |
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 | Cookie: $Version=1; Skin=new; |
Content-Length |
请求的内容长度 | Content-Length: 348 |
Content-Type |
请求的与实体对应的MIME信息 | Content-Type: application/x-www-form-urlencoded |
Date |
请求发送的日期和时间 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
Expect |
请求的特定的服务器行为 | Expect: 100-continue |
From |
发出请求的用户的Email | From: user@email.com |
Host |
指定请求的服务器的域名和端口号 | Host: www.aardio.com |
If-Match |
只有请求内容与实体相匹配才有效 | If-Match:“737060cd8c284d8af7ad3082f209582d” |
If-Modified-Since |
如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 | If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-None-Match |
如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 | If-None-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Range |
如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag | If-Range:“737060cd8c284d8af7ad3082f209582d” |
If-Unmodified-Since |
只在实体在指定时间之后未被修改才请求成功 | If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
Max-Forwards |
限制信息通过代理和网关传送的时间 | Max-Forwards: 10 |
Pragma |
用来包含实现特定的指令 | Pragma: no-cache |
Proxy-Authorization |
连接到代理的授权证书 | Proxy-Authorization: BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range |
只请求实体的一部分,指定范围 | Range: bytes=500-999 |
Referer |
先前网页的地址,当前请求网页紧随其后,即来路 | Referer: http://www.aardio.com/archives/71.html |
TE |
客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 | TE: trailers,deflate;q=0.5 |
Upgrade |
向服务器指定某种传输协议以便服务器进行转换(如果支持) | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
User-Agent |
User-Agent的内容包含发出请求的用户信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
Via |
通知中间网关或代理服务器地址,通信协议 | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning |
关于消息实体的警告信息 | Warn: 199 Miscellaneous warning |
3.空行:
最后一个请求头标之后是一个空行,发送回车符和退行,通知服务器以下不再有头标。
4.请求数据:
使用POST传送数据,最常使用的是
Content-Type
和Content-Length
头标。
二、HTTP响应
一个响应由四个部分组成:状态行、响应头标、空行、响应数据
1.状态行:
状态行由三个标记组成:HTTP版本、响应代码和响应描述。
例如:HTTP/1.1 200 OK
标记 | 说明 |
---|---|
HTTP版本 | 向客户端指明其可理解的最高版本。 |
响应代码 | 3位的数字代码,指出请求的成功或失败,如果失败则指出原因。 |
响应描述 | 为响应代码的可读性解释。 |
HTTP响应代码 | 说明 |
---|---|
1xx | 信息,请求收到,继续处理 |
2xx | 成功,行为被成功地接受、理解和采纳 |
3xx | 重定向,为了完成请求,必须进一步执行的动作 |
4xx | 客户端错误,请求包含语法错误或者请求无法实现 |
5xx | 服务器错误,服务器不能实现一种明显无效的请求 |
详尽说明
HTTP响应代码 | 说明 |
---|---|
100 | 提示/客户端应继续请求 |
101 | 提示/切换协议 |
200 | 已成功 |
201 | 已成功/创建资源 |
202 | 已成功/接受请求 |
203 | 已成功/非权威信息 |
204 | 已成功/无内容 |
205 | 已成功/重置内容 |
206 | 已成功/断点续传部分内容 |
300 | 重定向/多项选择 |
301 | 重定向/永久移动地址 |
302 | 重定向/已找到地址 |
303 | 重定向/参见其他 |
304 | 重定向/未修改使用缓存 |
305 | 重定向/需使用代理 |
306 | 重定向/未使用 |
307 | 重定向/临时 |
400 | 客户端错误/错误请求 |
401 | 客户端错误/未授权 |
402 | 客户端错误/需付费 |
403 | 客户端错误/禁止访问 |
404 | 客户端错误/未找到 |
405 | 客户端错误/错误的指令动词 |
406 | 客户端错误/拒绝请求 |
407 | 客户端错误/要求代理认证 |
408 | 客户端错误/请求超时 |
409 | 客户端错误/冲突 |
410 | 客户端错误/已删除 |
411 | 客户端错误/未指定长度 |
412 | 客户端错误/未满足前提条件 |
413 | 客户端错误/请求实体太大 |
414 | 客户端错误/请求地址太长 |
415 | 客户端错误/不支持的媒体类型 |
416 | 客户端错误/错误的字节区段 |
417 | 客户端错误/预期结果失败 |
500 | 服务器错误/内部错误 |
501 | 服务器错误/未实现 |
502 | 服务器错误/网关故障 |
503 | 服务器错误/无效服务 |
504 | 服务器错误/网关超时 |
505 | 服务器错误/不支持的HTTP协议版本 |
2.响应头标:
像请求头标一样,它们指出服务器的功能,标识出响应数据的细节。
头标 | 解释 | 示例 |
---|---|---|
Accept-Ranges |
表明服务器是否支持指定范围请求及哪种类型的分段请求 | Accept-Ranges: bytes |
Age |
从原始服务器到代理缓存形成的估算时间(以秒计,非负) | Age: 12 |
Allow |
对某网络资源的有效的请求行为,不允许则返回405 | Allow: GET, HEAD |
Cache-Control |
告诉所有的缓存机制是否可以缓存及哪种类型 | Cache-Control: no-cache |
Content-Encoding |
web服务器支持的返回内容压缩编码类型。 | Content-Encoding: gzip |
Content-Language |
响应体的语言 | Content-Language: en,zh |
Content-Length |
响应体的长度 | Content-Length: 348 |
Content-Location |
请求资源可替代的备用的另一地址 | Content-Location: /index.htm |
Content-MD5 |
返回资源的MD5校验值 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
Content-Range |
在整个返回体中本部分的字节位置 | Content-Range: bytes 21010-47021/47022 |
Content-Type |
返回内容的MIME类型 | Content-Type: text/html; charset=utf-8 |
Date |
原始服务器消息发出的时间 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
ETag |
请求变量的实体标签的当前值 | ETag: “737060cd8c284d8af7ad3082f209582d” |
Expires |
响应过期的日期和时间 | Expires: Thu, 01 Dec 2010 16:00:00 GMT |
Last-Modified |
请求资源的最后修改时间 | Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT |
Location |
用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 | Location: http://www.aardio.com/archives/94.html |
Pragma |
包括实现特定的指令,它可应用到响应链上的任何接收方 | Pragma: no-cache |
Proxy-Authenticate |
它指出认证方案和可应用到代理的该URL上的参数 | Proxy-Authenticate: Basic |
refresh |
应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持) | Refresh: 5; url=http://www.aardio.com/archives/94.html |
Retry-After |
如果实体暂时不可取,通知客户端在指定时间之后再次尝试 | Retry-After: 120 |
Server |
web服务器软件名称 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
Set-Cookie |
设置Http Cookie | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
Trailer |
指出头域在分块传输编码的尾部存在 | Trailer: Max-Forwards |
Transfer-Encoding |
文件传输编码 | Transfer-Encoding:chunked |
Vary |
告诉下游代理是使用缓存响应还是从原始服务器请求 | Vary: * |
Via |
告知代理客户端响应是通过哪里发送的 | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning |
警告实体可能存在的问题 | Warning: 199 Miscellaneous warning |
WWW-Authenticate |
表明客户端请求实体应该使用的授权方案 | WWW-Authenticate: Basic |
3.空行:
最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标。
4.响应数据:
HTML文档和图像等,也就是HTML本身。
三、网站开发
response
对象
用于响应请求并输出网页内容
API | 说明 |
---|---|
response.status | HTTP响应头中的状态码,字符串值,默认为 "200 OK" |
response.contentType | HTTP响应头中的MIME文件类型,字符串值,默认为"text/html", <code>response.contentType = "text/json"</code>//让浏览器识别为JSON |
response.cookies | HTTP响应头中的cookies,表对象,例如:<code> response.cookies["名字"] = { value = "值"; expires = time().addday(7); //过期时间 maxAge = 3600; //过期秒数 }</code> |
response.cookieDomain | 默认cookie域名,注意cookie域名不能为localhost(可以是本地IP),如果不设置默认值为 request.host,注意cookie域名不区分端口号 |
response.cookiePath | 默认cookie目录,如果不设置默认值为 "/" |
response.charset | 输出字符集,可以为空,默认值为UTF-8,aardio10使用的默认字符集为UTF-8,不建议更改此值,更改此值需要自行对输出HTML转换编码。 |
response.headers | 这是一个名值对组成的表对象,用于指定其他响应HTTP头。 |
response.jsonPrettyPrint | 指定respose.write函数将对象转换为JSON输出时否缩进格式化。 <code>response.jsonPrettyPrint = true</code> //让aardio输出JSON时美化格式 |
response.write() | 输出一个或多个值,参数将自动转换为字符串对象,可直接输出结构体,其他table对象转换为JSON输出。需要注意调用此函数输出页面后(或HTML模板自动输出页面后),就会先输出HTTP头,输出HTTP响应头以后,再设置响应头有关的属性,例如 response.status 这些是不起作用的。 <code> response.write( request ) //输出request对象(aardio会自动将对象转换为JSON)</code> |
response.writeBuffer(缓冲区,长度) | 与response.write() 作用相同,不过输出的是缓冲区,注意缓冲区长度不应大于65535,response.write函数无此限制。 |
response.error() | 输出一个或多个500错误信息,参数将自动转换为字符串对象,table转换为格式化的对象输出,注意500错误信息只有在Web服务器本地打开网页时才能看到,客户端默认是看不到详细错误信息的。 |
response.loadcode( aardio文件路径,其他调用参数 ) | 这个函数用于快速加载一个*.aardio模板文件并输出网页,所有参数都可以省略,默认加载的文件路径为 request.path, 其他调用参数在网页中可使用 var a,b,c = ... 语句在文件开始接收参数。 |
response.customErrors | 这是一个表对象,键应当是一个HTTP错误代码(数值),值应当是一个回调函数,用于自定义response.loadcode函数的错误处理页内容,例如:<code> response.customErrors[404] = function(){ response.status = "404 Not Found"; response.write("404 Not Found"); }</code> |
response.close() | 关闭网页输出,这个函数并不需要我们自己调用,fastcgi模块会在请求结束后自动调用此函数。注意 respose.close并不会退出程序,应当使用 return 语句退出当前代码。 |
response
对象
用于响应请求并输出网页内容
API | 说明 |
---|---|
response.status | HTTP响应头中的状态码,字符串值,默认为 "200 OK" |
response.contentType | HTTP响应头中的MIME文件类型,字符串值,默认为"text/html", <code>response.contentType = "text/json"</code>//让浏览器识别为JSON |
response.cookies | HTTP响应头中的cookies,表对象,例如:<code> response.cookies["名字"] = { value = "值"; expires = time().addday(7); //过期时间 maxAge = 3600; //过期秒数 }</code> |
response.cookieDomain | 默认cookie域名,注意cookie域名不能为localhost(可以是本地IP),如果不设置默认值为 request.host,注意cookie域名不区分端口号 |
response.cookiePath | 默认cookie目录,如果不设置默认值为 "/" |
response.charset | 输出字符集,可以为空,默认值为UTF-8,aardio10使用的默认字符集为UTF-8,不建议更改此值,更改此值需要自行对输出HTML转换编码。 |
response.headers | 这是一个名值对组成的表对象,用于指定其他响应HTTP头。 |
response.jsonPrettyPrint | 指定respose.write函数将对象转换为JSON输出时否缩进格式化。 <code>response.jsonPrettyPrint = true</code> //让aardio输出JSON时美化格式 |
response.write() | 输出一个或多个值,参数将自动转换为字符串对象,可直接输出结构体,其他table对象转换为JSON输出。需要注意调用此函数输出页面后(或HTML模板自动输出页面后),就会先输出HTTP头,输出HTTP响应头以后,再设置响应头有关的属性,例如 response.status 这些是不起作用的。 <code> response.write( request ) //输出request对象(aardio会自动将对象转换为JSON)</code> |
response.writeBuffer(缓冲区,长度) | 与response.write() 作用相同,不过输出的是缓冲区,注意缓冲区长度不应大于65535,response.write函数无此限制。 |
response.error() | 输出一个或多个500错误信息,参数将自动转换为字符串对象,table转换为格式化的对象输出,注意500错误信息只有在Web服务器本地打开网页时才能看到,客户端默认是看不到详细错误信息的。 |
response.loadcode( aardio文件路径,其他调用参数 ) | 这个函数用于快速加载一个*.aardio模板文件并输出网页,所有参数都可以省略,默认加载的文件路径为 request.path, 其他调用参数在网页中可使用 var a,b,c = ... 语句在文件开始接收参数。 |
response.customErrors | 这是一个表对象,键应当是一个HTTP错误代码(数值),值应当是一个回调函数,用于自定义response.loadcode函数的错误处理页内容,例如:<code> response.customErrors[404] = function(){ response.status = "404 Not Found"; response.write("404 Not Found"); }</code> |
response.close() | 关闭网页输出,这个函数并不需要我们自己调用,fastcgi模块会在请求结束后自动调用此函数。注意 respose.close并不会退出程序,应当使用 return 语句退出当前代码。 |