http协议与https协议
HTTP协议(全称为HyperText Transfer Protocol,超文本传输协议),是发布和接收HTML页面的方法,其服务端口号为80。
HTTPS协议为HTTP协议的加密版本,其在HTTP下加入了SSL层,服务端口号为443。
URL结构解析
URL(Uniform Resource Locator,统一资源定位符),用于从互联网上获取某个资源,其组成格式如下:scheme://host:port/path/?query-string=xxx#anchor
scheme:代表访问协议类型,如http、https和ftp等。
host:域名,比如 “cn.bing.com”。
port:端口号,访问一个网站时浏览器默认使用80端口。
path:查找路径,比如 “https://www.imooc.com/course/list”,后面的course/list就是path。
query-string:查询字符串,比如 “https://cn.bing.com/search?q=python”,后面的q=python就是查询字符串。
anchor:锚点,用于页面定位。
浏览器请求一个url,浏览器会对url进行编码——除英文字母,数字和部分符号外,其他的全部使用百分号与十六进制码值进行编码。如在Chrome中地址栏输入“https://cn.bing.com/search?q=博客园”,则会自动解析为“https://cn.bing.com/search?q=%E5%8D%9A%E5%AE%A2%E5%9B%AD”
http请求发送过程
首先,用户在浏览器地址栏中输入URL并回车后浏览器会向HTTP服务器发送一个Request请求,服务器接收到请求后会返回一个Response文件对象给浏览器。此后浏览器分析Response中的HTML,同时发现其中所引用的其他文件(如Image、Js、CSS等),浏览器再次向服务器发送这些文件的request请求以下载文件。当所有文件成功下载完毕后,浏览器便可以将网页完整地构造显示出来。
如下为访问微软Bing主页的请求:
请求方法
在HTTP协议中,定义了八种请求方法(参见下表)
方法 | 描述 |
GET | 请求页面,并返回页面内容 |
HEAD | 类似于GET请求,只不过返回的响应zho那个没有具体的内容,用于获取报头 |
POST | 大多用于提交表单或上传文件,数据包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 把服务器当作跳板,让服务器代替客户端访问其他网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
其中,GET与POST请求较为常用。一般情况下,GET仅用于获取数据,POST用于上传数据,但有时为应对反爬机制,需要用POST请求代替GET请求。
常用请求头参数
在HTTP协议中,请求头用来说明要传递给服务器使用的附加信息,如下为访问拉勾网的请求头。
其中较为重要的参数有User-Agent、Referer 和 Cookie。
User-Agent:一个特殊字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在爬虫中可以设置此信息来伪装浏览器以反-反爬虫。
Referer:用于标识请求是从哪个页面来的。这个一般也可以用来做反爬虫技术——只有从指定页面请求才给予响应。
Cookie:HTTP协议无状态的,即服务器在两次连续的请求中不会保存是哪个用户发送的请求,而为了维持前后会话完整性,可以在发送请求时通过附加存储在用户本地的Cookie来让服务器识别出用户并查出当前状态。
响应
响应,由服务器返回给客户端,其中包括三部分内容——响应状态码、响应头和响应体。
1.响应状态码
用于表示服务器的相应状态,常用状态码有200(成功,服务器正常返回数据)、 301(永久重定向) 、302(临时重定向)、400(请求错误,服务器无法解析该请求)、403(禁止访问,服务器拒绝此请求)、404(未找到,服务器找不到请求的页面)、500(服务器内部错误)。
2.响应头
包含一些服务器对请求的应答信息,如Content-Type(应答的文档类型,如text/html返回HTML文档、image/jpeg返回图片)、Server(服务器信息,如名称、版本号等)、Set-Cookie(设置Cookies)、Expires(指定响应的过期时间)等。
如拉勾网响应头信息:
3.响应体
表示响应的正文数据,如网页的HTML代码、图片的二进制数据等。爬虫请求网页后要解析的内容就是响应体内容。