GET请求和POST请求剖析

来源:互联网 发布:如何加强网络文化建设 编辑:程序博客网 时间:2024/06/13 09:31

HTTP/1.1协议中,定义了8种发送http请求的方法

GETPOSTOPTIONSHEADPUTDELETETRACECONNECTPATCH

根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式

PUT :增

DELETE :删

POST:改

GET:查

最常用的是GETPOST(实际上GETPOST都能办到增删改查)

要想使用GETPOST请求跟服务器进行交互,得先了解一个概念

参数

就是传递给服务器的具体数据,比如登录时的帐号、密码

缓存是针对URL而言的。

GETPost的比较如下:

GET的本质是

从服务器拿数据,效率更高。

从数学的角度讲,GET的结果是“幂等”的

GET请求能够被缓存

在HTTP协议中,没有对GET请求的数据大小限制,不过因为浏览器的不同,一般限制在 2~8k之间

所有的参数包装在URL中,并且服务器的访问日志会记录,不要传递密码账户的敏感信息。

参数格式:?在资源路径末尾添加?表示追加参数。

变量名=变量值  每一个变量及值按照”变量名=变量值”方式设定,不能包含空格或者中文字符

&  多个参数使用&连接。


POST

POST的本质是给。

向服务器发送数据,也可以获得服务器处理之后的结果,效率不如GET。

POST请求不能被缓存

POST提交数据比较大,大小靠服务器的设定值限制,PHP通常设定2M。

URL中只有资源路径,但不包含参数,服务器日志不会记录参数,相对更安全。

参数被包装成二进制数据体,格式与GET基本一致,只是不包含 ?

所有涉及用户隐私的数据(密码,银行卡账号)一定要使用POST方式传递。


URL GET方法 在网络访问的URL中不能包含空格以及中文等特殊符号。


新建工程,代码如下:

<span style="font-size:18px;">////  ViewController.m//  05-用户登录////  Created by apple on 15/1/20.//  Copyright (c) 2015年 apple. All rights reserved./** GET和POST比较 - url  GET:     http://127.0.0.1/login.php?username=%@&password=%@     1. http://127.0.0.1主机地址     2. login.php是服务器负责登录的脚本(php,java)     3. ? 后面的就是参数,是给服务器传递的参数     参数的格式     变量名=值     username=@"zhangsan"     4. & 如果是多个参数,通过这个进行连接。    注意点: url不能包含中文或者空格及特殊符号, 如果有需要转义    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  POST:     只是一个单纯的资源路径(没有任何参数,因为参数都在数据体里)  - request    GET - 什么都不需要指定,因为默认的HTTPMethod 就是“GET”    POST -         1. 需要指定HTTPMethod 是POST        2. 指定了数据体的二进制.        POST出现中文,也不需要转义,(系统帮我们实现了)    *** POST的参数和GET在URL里的参数,格式是一样的。 只是没有 ?   - Connection    都一样  */#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {      [self postLogin];    }/**POST*/- (void)postLogin{        // 1. url    NSString *urlString = @"http://127.0.0.1/login.php";        NSURL *url = [NSURL URLWithString:urlString];        // 2. 可变的请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f];        // 2.1 指定http的访问方法,服务器短才知道如何访问    request.HTTPMethod = @"POST";        // 2.2 指定数据体,数据体的内容可以从firebug里面直接拷贝    // username=zhangsan&password=zhang    NSString *username = @"张三";    NSString *pwd = @"zhang";    NSString *bobyStr = [NSString stringWithFormat:@"username=%@&password=%@", username, pwd];        // 2.2.1 跟服务器的交互,全部传递的二进制    request.HTTPBody = [bobyStr dataUsingEncoding:NSUTF8StringEncoding];        // 3. 连接    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {                // 反序列化        id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];                NSLog(@"%@", result);    }];}- (void)getLogin{    /**     GET     http://127.0.0.1/login.php?username=%@&password=%@     1. http://127.0.0.1主机地址     2. login.php是服务器负责登录的脚本(php,java)     3. ? 后面的就是参数,是给服务器传递的参数     参数的格式     变量名=值     username=@"zhangsan"     4. & 如果是多个参数,通过这个进行连接。     */        // 1. url    NSString *username = @"张三";    NSString *pwd = @"zhang";        NSString *urlString = [NSString stringWithFormat:@"http://192.168.10.9/login.php?username=%@&password=%@",username, pwd];        // url里面不能包含中文空格特殊符号    // 如果有,需要百分号转义    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];        NSURL *url = [NSURL URLWithString:urlString];            // 2. 请求    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f];        // 3. 连接    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {                // 反序列化        id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];                NSLog(@"%@", result);    }];    }@end</span>
运行结果如下:




0 0
原创粉丝点击