Python网络通信(4)— HTTP协议
一、url介绍
-
URL
是Uniform Resource Locator
的简写,意思是统一资源定位符。 - 一个URL由以下几部分组成:
scheme://host:port/path/?query-string=xxx#anchor
scheme
: 代表的是访问的协议,一般为http
、https
或ftp
等。host
: 主机名,域名。比如www.baidu.com
。port
: 端口号。当访问一个网站的时候,浏览器默认使用80
端口号。path
: 查找路径。比如:www.jianshu.com/trending/now
,后面的trending/now
就是path
。query-string
: 查询字符串,比如:www.baidu.com/s?wd=python
,后面的wd=python
就是查询字符串。anchor
: 锚点,后台一般不用管,前端用来做页面定位的。- 在浏览器中请求一个
url
,浏览器会对这个url进行一个编码。除英文字母,数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码。
二、http的请求方法
在HTTP协议中,定义了八种请求方法,最常用的请求方法是get
和`post``请求。
-
get
请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任影响的时候使用get
请求。 -
post
请求:向服务器发送数据(登录)、上传文件等,会对服务器资源产生影响的时候会使用post
请求。
在HTTP协议中,向服务器发送一个请求,数据分为三部分,第一个是把数据放在url中,第二个就是把数据放在head
中,第三个是把数据放在body
中(在post请求中)。
三、常见请求头参数
-
User-Agent
: 浏览器名称。请求一个网页的时候,服务器通过这个参数就可以知道这个请求是有那种浏览器发送的。 -
Referer
: 表明当前这个请求是从哪个url过来的。 -
Cookie
: http协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人,因此这个时候就用Cookie
来做标识,一般如果想要做登录后才能访问的网站,那么就需要发送cookie
信息了。
如下所示,是给百度首页发送的请求头:
四、常见响应状态码
-
200
: 请求正常。服务器正常的返回数据。 -
301
: 永久重定向。比如在访问www.jingdong.com
的时候会重定向到www.jd.com
。 -
302
: 临时重定向。比如在访问一个需要登录的页面的时候,而此时没有登录,那么就会重定向到登录页面。 -
400
: 请求的url在服务器找不到。换句话说就是url错误。 -
403
: 服务器拒绝访问,权限不够。 -
500
: 服务器内部错误,可能服务器出现bug了。
如下所示,是访问百度首页时,百度服务器返回的响应头: