在浏览网站的过程中,我们经常遇到需要登录的情况,有些页面需要登录之后才可以访问,而且登录之后可以连续访问很多次网站,过段时间就需要重新登录。有些网站,打开浏览器就直接登录、而且很长时间都不会失效。
(1) 静态网页和动态网页
在开始之前,我们先来了解一下静态网页和动态网页的概念,这里举个例子:
<!DOCTYPE html><html><head><meta charset="utf-8"><title>文档标题</title></head><body><div id="container"><div class="wrapper"?<h2 class="title"> hello world</h2><p class="text">hello, this is a paragrapg.</p></di></div></body></html>
这种网页的内容是 HTML代码编写的,文字、图案等内容都是通过写好的HTML代码来指定,这种页面叫做静态页面。他加载速度快,编写简单,但是维护比较困难。
动态网页,可以动态的解析URL中参数的变化, 关联数据库并动态的显示不同的页面内容。灵活可变,现在大多数的网站都是动态网站,可能是 JSP、PHP、Python等语言编写的。
(2)无状态HTTP
HTTP的无状态指的是 HTTP 协议对事物处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态。 当我们向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录。
这就意味着后续需要处理前面的信息,必须重传,这导致需要额外传递一些前面的请求,十分的浪费资源。 这时候会话和Cookies 就出现了,会话在服务端,用来保存用户的会话信息;Cookies在客户端,也可以理解为浏览器,有了Cookies,浏览器在下次访问网页时会自动附带它发送给服务器,服务器通过识别Cooikes并鉴定出是哪个用户,然后再判断用户是否登录,然后返回对应的响应。
(a)会话 和Cookie
在Web中,会话对象用来存储特定用户会话所需的属性及配置信息。 这样当用户在应用程序的Web 页面之间跳转时,存储在会话对象的变量不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来之应用程序的Web 页时,如果用户还没有会话,Web服务器就会自动创建一个会时,浏览器会把Cookies 放在请求头一起提交给服务器,Cookies 携带了 会话ID信息,服务器检查该Cookies 即可找到对应的会话是什么,然后判断会话来以此辨认用户状态。
反之,如果传给服务器的Cookies是无效对的,那么就会收到错误的响应或者跳转到登录界面重新登录。
Cookies 结构:
| Name | Cookies的名称。一旦创建,该名称便不可更改 |
|---|---|
| Value | Cookies的值,如果值为Unicode字符,需要字符编码。如果值为二进制数据,则需要使用Base64编码 |
| Domain | 可以访问该Cookie的域名,如果设置为.zhihu.com,则所有以zhihu.com结尾的域名都可以访问该Cookie |
| Max Age | Cookie 失效的时间,单位为妙, 也常和 Expires 一起使用,通过它可以计算出有效时间。Max Age 如果为正数,在Cookie在Max Age 秒后失效。如果为负数,则关闭浏览器时Cookie即失效,浏览器不会以任何的形式保持Cookie。 |
| Path | Cookie的使用路径,如果设置为 /path/ ,则只有路径为 /path/的页面可以访问该Cookie |
| Size | Cookie的大小 |
| HTTP字段 | Cookie的httponly 属性,如此属性为true,则只有在 HTTP 头中会带有Cookie的信息,而不能通过 document.cookie来访问此Cookie |
| Ssecure | 该Cookie 是都被使用安全协议传输。安全协议有 HTTPS、SSL等,默认值为False |
(3) 代理的基本原理:
代理实际上指的就是代理服务器,相当于一个中转站, 在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,然后代理服务器在发送给Web 服务器,接着 代理服务器再把 Web 服务器返回的响应转发给本机。
代理分类:
根据协议区分:
FTP 代理服务器: 主要用于访问FTP服务器,一般有上传、下载以及缓存功能,端口一般为 21、2121等。
HTTP代理服务器:主要用于访问网页,一般有内容过滤和缓存功能,端口一般为80,8080等。
SSL/TLS代理:主要用于访问加密网站,一般有SSL或者TLS加密功能(最高支持128位加密强度)。
RTSP代理:主要用于访问 Real 流媒体服务,一般有缓存功能,端口一般为:554。
Telnet 代理:主要用于 Telnet 远程链接,端口一般为23。
POP3/SMTP代理:主要用于POP3/SMTP方式收发邮件,一般有缓存功能,端口一般为110/25。
SOCKS代理:只是单独的 传递数据包,一般有缓存功能,端口一般为1080。 socks 代理协议分为 socks4 和 socks5,前者只支持 TCP,而后者支持 TCP 和UDP。
根据匿名程度区分:
高度匿名代理:会将数据包原封不动的转发, 在服务端看来就行一个普通客户端访问,而记录的IP是代理服务器的IP。
普通匿名代理:会在数据包上做一些改动,服务端上有可能发现这是代理服务器,也有一定的几率追查到客户端的IP。代理服务器通常会加入HTTP头有 HTTP_VIA 和 HTTP_X_FORWARDED_FOR。
透明代理:不但改动了数据包,还会告诉服务器的真实IP。除了能提高浏览速度,能用内容过滤以外,并无其他作用,最常见的例子就是内网中的硬件防火墙。
间谍代理: 组织或者个人创建的用于记录用户传输的数据,然后进行研究、监控等目的的代理服务器。
