它是 HTTP 常见的请求类型,最常见于向服务器查询某些信息。
可以将查询参数追加到 URL末尾,以便将信息发送给服务器。
对查询字符串的格式有要求,每个参数名称和值必须使用encodeURIComponent进行编码,才能放到URL末尾,必须用&符号隔开。例如:baidu.com/index.php?name=111&id=222
GET请求产生一个数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
POST请求它是 HTTP 常见的请求类型,最常见于向服务器发送应该被保存的信息或者查询某些信息。
可以添加请求参数,将请求参数添加到body中。
POST请求产生2个数据包,在火狐浏览器中,产生一个数据包。
GET请求和POST请求的差别GET 请求的请求参数是添加到 head 中,可以在 url 中可以看到;POST 请求的请求参数是添加到BODY中,在url 中不可见。
GET 请求参数需要使用 encodeURIComponent 进行编码,必须用 & 符号隔开。
请求的url有长度限制,这个限制由浏览器和 web 服务器决定和设置的。例如IE浏览器对 URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。因为GET请求的参数是添加到URL中,所以GET请求的URL的长度限制需要将请求参数长度也考虑进去。而POST请求不用考虑请求参数的长度。
GET请求产生一个数据包; POST请求产生2个数据包,在火狐浏览器中,产生一个数据包。这个区别点在于浏览器的请求机制,先发送请求头,再发送请求体。因为GET没有请求体,所以就发送一个数据包,而POST包含请求体,所以发送两次数据包,但是由于火狐机制不同,所以发送一个数据包。
由于GET请求的参数是在url中,所以可以直接在浏览器中打开
GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
GET是幂等的,而POST不是。(幂等表示执行相同的操作,结果也是相同的)
当我们在浏览器中输入URL后,会发生什么?比如https://www.baidu.com
我们可以用curl -v https://www.baidu.com 来研究这个过程,会发现总共有3个子过程。
1、查找域名对应的IP地址Rebuilt URL to: https://www.baidu.com/* Trying 14.215.177.38...
我们可以通过nslookup www.baidu.com模拟这个过程,dns服务器返回两个IP地址,curl会随机选用其中一个IP服务器进行访问。
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
网站会检查是不是真的浏览器访问。需加上User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.1276.73 Safari/537.36,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法。
服务器一般会使用cookie来标识用户,如果接受并带上该cookie继续访问,服务器会认为你是一个已标识的正常用户。因此,大部分网站需要使用cookie的来爬取内容。