在浏览网站的过程中,我们经常遇到需要登录的情况,有些页面需要登录之后才可以访问,而且登录之后可以连续访问很多次网站,过段时间就需要重新登录。有些网站,打开浏览器就直接登录、而且很长时间都不会失效。

(1) 静态网页和动态网页

在开始之前,我们先来了解一下静态网页和动态网页的概念,这里举个例子:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>文档标题</title>
  6. </head>
  7. <body>
  8. <div id="container">
  9. <div class="wrapper"?
  10. <h2 class="title"> hello world</h2>
  11. <p class="text">hello, this is a paragrapg.</p>
  12. </di>
  13. </div>
  14. </body>
  15. </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。除了能提高浏览速度,能用内容过滤以外,并无其他作用,最常见的例子就是内网中的硬件防火墙。
间谍代理: 组织或者个人创建的用于记录用户传输的数据,然后进行研究、监控等目的的代理服务器。