当浏览器地址中输入一个URL,或是客户端发起一个请求时,浏览器内核将会解析这个URL。URL一般包括几大部分:
- protocol:协议头
- host:主机域名或IP地址
- port:端口号
- path:目录路径
- query:即查询参数
- fragment:即#后的hash值,一般用来定位到某个位置
应用层常见的协议有:
- http:超文本传输协议资源
- https:用安全套接字层传送的超文本传输协议
- ftp:文件传输协议
- file:当地电脑或网上分享的文件
- telnet:Telnet协议
- smtp:电子邮件
HTTP-超文本传输协议:
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
从HTTP规范角度讲:
1. 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
- 1.1 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。 - 1.2 幂等的意味着对同一URL的多个请求应该返回同样的结果。
2. 根据HTTP规范,POST表示可能修改变服务器上的资源的请求。
从表面看:
1. GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,而且会进行转码(encodeURI(),encodeURIComponent())。POST把提交的数据则放置在是HTTP包的包体中。
2. GET方式使用的URL总长会受到特定的浏览器及服务器的限制(IE对URL长度的限制是2083字节(2K+35)),POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。
!!! HTTP协议规范并没有作出限制。
3. 后端获取数据的方法不一样,需要看具体语言。
4. POST的安全性要比GET的安全性高。
- 通过GET提交数据,用户名和密码将明文出现在URL上,因为
(1)登录页面有可能被浏览器缓存,
(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了 - 使用GET提交数据还可能会造成Cross-site request forgery(跨站请求伪造)攻击。
- get请求和post请求的安全等级是一样的,只不过是post的隐私性比get好些。
参考资料: 浅谈HTTP中Get与Post的区别