GET请求
就是向服务器取得(GET)指定的资源。在发出GET请求的时候,必须一并告诉服务器所请求资源的url,以及一些标头(header)信息,例。
GET将表单中数据的按照variable=value的形式,添加到action(服务)所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接。可以在浏览器的地址栏看见请求的参数信息。
GET请求可以发送的请求参数长度有限,对于太大量的数据并不适合用GET方式请求,这时可以改用POST
POST请求
就是在请求时发布(POST)信息给服务器,对于大量或复杂的信息发布(如文件上传),基本上会采用POST。例
POST是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。由于信息体的内容长度不受限制,所以大量数据的发送使用POST;
而由于请求参数移至消息体,地址栏上不会出现请求参数,对于一些敏感信息,如密码,即使长度不长,也会用POST请求。
如何选用POST和GET
1. GET请求跟随在url后面的请求参数长度有限;过长的请求参数,或文件上传等大量数据,应改用POST
2. GET请求参数会出现在地址栏,敏感性或有安全性考虑的参数(如信用卡卡号,用户名、密码等),应改用POST
3. POST请求的请求参数不会出现在地址栏上,所以无法加入浏览器的书签之中,如果有些页面是根据请求参数来作不同的画面呈现,而你希望可以让用户设定书签,以便日后可以直接点击书签浏览,则应该使用GET请求
4. 有些浏览器会依网址来缓存数据,如果网址是相同的URL,则会直接从浏览器缓存中取出数据,而不会真正发送请求到服务器上查询最新的数据。如果不希望服务器状态改变了,而浏览器仍从缓存中取得旧的资料,则可以改用POST请求(使用GET请求也可以避免缓存,例如在网址上附加时间戳,让每次GET请求的网址都不相同
另外,还有另一个非功能面上的考虑,其实也是HTTP当初在设计时区分GET与POST的目的之一,就是按请求是否为等幂(idempotent)操作来决定使用GET或POST。所谓是否为等幂操作,就是请求的操作是否改变服务器状态,同一个操作重复多次,是否传回同样的结果。
1. GET请求应该用于等幂操作。GET请求纯粹取得资源,而不改变服务器上的数据或状态。GET的请求参数,只是用来告知服务器,必须进一步根据请求参数(而不是URL)来标识出要响应的内容,同样的GET请求且使用相同的请求参数重复发送多次,都应该返回相同的结果。
2. POST请求应该用于非等幂操作。POST请求发送的数据,可能会影响服务器上的数据或状态,例如修改(增、删、改)数据库的内容,或是在服务器上保存文件。若请求会改变服务器的状态,则应该改用POST请求。
即GET从服务器获取数据;POST向服务器上传数据。
参考:《JSP&Servlet学习笔记》(第二版)