[E2EE文档2.x] 网站响应处理
[服务器响应]对象,简称[响应]。主要用于返回结果给浏览器。
响应头
跟[请求头]一样,响应也有[响应头]。以下为一个标准的网页返回响应头:
HTTP/1.1 200 OK
Server: E2EE Server 2.0
Date: Sun, 04 Aug 2019 00:02:10 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 2976
Connection: keep-alive
Content-Encoding: gzip
Etag: 7047D5BB
Pramga: no-cache
Cache-Control: no-cache
HTTP响应包含三部分:
[响应头] 和 [响应体] 之间使用两个换行符”\r\n\r\n“进行分割。
响应行
网站返回的内容中,第一行为[响应行]:
HTTP/1.1 200 OK
响应行通常也包含三部分内容:
-
协议版本
HTTP/1.1
-
响应状态
200
-
状态描述
OK
响应头
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 2976
Content-Type: text/html; charset=UTF-8
Date: Sun, 04 Aug 2019 00:02:10 GMT
Etag: 7047D5BB
Pramga: no-cache
Server: E2EE Server 2.0
响应体
[网页内容]
响应状态
响应状态也被称作[状态码],不同的状态码有不同的意义。
常见的状态码:
- 200: 成功
- 404: 页面不存在
- 302: 重定向
更多的状态码可以查看 状态码列表。
设置了状态码后,服务器会自动补充状态描述文本,状态码在HTTP协议中有详细的规定,超出规定范围的状态码也能够设置但是通常不建议。
注意
当状态码设置为非200时,处理完请求后会触发状态页的渲染处理。通常设置非200的状态时,建议不要写出任何内容,可以通过设置[请求.属性表]将要渲染的数据写出,修改[状态页模板]来实现对应页面内容的渲染和输出。
状态页模板通常在[模板目录]下,以状态名称命名。例如:[模板]/404.esp
设置响应头
设置响应头方法:
通过名称设置响应头的内容。当对应的响应头已经存在时,则原响应头内容会被覆盖。
响应.置响应头 (“Source-Server”, “E2EE Server 2.0”)
更多响应头可以查看 常用响应头。
内容类型
在[网页请求处理]中,有详细内容类型(Content-Type)说明:
通过文件的后缀名称,设置响应体的内容类型。在默认情况下,默认设置内容类型为“Content-Type: text/html; charset=<编码>”。
响应.置文档类型按后缀 (“json”)
服务器默认已经包含大部分常见的文件类型的MIME。
什么是MIME类型?
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
增加新的MIME类型支持
在[控制中心]中 [配置] > [扩展功能] > [MIMEMAP文件] 可以指定MIME配置文件的路径。默认文件是“MIMEMAP.conf”,该文件应该在[配置目录]下。
MIMEMAP文件格式说明:
- 行首为文件后缀
- 行末为MIME类型
- 文件后缀和MIME类型之间使用冒号“:”分割
- 不同的MIME定义之间通过换行符“\r\n”分割
自定义MIME示例( [配置]/MIMEMAP.conf ):
mkv: video/webm
wmv: video/webm
网址重定向
在网站中经常会遇到需要跳转的情况,通过响应对象能够很方便的进行页面间的跳转。
重定向分为“临时重定向”和“永久重定向”,通过 [是否为永久地址] 参数可以指定类型。通常我们都是使用“临时重定向”,只有当遇到“http”协议跳转到“https”,或者网址永久更换的情况下,才需要用到“永久重定向”。
重定向支持[相对路径]和[绝对路径],[绝对路径] 是指使用“http://”或者“https://”开头指定协议的网址。
例如:http://e2ee.jimstone.com.cn
当您的网站做为[容器化]的[模块]使用时,要跳转到您的[模块]其它“相对路径”,请设置 [自动处理容器路径] 参数为[真]。跳转时会在网址前自动带上您当前[模块]的“模块路径”。
让浏览器强制下载
当您写出的数据需要让用户下载而不是在页面显示时,可以设置[文档类型]并且添加“Content-Disposition”响应头:
.版本 2
.支持库 e2ee
.局部变量 文件名, 文本型
文件名 = “报表数据.xls” ' // “报表数据.xls”设置为您的文件名称或路径
响应.置文档类型按后缀 (路径_取后缀名 (文件名, 假))
响应.置响应头 (“Content-Disposition”, 创建文本 (“attachment; filename={1}”, URL编码 (路径_取名称 (文件名, 真), 请求.取配置项 (#配置项_编码))))
您可以通过 [响应.写出数据]方法 或者 [响应.发送文件]方法 等指定下载数据的内容。
通过[响应.写出数据]方法写出时,可以指定任意文件名称。
Cookie和Session
Cookie
[响应]对象 可以设置用户的Cookie。Cookie的具体说明可以查看[网站请求处理]章节。
[响应.添加Cookie] 有5个参数:
- COOKIE表: 存储COOKIE的存取键值表(键值均为文本型)。键为cookie项名称,值为cookie值。值可以为空
- 域名: COOKIE对应的域名。不设置则为当前域名(只支持同一个主域名以及对应的二级域名)。
- 路径: 对应网站中的路径。不设置则设置COOKIE到默认路径下。
- 过期时间: 过期时间文本。为“0”为删除COOKIE;为数字则为多少秒后过期;如果指定的为指定日期时间请使用转换函数转换为GMT时间格式。
- 是否安全传输: 规定是否通过安全的 HTTPS 连接来传输 cookie。为空或者[假]则不使用。
Session
[响应]对象 可以获取和设置 Session 的ID。如果要获取和赋值Session的内容,请使用 [网站请求]对象。
- 响应.取SessionID
- 响应.置SessionID
网页内容
写出文本
写出文本内容到网页中:
其中 [响应.写出宽文本]方法 是针对UNICODE的。可以使用 [创建宽文本]函数 写出指定编码的内容到网页中,写出后会自动转换内容为当前网站的编码格式。
.版本 2
.支持库 e2ee
.子程序 _启动服务器_网页内容_写出文本
.局部变量 server, 网站服务器
server.订阅视图函数 (&网页内容_写出文本_视图_首页, “/”, , )
server.启动 (创建键值表 (#配置项_端口, 8080, #配置项_编码, #文本编码格式_UTF8), )
运行 (创建文本 (“explorer ''http://127.0.0.1:8080/''”, ), 假, )
server.等待结束 (假)
.子程序 网页内容_写出文本_视图_首页, 逻辑型
.参数 请求对象地址, 整数型
.参数 响应对象地址, 整数型
.局部变量 请求, 服务器请求
.局部变量 响应, 服务器响应
取回请求对象 (请求对象地址, 响应对象地址, 请求, 响应)
响应.写出文本 (“<h1>网页内容</h1>”)
响应.写出宽文本 ("\ud83d\ude19\ud83d\ude43\ud83d\ude0a\ud83d\ude0b\ud83d\ude0b\ud83d\udc12\ud83d\udc27\ud83c\udfd2\ud83d\udea3\ud83c\udffb\u26f8\ud83c\udff8\ud83c\udfd2\ud83d\ude9c\ud83c\udf9e\ud83d\udcbd\ud83d\udd79\ud83d\udda5\ud83c\udf9e\ud83d\udcbf\ud83d\udcbf\ud83d\udcfb\u262f\ud83d\udc96\ud83d\udc96\ud83d\udd4e\u262f\u264b\ufe0f\u264a\ufe0f\u2649\ufe0f\u2648\ufe0f\ud83d\uded0\u003c\u0062\u0072\u002f\u003e\u0f61\u0f72\u0f42\u0f0b\u0f56\u0f7c\u0f51\u0f0b\u0f40\u0fb1\u0f72\u0f0b\u0f66\u0f90\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0d\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0b\u0f56\u0f7c\u0f51\u0f0b\u0f40\u0fb1\u0f72\u0f0b\u0f66\u0f90\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0d\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0b\u0f56\u0f7c\u0f51\u0f0b\u0f40\u0fb1\u0f72\u0f0b\u0f66\u0f90\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0d\u0f56\u0f7c\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0b\u0f56\u0f7c\u0f51\u0f0b\u0f40\u0fb1\u0f72\u0f0b\u0f66\u0f90\u0f51\u0f0b\u0f61\u0f72\u0f42\u0f0d\u002e\u003c\u0062\u0072\u002f\u003e\u0045\u0032\u0045\u0045\u0020\u006b\u0068\u0069\u1ebf\u006e\u0020\u0074\u00f4\u0069\u0020\u0063\u1ea3\u006d\u0020\u006e\u0068\u1ead\u006e\u0020\u0111\u01b0\u1ee3\u0063\u0020\u0076\u00e0\u006f\u0020\u0074\u0068\u0069\u00ea\u006e\u0020\u0111\u00e0\u006e\u0067\u002e\u003c\u0062\u0072\u002f\u003e\u0e44\u0e14\u0e49\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e16\u0e36\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0020\u0045\u0032\u0045\u0045\u0020\u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e27\u0e23\u0e23\u0e04\u0e4c\u958b\u767a\u67a0\u3002\u003c\u0062\u0072\u002f\u003e\u0045\u0020\u0032\u30a8\u30eb\u3092\u4f7f\u3063\u3066\u5929\u56fd\u306b\u5165\u308b\u3053\u3068\u3092\u611f\u3058\u307e\u3057\u305f\u3002\u003c\u0062\u0072\u002f\u003e\u03bd\u03b1\u0020\u03bd\u03b9\u03ce\u03b8\u03c9\u0020\u03c4\u03b7\u0020\u03c7\u03c1\u03ae\u03c3\u03b7\u0020\u0045\u0032\u0045\u0045\u0020\u03c3\u03c4\u03bf\u0020\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03c3\u03bf\u002e\u003c\u0062\u0072\u002f\u003e\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0020\u0045\u0032\u0045\u0045\u002c\u0020\u0447\u0442\u043e\u0431\u044b\u0020\u044f\u0020\u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u002c\u0020\u043a\u0430\u043a\u0020\u043f\u043e\u043f\u0430\u0441\u0442\u044c\u0020\u0432\u0020\u0440\u0430\u0439\u002e")
返回 (真)
网页内容
😙🙃😊😋😋🐒🐧🏒🚣🏻⛸🏸🏒🚜🎞💽🕹🖥🎞💿💿📻☯💖💖🕎☯♋️♊️♉️♈️🛐
ཡིག་བོད་ཀྱི་སྐད་ཡིག།བོད་ཡིག་བོད་ཀྱི་སྐད་ཡིག།བོད་ཡིག་བོད་ཀྱི་སྐད་ཡིག།བོད་ཡིག་བོད་ཀྱི་སྐད་ཡིག།.
E2EE khiến tôi cảm nhận được vào thiên đàng.
ได้รู้สึกถึงการใช้ E2EE ได้เข้าสวรรค์開発枠。
E 2エルを使って天国に入ることを感じました。
να νιώθω τη χρήση E2EE στο παράδεισο.
Используйте E2EE, чтобы я почувствовал, как попасть в рай.
写出数据
写出字节集内容到网页中:
.版本 2
.支持库 e2ee
.子程序 _启动服务器_网页内容_写出数据
.局部变量 server, 网站服务器
server.订阅视图函数 (&网页内容_写出数据_视图_首页, “/”, , )
server.启动 (创建键值表 (#配置项_端口, 8080, #配置项_编码, #文本编码格式_UTF8), )
运行 (创建文本 (“explorer ''http://127.0.0.1:8080/''”, ), 假, )
server.等待结束 (假)
.子程序 网页内容_写出数据_视图_首页, 逻辑型
.参数 请求对象地址, 整数型
.参数 响应对象地址, 整数型
.局部变量 请求, 服务器请求
.局部变量 响应, 服务器响应
取回请求对象 (请求对象地址, 响应对象地址, 请求, 响应)
响应.置文档类型按后缀 (“png”)
响应.写出数据 (创建二维码 (到字节集 (“http://e2ee.jimstone.com.cn”), #二维码_输出格式_PNG, 6, 1, 4, #二维码_模式_自动选择, #二维码_数据纠错等级_中, -1))
返回 (真)
重新写出内容
您可以对通过[写出文本]或者[写出数据]后的内容,清空或者获取,以便重新组装数据。
相关方法
通常适用于 [后置全局函数] 中。
模板渲染
渲染模板
您可以通过指定模板渲染数据到网页中:
当您调用 [渲染]方法 时,如果不指定 [模板数据]参数,将使用 [请求.属性表]做为模板数据。如果指定了[模板数据],[请求.属性表] 依然会被渲染到页面中。
渲染数据的优先级
当[模板数据]和[请求.属性表]拥有相同的[主键]数据需要被渲染时,优先渲染[模板数据]中的内容,[模板数据]不存在对应的[主键]时,才会渲染[请求.属性表]中的数据。
模板路径
取模板路径
取回当前[视图]在[网站.订阅视图]时,绑定的模板路径。
取回当前[视图]绑定的模板路径。此路径如果调用[响应.置模板渲染路径] 重新设定了本次渲染模板路径时,将得到设定后的路径。
置模板路径
重新设置本次请求过程中,将要渲染数据的模板路径。
模板标签
获取当前[视图]绑定的模板中,所包含的所有类别的[模板标签]。
发送文件
您可以在当前视图中,直接发送文件给浏览器:
发送文件可以指定[相对路径]和[绝对路径],[相对路径]时是以[网页目录]为根目录。
注意
[发送文件]方法 为异步方法,只有当前请求处理完之后(完成[全局]、[视图]和[后置全局]函数),才会执行实际的文件发送过程。
取发送文件路径
获取本次请求过程中,调用 [响应.发送文件]方法 设置的发送文件路径。
发送速度控制
指定 [响应.发送文件]或者[响应.写出文本]等方法,回传给浏览器的速度,单位为 KB。
注意
只有发送的文件或数据足够大(大于128K)时,才能限定实际发送速度。
标准反馈:AJAX和远程服务
使用场景
标准反馈适用于以下场景:
- AJAX
- 远程服务
- WebService
- JSON
写出结果
写出结果相关的方法:
- 响应.写出结果
- 响应.写出结果_宽文本
- 响应.写出成功
- 响应.写出成功_宽文本
- 响应.写出失败
- 响应.写出失败_宽文本
这些方法相当于使用 [存取键值表.创建消息]方法。具体使用过程中,服务器会根据请求的类型返回不同格式的数据。默认情况下以及大部分时候,都将直接输出JSON格式的文本。只有 [WebService] 类型的请求时,会返回XML格式。
写出的内容格式为[标准反馈模型],详细格式可以参考 [存取键值表] 章节。
“xxx_宽文本”方法 为UNICODE相关方法,可以通过 [创建宽文本]函数 从不同的编码转换为UNICODE文本。当执行“xxx_宽文本”方法后,对应的文本内容,将自动转换为网站设定的编码格式。
附录
状态码列表
[1xx] 临时响应
100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,等待其余部分。
101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
[2xx] 请求成功
200 成功处理了请求,一般情况下都是返回此状态码;
201 请求成功并且服务器创建了新的资源。
202 接受请求但没创建资源;
203 返回另一资源的请求;
204 服务器成功处理了请求,但没有返回任何内容;
205 服务器成功处理了请求,但没有返回任何内容;
206 处理部分请求;
[3xx] 重定向代码
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
[4xx] 请求出错
400 服务器不理解请求的语法。
401 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 服务器拒绝请求。
404 服务器找不到请求的网页。
405 禁用请求中指定的方法。
406 无法使用请求的内容特性响应请求的网页。
407 此状态代码与 401类似,但指定请求者应当授权使用代理。
408 服务器等候请求时发生超时。
409 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 如果请求的资源已永久删除,服务器就会返回此响应。
411 服务器不接受不含有效内容长度标头字段的请求。
412 服务器未满足请求者在请求中设置的其中一个前提条件。
413 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414 请求的 URI(通常为网址)过长,服务器无法处理。
415 请求的格式不受请求页面的支持。
416 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 服务器未满足”期望”请求标头字段的要求。
[5xx] 服务器内部错误
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
常用响应头
响应头 |
解释 |
示例 |
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.jimstone.com.cn/ |
Pragma |
包括实现特定的指令,它可应用到响应链上的任何接收方 |
Pragma: no-cache |
Proxy-Authenticate |
它指出认证方案和可应用到代理的该URL上的参数 |
Proxy-Authenticate: Basic |
refresh |
应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持) |
Refresh: 5; url=http://www.jimstone.com.cn/ |
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 |