静态网页和动态网页
在浏览网页的过程中,我们经常会遇到需要登录的情况。有些页面只有登录后才能访问,登录后可以连续多次访问该网站,但有时过一会儿又需要重新登录。还有一些网站是你打开浏览器就自动登录的,而且很久都不会过期。这是为什么呢?其实有一些设计对话和cookies的知识。

我们先来了解一下静态网页和动态网页的概念,同样使用前面的示例代码,内容如下:
示例代码这是最基本的HTML代码。我们将其保存为。html文件,然后放在有固定公网IP的主机上。主机配有Apache或者Nginx之类的服务器,这样这台主机就可以作为服务器使用,其他在武汉的日日夜夜都可以通过访问服务器看到这个页面。这是最简单的网站。
这类网页的内容是用HTML代码编写的,文字、图片等内容由编写的HTML代码指定。这种网页称为静态网页。加载速度快,编写简单,但是有很多缺陷,比如可维护性差,不能根据URL灵活显示内容。比如我们想给这个网页的URL传入一个name参数,让它显示在网页中,这个是做不到的。
于是,动态网页应运而生,可以动态分析URL参数的变化,关联数据库,动态呈现不同的页面内容,非常灵活多变。我们现在遇到的大部分网站都是动态网站。它们不再是简单的HTML,可能是用JSP、PHP、Python等语言编写的。它们的功能比静态网页强大和丰富得多。

此外,动态网站还可以实现用户登录和注册功能。回到开头提到的问题,很多页面只有登录后才能查看。按照一般的逻辑,输入用户名和密码登录后,我们一定是拿到了一张代金券之类的东西。有了它,我们可以保持登录状态,访问只有登录后才能看到的页面。
那么这个神秘的证书到底是什么呢?其实是谈话和饼干的结果。
无状态HTTP

在了解会话和cookies之前,我们还需要了解HTTP的一个特性,叫做无状态。
HTTP无状态是指HTTP协议没有内存能力处理事情,也就是说服务器不知道客户端是什么状态。当我们向服务器发送请求时,服务器解析请求,然后返回相应的响应。服务器负责完成这个过程,这个过程是完全独立的。服务器不会记录前后状态的变化,也就是缺少状态记录。这意味着如果后面需要处理前面的信息,就必须重新传输,这就导致需要传递一些前面的重复请求,才能获得后面的响应。但是,这种效果显然不是我们想要的。为了保持前后的状态,我们肯定不能把之前的请求都重发一次,这样很浪费资源,对于需要用户登录的页面就更棘手了。
这时,出现了两种维护HTTP连接状态的技术,它们是session和cookies。会话服务器,即网站的服务器,用于保存用户的会话信息;cookies在客户端,也可以理解为浏览器端。有了cookies,浏览器下次访问网页时会自动将它们附加到服务器上。服务器会通过识别cookies来识别是哪个用户,然后判断用户是否登录,然后返回相应的响应。
我们可以理解cookies持有登录凭证。有了它们,我们只需要在下一个请求中发送带有cookies的请求,而无需重新输入用户名、密码等信息再次登录。
所以在爬虫中,有时候在处理需要登录才能访问的页面时,我们通常会直接将成功登录后获得的cookies放入请求头中直接请求,而不是再次模拟登录。


