网络请求学习笔记——aardio网站开发

标题:网络请求学习笔记——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-TypeContent-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 语句退出当前代码。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容