请求对象

客户端发送过来的请求信息除了包含网址,还有许多杂七杂八的内容。

启动Firefox,安装并打开Live HTTP Headers 插件[注1],访问一个网页。



如图,发送到服务器的字符串是从 GET 到 结尾空行 之间的所有内容。

WEB框架将会解析这段字符串,并生成响应的请求对象(Request Object)。

各个框架的请求对象大同小异,一同百通。

以 django的request对象 和 yaro[注2] 为例,对照着来略窥一二。

django yaro 用途
request.path request.uri.path 请求地址,不含域名,如 /people/zuroc/
request.method request.method 请求方法,如GET,POST
request.GET request.query 包含了GET中参数的字典
request.POST request.form 包含了POST中参数的字典
request.COOKIES request.cookie 请求中的cookie
request.META request.environ 包含所有请求信息的字典

请求地址,也就是访问的网址中的路径,网址分发就靠它了。

请求方法,有很多类型,不过最常用的就两种 -- GET 和 POST。

普通的浏览操作都是 GET方式请求,网页表单提交的默认方式也是GET。

GET方式提交表单可以向服务器传递参数,它会将参数编码在URL中,比如用百度搜索python

http://www.baidu.com/s?wd=python

上面请求对已的 request.GET 是 { "wd" : "python" }

GET能直接作为书签收藏,缺点是有长度限制。限制因浏览器而异,建议不要超过2000个字符。

POST将提交参数隐藏在请求中,它可以提交大文本,上传文件。

GET和POST中,可以出现同样的名字对应多个值的情况,比如:

?lang=python&lang=java

此时,框架通常会把映射的值生成为列表,如 { "lang" : [ "python","java" ] }

习惯上,当请求会修改服务器上数据时,用POST方式访问,否发用GET -- 当然,走有中国特色的网页开发,具体问题具体分析了。

再说说cookie。

网站可以在用户的浏览器中保存一段小的文本,称之为cookie

每当用户浏览页面时,cookie的内容会随着请求一起发送到服务器。

人们常常用cookie来记录登录状态,跟踪用户的点击流。

值得注意的是,cookie大小被浏览器严格限制(不超过4095个字节),所以cookie不适合用来存储大文本。并且cookie发送到网站服务器也要消耗带宽。因而,cookie越精简越好。

需要牢记的是,从客户端发送过来的任何数据,都可能被别有用心的一小撮人篡改,所以cookie中的数据同样需要进行格式校验。

最后,请求中的所有信息都可以在 META/environ 中找到,除了客户端发过来的信息,它还包含了HTTP服务器加上的信息 -- 比如 客户端的IP地址 。


注释:

1. Live HTTP Headers ,下载地址 https://addons.mozilla.org/zh-CN/firefox/addon/3829

2. yaro , Yet Another Request Object 的缩写 ,主页 http://lukearno.com/projects/yaro/
::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

订阅 substack 体验古早写作:


关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::