1、HTTP请求的方式
Http 定义了与服务器交互的不同方法,最基本的方法有 4 种,分别是 GET,POST,PUT,DELETE。URL 全称是资源描述符,我们可以这样认为:一个 URL 地址,它用于描述一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查,改,增,删 4 个操作。GET 一般用于获取/查询资源信息,而 POST 一般用于更新资源信息。
2、总结:Get请求和Post请求的区别
(1)使用Get请求时,参数在URL中显示,而使用Post请求,则不会显示出来;
(2)Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节.
(3)Get请求请求需注意缓存问题,Post请求不需担心这个问题;
(4)Post请求必须设置Content-Type值为application/x-form-www-urlencoded;
(5)发送请求时,因为Get请求的参数都在url里,所以send函数发送的参数为null,而Post请求在使用send方法时,却需赋予其参数;
(6)GET方式请求的数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据,例如账号和密码等。在某种情况下,GET方式会带来严重的安全问题。而POST方式相对来说就可以避免这些问题。
3、详细描述两种请求方式的区别
1) GET 请求,请求的数据会附加在 URL 之后,用于分割 URL 和传输数据,多个参数用&连接。URL 的编码格式采用的是 ASCII 编码,而不是 uniclde,即是说所有的非ASCII 字符都要编码之后再传输。POST 请求:POST 请求会把请求的数据放置在HTTP 请求包的包体中。因此,GET 请求的数据会暴露在地址栏中,而 POST 请求则不会。
2) 传输数据的大小:在 HTTP 规范中,没有对 URL 的长度和传输的数据大小进行限制。但是在实际开发过程中,对于 GET,特定的浏览器和服务器对 URL 的长度有限制。因此,在使用 GET 请求时,传输数据会受到 URL 长度的限制。对于 POST,由于不是 URL 传值,理论上是不会受限制的,但是实际上各个服务器会规定对 POST提交数据大小进行限制,Apache、IIS 都有各自的配置。
3) 安全性 POST 的安全性比 GET 的高。这里的安全是指真正的安全,而不同于上面GET 提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过 GET 请求,用户名和密码都会暴露再 URL 上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET 请求提交的数据还可能会造成 Cross-siterequest frogery 攻击。
4、下面用代码来说明两者的区别:
GET请求
function getMethod(){
var xhr = new createXHR();
var userName = document.getElementById("userName").value;
var age = document.getElementById("age").value;
//添加参数,以求每次访问不同的url,以避免缓存问题
xhr.open( "get", "example.php?userName=" + encodeURTComponent( userName ) + "&age=" + encodeURTComponent( age ) + "&random=" + Math.random(), true );
xhr.onreadystatechange = function(){
if( xhr.readyState == 4 && xhr.status == 200 ){
document.getElementById("result").innerHTML = xhr.responseText;
}
}
//发送请求,参数为null
xhr.send( null );
}
POST请求
function postMethod(){
var xhr = new createXHR();
var userName = document.getElementById("userName").value;
var age = document.getElementById("age").value;
var data = "userName=" + encodeURTComponent( userName ) + "&age=" + encodeURTComponent( age );
//不用担心缓存问题
xhr.open( "post", "example.php", true );
//必须设置,否则服务器端收不到参数
xhr.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
xhr.onreadystatechange = function(){
if( xhr.readyState = 4 && xhr.status == 200 ){
document.getElementById("result").innerHTML = xhr.responseText;
}
}
//发送请求,要data数据
xhr.send( data );
}