POST、GET傳輸數據大小限制
HTTP協議規范沒有對URL長度進行限制,也沒有限制消息主體的大小,所以從理論上講,GET、POST是沒有大小限制的。那又為什么在使用過程中會有大小限制呢??
GET方式數據長度限制:
- 服務器做了GET提交數據大小的限制
- 由於GET方式發送數據是拼接在URL,GET提交時,傳輸數據會受到URL長度的限制,不同瀏覽器的長度限制還不一樣
POST方式數據長度限制:
- 各個WEB服務器會規定對POST提交數據大小進行限制,Apache等都有各自的配置。
安全性
HTTP協議是以ASCII碼傳輸,建立在TCP/IP協議之上的應用層規范。規范把HTTP 請求分為三個部分:狀態行、請求頭、消息主體。POST請求發送的數據是放在消息主體中,這是遵循HTTP協議的規范格式,而GET是將發送的數據直接拼接在URL的后面,也就是在狀態行中。很明顯,POST方式比GET方式安全
POST方式:
狀態行:
Request URL:http://crm.piao.qunar.com
Request Method:POST
請求頭:
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Content-Length:190
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:QN1=wKgZEVYbR4wc9UPaYgXcAg==; QN99=3984;
Host:crm.piao.qunar.com:8080
Origin:http://crm.piao.qunar.com:8080
Pragma:no-cache
Referer:http://crm.piao.qunar.com:8080/merchantPage/group-supplier
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36
X-Requested-With:XMLHttpRequest
消息主體:
data=1
GET方式:
狀態行:
Request URL:http://crm.piao.qunar.com?data=1
Request Method:GET
請求頭:
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Content-Length:190
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:QN1=wKgZEVYbR4wc9UPaYgXcAg==; QN99=3984;
Host:crm.piao.qunar.com:8080
Origin:http://crm.piao.qunar.com:8080
Pragma:no-cache
Referer:http://crm.piao.qunar.com:8080/merchantPage/group-supplier
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36
X-Requested-With:XMLHttpRequest
消息主體:
enctype
POST請求需要設置:enctype=application/x-www-form-urlencoded
文件上傳需要設置:enctype=multipart/form-data
jQuery的GET或者POST方式傳輸的數據,是否自動轉碼為utf-8??
使用jQuery的GET、POST方式傳輸數據都有可能未經過utf-8編碼,jQuery.param方法是將鍵值對轉化為utf-8編碼的方法。當使用jQuery的GET或者POST方式發送數據時,如果data類型不是string,那么會對data進行utf-8編碼,可以看下面的jQuery源碼:
if ( s.data && s.processData && typeof s.data !== "string" ) { s.data = jQuery.param( s.data, s.traditional ); }
為了確保傳輸的數據為utf-8編碼,怎么辦??
- 在提交數據時,建議使用jQuery的serialize方法,serialize會調用jQuery.param方法,對得到的對象進行utf-8編碼,返回一個字符串
- 使用
$.ajax/$.get/$.post方法時,data屬性值為一個對象 - 使用encodeURIComponent方法對要傳的數據進行utf-8編碼
