首先说一下http请求,包括三部分:请求行,请求头,请求体(http post有,http get没有)。
发送请求到http server的时候,这三部分里面都可以传递参数。通常我们不考虑请求头里传递参数,这也不标准。http get请求只能通过请求行来传递参数,即通过"?user=abc&pwd=123"这样的形式,通过浏览器访问,容易被看见,而且长度也受到限制。所以才有了http post请求,在请求体里面带参数,参数的形式就很多样了,这里不谈。那么http post请求可不可以像http get请求一样通过请求行来传递参数呢?答案当然是可以的。而且对于http post请求,可以同时通过请求行和请求体传递参数。
如果使用curl发送http 请求,具体形式:
1. http get请求,在请求行带参数
curl https://networktraversal.googleapis.com/iceconfig?key=4080218913
2. http post请求,在请求体带参数
curl -d "key=4080218913" https://networktraversal.googleapis.com/iceconfig
Content-Type为:application/x-www-form-urlencoded
另一种为:multipart/form-data,这里没用到。
3. http post请求,在请求行带参数
curl -X POST https://networktraversal.googleapis.com/iceconfig?key=4080218913
此时,请求体为空。
4. http post请求,在请求行和请求体带参数
curl -d "user=abc&pwd=123" https://networktraversal.googleapis.com/iceconfig?key=4080218913
---------------------------------------------------------------------------------------------------------------------------------
那么http server端如何区分参数是在请求行还是请求体里面的呢?
它应该在两个地方都作解析。