文档章节

HTTP小记

rathan0
 rathan0
发布于 2015/07/28 09:58
字数 1074
阅读 21
收藏 0

1、关于HTTP的GET方法的长度限制:

背景:昨天工作中遇到了个问题,很简单,一个GET请求因为QueryParam中有一个超长的json(大概1w字符),chrome中发送失败,于是了解了下GET方法的长度限制,在此记一笔~

HTTP的GET方法没有长度限制,但是不同的浏览器和服务器都有自己的限制:

浏览器版本 url最大长度(字符) 超过最大长度
IE6.0 2083 无法提交
IE7.0 2083 仍然能提交,但是只能传过去2083个字符
Firefox 3.0.3 7764 无法提交
Opera 9.52 7764 无法提交
Chrome 2.0.168 7713 无法提交

因此url有可能超长的时候,改用POST方法吧~


2、HTTP方法的编码:

[{:,空格等标点会被编码成ASCII码,非英文字符使用base64编码,总之就是编码之后不可读。相关方法可以用encodeURI、decodeURI、encodeURIComponent、decodeURIComponent自行解决,相应的后端也要URLDecoder进行编/解码。

还是昨天写代码的时候,之前使用params: encodeURIComponent(Ext.JSON.encode(queryParams))这种方法在url中传的参数,从GET方法改为POST方法后,后端解不出来了(后端未做修改),前端改为params: Ext.JSON.encode(queryParams)就好了,不晓得什么原因……

可能原因猜想:

  • EXT.JS自己做了编码;

  • HTTP中GET方法和POST方法对编码的要求不同

  • encodeURIComponent的问题

  • Ext.JSON.encode动了手脚

先从第三点开始吧(因为懒得查第一点……)

3、encodeURI 和 encodeURIComponent

————————————————学者范儿分割线————————————————————

两者都是ECMA-262标准中定义的函数,所有兼容这个标准的语言(如JavaScript, ActionScript)都会实现这两个函数。

它们都是用来对URI (RFC-2396)字符串进行编码的全局函数,但是它们的处理方式和使用场景有所不同。为了解释它们的不同,我们首先需要理解RFC-2396中对于URI中的字符分类:

保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 

Mark字符(mark characters):这类字符在RFC-2396中特别定义,但是没有特别说明用途,可能是和别的RFC标准相关。 这些字符是:"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" 

基本字符(alphanum characters):这类字符是URI中的主体部分,它包括所有的大写字母、小写字母和数字 

在介绍完上面三类字符串后,我们就非常容易来解释encodeURI和encodeURIComponent函数的不同之处了:

encodeURI: 该函数对传入字符串中的所有非(基本字符、Mark字符和保留字符)进行转义编码(escaping)。所有的需要转义的字符都按照UTF-8编码转化成为一个、两个或者三个字节的十六进制转义字符(%xx)。例如,字符空格" "转换成为"%20"。在这种编码模式下面,需要编码的ASCII字符用一个字节转义字符代替,在\u0080和\u007ff之间的字符用两个字节转义字符代替,其他16为Unicode字符用三个字节转义字符代替 encodeURIComponent: 该函数处理方式和encodeURI只有一个不同点,那就是对于保留字符同样做转义编码。例如,字符":"被转义字符"%3A"代替 

之所以有上面两个不同的函数,是因为我们在写JS代码的时候对URI进行两种不同的编码处理需求。

差别:

encodeURI可以用来对完整的URI字符串进行编码处理。

encodeURIComponent可以对URI中一个部分进行编码,从而让这一部分可以包含一些URI保留字符。

encodeURIComponent例子:

http://www.mysite.com/send-to-friend.aspx?url=http://www.mysite.com/product.html 

能且仅能使用encodeURIComponent编码,否则这将是一个无效URL(包含URL保留字)

正确的URI应该如下: 

http://www.mysite.com/send-to-friend.aspx?url=http%3A%2F%2Fwww.mysite.com%2Fproduct.html

encodeURI例子:

谁来补充下?!

————————————————学者范儿分割线————————————————————

4、HTTP中GET方法和POST方法编码:

通过第三点知道GET方法中QueryParam如果有需要编码的字符需要使用encodeURIComponent进行编码,那么POST方法中的FormParam需要编码吗?

TO BE CONTINUED……


© 著作权归作者所有

上一篇: GP常用系统查询
下一篇: 异常处理的发展
rathan0
粉丝 4
博文 66
码字总数 36282
作品 0
程序员
私信 提问
然之协同办公1.1版本发布,增加现金流管理功能!

大家好,然之协同办公系统1.1beta版本发布了。这个版本主要增加了现金流管理模块。通过现金流管理模块,中小型企业的管理人员可以很清楚的掌握公司现金流的状况,做到心中有数,做出合理的决...

炒蚕豆吃蹦豆
2014/06/04
2.1K
17
MooTool 1.1.0 发布,开发者常备桌面小工具

MooTool 1.1.0 已发布,开发者常备桌面小工具。 更新内容 Mac OS 的一些特殊处理 设置界面样式微调 支持操作习惯(菜单栏位置)设置 优化发送 http 请求按钮图标 时间戳转换增加按回车键快捷...

周波-RememBerBer
10/28
3.3K
4
什么样的创业项目才能在OSC被看好?

当然是用心做, 不坑爹的产品 例如我和几个码农兄弟出来创业搞的这个项目, 也许成功几率会比回家卖红薯高点也说不定?虽然赢利点还没想好(手动滑稽) 白话介绍: 真实购物后的经验分享、购物心...

工兵铲
2017/07/28
692
8
Bambook应用“我爱记歌词”搜索动力说明

我爱记歌词 是一个方便用户搜索歌词,并将歌词传输到Bambook设备的程序。 我爱记歌词采用了google,baidu,sogou三个搜索引擎作为歌词搜索的源动力;系统会自动根据用户操作自动检索更多的可...

长平狐
2012/06/08
45
0
Bambook应用“我爱记歌词” 使用说明

功能说明: 我爱记歌词 是一个方便用户搜索歌词,并将歌词传输到Bambook设备的程序。 用户可以通过此程序在PC上搜索喜欢的歌词,并汇集成一本电子书保存到Bambook设备上,从而达到“用户在B...

长平狐
2012/06/08
44
0

没有更多内容

加载失败,请刷新页面

加载更多

射频特征阻抗

Characteris Impendance(特性阻抗,也称为‘特征阻抗’)是我们经常看到并使用自己的术语之一,但非常模糊且难以解释。以下是来自几个不同来源的Characteris Impendance(特性阻抗)的一些定义。...

demyar
16分钟前
1
0
Spring Boot Tomcat配置项

参数配置容器 server.xx开头的是所有servlet容器通用的配置,server.tomcat.xx开头的是tomcat特有的参数,其它类似。 所有参数绑定配置类:org.springframework.boot.autoconfigure.web.Serv...

xiaomin0322
20分钟前
2
0
微课程 | 第二课《Docker 安装方式介绍》

微课程 | 第二课《Docker 安装方式介绍》视频 https://v.youku.com/v_show/id_XNDQ0NDUzNjkxNg==.html?spm=a2hzp.8244740.0.0 上一期我们介绍了 DBLE 的基本概况,下面进入我们的正题,正题基...

爱可生
20分钟前
2
0
GUAVA--基础工具(Preconditions)

1、前置条件 俗话说丑话讲在前面,在做某些事情的时候是需要做一些前置条件的。假如需要修改一条数据的话,当参数传进来,我们要先查询这条数据是否存在。这时候就需要一个if了,如果参数还需...

MrYuZixian
34分钟前
6
0
PythonSpot 中文系列教程 · 翻译完成

原文:PythonSpot Python Tutorials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 在线阅读 ApacheCN 学习资源 目录 PythonSpot 中文系列教...

ApacheCN_飞龙
42分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部