常见的请求方法:GET和POST
响应状态码(status code)
- 响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
http请求格式
- 常用的请求报头:
-
Host (主机和端口号)
Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。 -
Connection (链接类型)
-
Upgrade-Insecure-Requests (升级为HTTPS请求)
-
User-Agent (浏览器名称)
User-Agent:是客户浏览器的名称,后面会重点进行讲解的,也就是你在请求服务器的时候用的什么身份进行请求的,如果不带UA,那么就会显示python - requests/2.22.0,那么人家服务器如果有反爬机制,那么你就会补拦截。 -
Accept (传输文件类型)
-
Referer (页面跳转处)
Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
- 有时候遇到下载某网站图片,需要对应的referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据referer去判断是否是本网站的地址,如果不是,则拒绝,如果是,就可以下载;
- Accept-Encoding(文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。
- 举例:Accept-Encoding:gzip;q=1.0, identity; q=0.5, *;q=0 如果有多个Encoding同时匹配, 按照q值顺序排列,本例中按顺序支持 gzip, identity压缩编码,支持gzip的浏览器会返回经过gzip编码的HTML页面。 如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
-
Accept-Language(语言种类)
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。 -
Accept-Charset(字符编码)
-
Cookie (Cookie)
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能,以后会详细重点讲。
cookie是存储在本地的,而session是存储在服务器上的。
11.Content-Type (POST数据类型)
Content-Type:POST请求里用来表示的内容类型。
- 举例:Content-Type = Text/XML; charset=gb2312: 指明该请求的消息体中包含的是纯文本的XML类型的数据,字符编码采用“gb2312”。
服务端HTTP响应
- HTTP响应也由四个部分组成,分别是: 状态行、消息报头、空行、响应正文
常用的响应报头(了解)
理论上所有的响应头信息都应该是回应请求头的。但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到:
-
Cache-Control:must-revalidate, no-cache, private。
-
Connection:keep-alive
这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。 -
Content-Encoding:gzip
告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。 -
Content-Type:text/html;charset=UTF-8
告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。 -
Date:Sun, 21 Sep 2016 06:18:21 GMT
这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。 -
Expires:Sun, 1 Jan 2000 01:00:00 GMT
这个响应头也是跟缓存有关的,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题。所以这个响应头是没有Cache-Control:max-age=*这个响应头准确的,因为max-age=date中的date是个相对时间,不仅更好理解,也更准确。 -
Pragma:no-cache
这个含义与Cache-Control等同。 -
Server:Tengine/1.4.6
这个是服务器和相对应的版本,只是告诉客户端服务器的信息。 -
Transfer-Encoding:chunked
这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。 -
Vary: Accept-Encoding
告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。
Cookie 和 Session:
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。
为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。
-
Cookie:通过在 客户端 记录的信息确定用户的身份。
-
Session:通过在 服务器端 记录的信息确定用户的身份。
str类型和bytes类型
- str类型:字符串类型。
- bytes类型:二进制,互联网上数据都是以二进制的方式传输的,比如图片、音频文件、视频文件,它们都属于二进制文件。
str和bytes如何转化: