HTTP 有八種請(qǐng)求(也稱方法)承匣,其中最常見的是 GET 請(qǐng)求和 POST 請(qǐng)求。
GET 請(qǐng)求通常用于查詢沿侈、獲取數(shù)據(jù)斗忌,而 POST 請(qǐng)求則用于發(fā)送數(shù)據(jù)质礼,除了用途上的區(qū)別,它們還有以下這些不同:
1.GET 請(qǐng)求可以被緩存织阳,可以被收藏為書簽眶蕉,但 POST 不行。
2.GET 請(qǐng)求會(huì)保留在瀏覽器的歷史記錄中唧躲,POST 不會(huì)造挽。
3.GET 請(qǐng)求的長度有限制(不同的瀏覽器不一樣,大約在幾 Kb 左右)弄痹,URL 的數(shù)據(jù)類型只能是 ASCII 字符饭入,POST 請(qǐng)求沒有限制。
4.GET 請(qǐng)求的參數(shù)在 URL 中肛真,因此絕不能用 GET 請(qǐng)求傳輸敏感數(shù)據(jù)谐丢。POST 請(qǐng)求數(shù)據(jù)則寫在 HTTP 的請(qǐng)求頭中,安全性略高于 GET 請(qǐng)求蚓让。
注意:
POST 請(qǐng)求僅比 GET 請(qǐng)求略安全一點(diǎn)乾忱,它的數(shù)據(jù)不在URL中,但依然以明文的形式存放于 HTTP 的請(qǐng)求頭中历极。
URL的請(qǐng)求方式
網(wǎng)絡(luò)請(qǐng)求方式有兩種:GET 和 POST
兩種方式的相同點(diǎn)是:
都能給服務(wù)器傳輸數(shù)據(jù)
兩種請(qǐng)求方式的不同點(diǎn)是:
1窄瘟、給服務(wù)器傳輸數(shù)據(jù)的方式:
GCT:通過網(wǎng)址字符串
POST:通過data
2、傳輸數(shù)據(jù)的大刑诵丁:
GET:網(wǎng)址字符串最多255字節(jié)
POST:使用NSData蹄葱,容量超過1G
3、安全性:
GET:所有傳輸給服務(wù)器的數(shù)據(jù)锄列,顯示在網(wǎng)址里新蟆,類似于密碼的明文輸入,直接可見
POST:數(shù)據(jù)被轉(zhuǎn)成NSData(二進(jìn)制數(shù)據(jù))右蕊,類似于密碼的密文輸入琼稻,無法直接讀取
連接方式
同步連接:程序容易出現(xiàn)卡死現(xiàn)象
異步鏈接:等待數(shù)據(jù)返回
異步鏈接有兩種實(shí)現(xiàn)方式:
設(shè)置代理,接受數(shù)據(jù)
實(shí)現(xiàn)block
請(qǐng)求方法(AFN2.0)
post
+ (void)asynPostRequestFromeNetWithUrl:(NSString *)urlString andParam:(NSDictionary *)dic success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure {
NSString *urlStr = [NSString stringWithFormat:@"%@%@",BASE_API_URL,urlString];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setTimeoutInterval:REQUEST_TIME_OUT_SECOND];
[manager POST:urlStr parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
get
+ (void)asynGetRequestFromeNetWithUrl:(NSString *)urlString andParam:(NSDictionary *)dic success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:urlString parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}