这句话看上去实在没毛病啊,菜鸟教程也是这样说的啊 。虽然字面意思上没有错误,但是理解一定要正确 。我想说的是GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制(不仅仅是querystring的长度),这个限制是特定的浏览器及服务器对他的限制
下面就是对各种浏览器和服务器的最大处理能力做一些说明
- IE浏览器对URL的最大限制为2083个字符
- Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符 。
- Safari (Browser):URL最大长度限制为 80,000个字符 。
- Opera (Browser):URL最大长度限制为190,000个字符 。
- google (chrome):URL最大长度限制为8182个字符 。
- Apache (Server):能接受最大url长度为8,192个字符 。
- Microsoft Internet Information Server(IIS):能接受最大url的长度为16,384个字符 。
最常见的form表单,浏览器默认的form表单,默认的content-type是Application/x-www-form-urlencoded,提交的数据会按照key value的方式,jquery的ajax默认的也是这种content-type 。当然在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了 。
2.3 误区三
“post比get安全性要高”
这里的安全是相对性,并不是真正意义上的安全,通过get提交的数据都将显示到url上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而post不会 。另外get提交数据还可能会造成CSRF攻击 。
2.4 误区四:“GET产生一个TCP数据包;POST产生两个TCP数据包 。”
这一点理解起来还是有一定难度的,实际上,不论哪一种浏览器,在发送 POST 的时候都没有带 Expect 头,server 也自然不会发 100 continue 。通过抓包发现,尽管会分两次,body 就是紧随在 header 后面发送的,根本不存在『等待服务器响应』这一说 。
从另一个角度说,TCP 是传输层协议 。别人问你应用层协议里的 GET 和 POST 有啥区别,你回答说这俩在传输层上发送数据的时候不一样,确定别人不抽你?
参考资料:https://zhuanlan.zhihu.com/p/25028045
3 http状态码附录3.1 状态码1xx
- 100 Continue:
- 101 Switching Protocols:
- 102: 由WebDAV(RFC 2518):
3.2 状态码2xx:成功
- 200 OK:
- 201 Created:
- 202 Accepted:
- 203 Non-authoritative Information:
- 204 No Content:
- 205 Reset Content:
- 206 Partial Content:
3.3 状态码3xx:重定向
- 300 Multiple Choices:
- 301 Moved Permanently:
- 302 Found:
- 303 See Other:
- 304 Not Modified:
- 305 Use Proxy:
