python爬虫学习笔记1-HTTP和HTTPS协议
- HTTP协议
- 协议
- HTTP协议(HyperText Transfer Protocol,超文本传输协议)
- HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)
- SSL(Secure Sockets Layer 安全套接层)
- Http请求与响应
- Http请求与响应应用场景
- 应用场景解析
- 请求方法
- HTTP请求的GET和POST方法
- 请求报文和响应报文
- 客户端的Http请求
- 一个典型的HTTP请求示例
- 常用的请求报头
- Host(主机和端口号)
- Connection(连接类型)
- 应用场景解析
- Upgrade-Insecure-Requests(升级为HTTPS请求)
- User-Agent(用户代理)
- Accept(传输文件类型)
- Refer(页面跳转处)
- Accept-Encoding(文件编解码类型)
- Accept-Language(语言类型)
- Accept-Charset(字符编码)
- Cookie(储存在用户本地终端上的数据)
- Content-Type(POST数据类型)
- 服务器的HTTP响应
- 一个典型的HTTP响应示例
- 常用的响应报头
- Cache-Control:must-revalidate,no-cache,private(缓存控制)
- Connection:keep-alive(连接类型)
- Content-Encoding:gzip(资源编码类型)
- Content-Type:text/html;charset=UTF-8(资源文件的类型和字符编码)
- Date:Thu,02 Jan 2020 06:32:55 GMT(服务器时间)
- 采用GMT原因
- 响应状态码
- 状态码取值
- 100~199
- 200~299
- 300~399
- 400~499
- 500~599
- 常用状态码
- 抓包工具
- 参考
- 常用的参数详解
- Elements(元素面板)
- Console(控制台面板)
- Sources(源代码面板)
- Network(网络面板)
HTTP协议
协议
通讯规则【计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则】
HTTP协议(HyperText Transfer Protocol,超文本传输协议)
一种发布和接收HTML页面的方法
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)
简单来说就是HTTP的安全版,HTTP下加入SSL层
SSL(Secure Sockets Layer 安全套接层)
主要用于web的安全传输协议,在传输层对网络连接进行加密
HTTP的端口是80
HTTPS的端口是443
Http请求与响应
HTTP通信由两部分组成:客户端请求消息与服务器响应消息,Request【请求】 Response【响应】。
URL:统一资源定位符,用于完整地描述Internet上网页和其他
资源的地址的一种标识方法。比如http://www.baidu.com,相当于指针,即对应html文件的地址。【html文件存储在服务器中】
基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
- scheme:协议(例如:http, https, ftp)
- host:服务器的IP地址或者域名
- port#:服务器的端口(如果是协议默认端口,缺省端口80)
- path:访问资源的路径
- query-string:参数,发送给http服务器的数据
- anchor:锚(跳转到网页的指定锚点位置)
- 注意 : 在浏览器请求一l,浏览器会对这个url进行一个编码。(除英文字母、数字和部分标识其他的全部使用% + 十六进制码进行编码)
Http请求与响应应用场景
当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器向HTTP服务器发送HTTP请求。
应用场景解析
- 一个请求响应过程
浏览器发送Request请求【客户端->服务器】,其实就是获取服务器中对应的html文件,获取成功就会返回【服务器->客户端】一个Response文件对象. - 分析Response中的HTML及多次request请求下载文件
浏览器分析response中的HTML,发现其中引用了很多其他的文件,比如images文件,css文件,js文件。浏览器会自动再次发送request请求去获取其他文件。 - 显示网页
当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来。
请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP 0.9:只有基本的文本GET功能。
HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET, POST和HEAD。
HTTP 1.1:在 1.0 基础上进行更新,新增了五种请求方法:OPTIONS, PUT,DELETE,TRACE和CONNECT方法
HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为 :method、:scheme、:host、:path这些键值对。
HTTP请求的GET和POST方法
主要使用的HTTP请求是GET和POST方法,这两种方法的区别如下列所示。
- 数据的操作
- GET: 从服务器获取数据
- POST: 向服务器发送数据
- 请求参数的显示
- GET:请求参数都会在URL上显示出来,HTTP服务器根据该请求所包含URL中的参数来响应内容。
- POST:请求参数和需要提交的数据是隐藏在Form表单里,不会在URL地址上显示的。
请求报文和响应报文
客户端和服务器之间的通讯就是根据HTTP协议发送指定的报文,客户端发送的是请求报文,服务器接收到请求报文后发送的是响应报文。
下面分别对这两种报文的格式及常用报头进行解释。
客户端的Http请求
URL的作用:标识资源的位置
HTTP的作用:提交和获取资源
客户端发送Http请求就是向服务器发送一个请求消息。
一个请求消息【Request】包括以下格式:请求行、请求头部、空行、请求数据
下图给出了请求报文的一般格式。
一个典型的HTTP请求示例
常用的请求报头
Host(主机和端口号)
对应网址URL中的Web名称和端口号,通常属于URL中的一部分。用于指定被请求资源的Internet主机和端口号。
Connection(连接类型)
客户端与服务器连接类型
应用场景解析
- Client发起一个请求【包含Connection:keep-alive】,HTTP/1.1中Connection的默认值为keep-alive。
- Server收到请求
- if Server支持keep-alive
- 回复响应【包含Connection:keep-alive】
- 不关闭连接
- else if Server不支持keep-alive
- 回复响应【包含Connection:close】
- 关闭连接
- Client收到响应【包含Connection:keep-alive】
- 发送下一个请求【向同一个连接】
- if 有一方主动关闭连接,退出不再发送
Upgrade-Insecure-Requests(升级为HTTPS请求)
User-Agent(用户代理)
作用:记录用户的浏览器、操作系统等。
Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Accept(传输文件类型)
Accept:指浏览器或其他客户端可以接受的MIME(Multipurpose InternetMail Extensions(多用途互联网邮件扩展))文件类型,服务器可以根据它判断并返回适当的文件格式。
- Accept:
*/*
:表示什么都可以接收。 - Accept:
image/gif
:表明客户端希望接受GIF图像格式的资源。 - Accept:
text/html
:表明客户端希望接受html文本。 - Accept:
text/html, application/xhtml+xml;q=0.9, image/*;q=0.8
:表示浏览器支持的MIME类型分别是html文本、xhtml和
xml文档、所有的图像格式资源。
Refer(页面跳转处)
表面当前这个请求是从哪个url过来的,一般情况下可以做反爬。
Accept-Encoding(文件编解码类型)
浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。
浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。
Accept-Language(语言类型)
浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。
Accept-Charset(字符编码)
浏览器可以接受的字符编码。
Cookie(储存在用户本地终端上的数据)
Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息。
Content-Type(POST数据类型)
POST请求里用来表示的内容类型。
服务器的HTTP响应
HTTP响应也由4个部分组成,分别是:状态行、消息报头、空行、响应正文
一个典型的HTTP响应示例
常用的响应报头
Cache-Control:must-revalidate,no-cache,private(缓存控制)
服务器对客户端的要求是:服务器不希望客户端缓存资源,在下次请求资源时必须重新请求服务器,而不是从缓存副本中获取资源。
Connection:keep-alive(连接类型)
服务器对客户端的回应,keep-alive这个值告诉客户端可以继续使用这个连接发送http请求
Content-Encoding:gzip(资源编码类型)
服务器发送的资源是以gzip编码的,客户端需要采用gzip对资源进行解码
Content-Type:text/html;charset=UTF-8(资源文件的类型和字符编码)
客户端需要采用UTF-8对资源解码,然后进行html解析,如果看到网站是乱码的说明服务器端返回的是错误的编码。
Date:Thu,02 Jan 2020 06:32:55 GMT(服务器时间)
服务器发送资源时的服务器时间,GMT:格林尼治所在地的标准时间。
采用GMT原因
解决不同时区的时间混乱问题。
响应状态码
响应状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
状态码取值
100~199
表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
200~299
表示服务器成功接收请求并已完成整个处理过程。
300~399
为完成请求,客户需进一步细化请求。
400~499
客户端的请求有错误。
500~599
服务器端出现错误。
常用状态码
- 200(OK请求成功)
- 302(所请求的页面已经临时转移至新的url)
- 307和304(使用缓存资源)
- 404(服务器无法找到被请求的页面)
- 403(服务器拒绝访问,权限不够)
- 500(请求未完成。服务器遇到不可预知的情况)
抓包工具
最好用的抓包工具就是chrome浏览器【其余浏览器比如火狐、Edge也可以用】,chrome浏览器->右键检查->Network。
参考
Google Chrome抓包分析详解
常用的参数详解
Elements(元素面板)
使用“元素”面板可以通过自由操纵DOM和CSS来重演您网站的布局和设计。
Console(控制台面板)
在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为 shell,在页面上与JavaScript交互
Sources(源代码面板)
在源代码面板中设置断点来调试 JavaScript ,或者通过Workspaces(工作区)连接本地文件来使用开发者工具的实时编辑器
Network(网络面板)
从发起网页页面请求Request后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),并可以根据这个进行网络性能优化