爬虫基础——HTTP概述
由于之前,我们系统的了解了Webmagic的源代码及其使用操作方法,但是仍然觉得没有掌握到精髓,所以我开始阅读《HTTP权威指南》一书,力求掌握透彻。第一章说的是HTTP,在计网中已经详细学过了,不过再来回顾下。Web客户端和服务器Http使用的是可靠的数据传输协议,Web服务器使用的就是HTTP协议,所以也被称为HTTP服务器。这些服务器存储了Web内容,通过HTTP客户端来请求,如下所示...
由于之前,我们系统的了解了Webmagic的源代码及其使用操作方法,但是仍然觉得没有掌握到精髓,所以我开始阅读《HTTP权威指南》一书,力求掌握透彻。
第一章说的是HTTP,在计网中已经详细学过了,不过再来回顾下。
Web客户端和服务器
Http使用的是可靠的数据传输协议,Web服务器使用的就是HTTP协议,所以也被称为HTTP服务器。这些服务器存储了Web内容,通过HTTP客户端来请求,如下所示:
所以,Web服务器是Web资源的宿主。Web资源是Web内容的源头,最简单的Web资源就是Web服务器文件系统中的静态文件,譬如文本文件、HTML文件、Word文档、JPEG图片、AVI文件等等。
但是不一定都是静态文件,还可以是根据需要生成内容的软件程序。这种动态资源内容往往根据你的身份、请求的信息、每天不容的时段来生成的。
- 媒体类型
由上面知道,有很多不同的数据类型。HTTP为每种通过Web传输的对象都打上了名为MIME type的数据格式标签。当浏览器从服务器获取一个对象的时候,会查看他的MIME类型。其实说这么多,具体例子出来会豁然开朗:
- HTML格式:text/html
- ASCII文本文档格式:text/plain
- JPEG图片:image/jpeg
- GIF格式图片:image/gif
- PPT文件:application/vnd.ms-powerpoint
当然,常见的MIME有数百个,这里不多做介绍。https://www.cnblogs.com/TBW-Superhero/p/5945469.html
- URI
当然资源都有他自己的URI(Uniform Resource Identifier),例子出来也很快明白,比如我上面放的那种图片的URI就是:https://img-blog.csdnimg.cn/20190222093006379.png
URI用于指导HTTP协议去访问资源。,URI有两种形式,分别称为URL和URN。
URL是统一资源定位符,是最常见的形式,几乎所有的URI都是URL。它描述了某个资源的位置,以及如何去访问它。比如上面的地址,https
使用HTTPS协议(URL第一部分被称为方案,说明了访问资源使用的协议类型),img-blog.csdnimg.cn
进入 img-blog.csdnimg.cn(第二部分给出服务器的因特网地址),20190222093006379.png
获取名为20190222093006379.png的资源(第三部分指定了Web服务器上的某个资源)。
URN统一资源名,它与资源位置无关。比如,无论因特网标准文档RFC2141位于何处,甚至可以是不止一处,都可以用下面的URN来命名它:urn:ietf:rfc:2141
。URN现在还是试验阶段,没有大规模使用。
事务
看看事务处理步骤:
一个HTTP事务由一条(客户端到服务器的)请求和一个(服务器到客户端的)响应组成。这种通信是通过HTTP报文的格式化数据块完成的:
其实我们检查网页格式就能看到(需要刷新),右边这个就是请求和返回的报文:
- HTTP方法
HTTP支持不同的请求命令,这些命令被称为HTTP方法。比如PUT/GET/DELETE/POST。
- 状态码
状态码是三位数字,常见的404(未找到URL请求的资源) 405(请求方法不被允许) 200(成功) 302(URL指向了多个资源)。
100-199的状态码是信息性的状态码,200到299的状态码表示成功,300到399之间的状态码表示资源重定向。400-499之间的状态码表示客户端请求出错。500-599之间的状态码表示服务器出错。
- Web页面可以包含多个对象。
也就是页面上的资源可能来自不同的服务器上。
- 报文
HTTP报文包括两类,请求报文和响应报文。且都包括以下三个部分:
- 起始行
用来说明要做什么或者说明出现了什么情况 - 首部字段
起始行后可以有0个或多个首部字段。每个字段都包含key-value,两者间用冒号分隔。 - 主体
主体中包括数据,比如二进制数据或者文本。起始行和首部字段都是结构化的,主体则是任意的。
Web的结构组件
在因特网上,要与很多Web应用程序进行交互,下面是一些很重要的应用程序:
- 代理
- 缓存
- 网关
- 隧道
- Agent代理
我们来一一介绍一下:
- 代理
下面就是一个代理,它位于客户端和服务器之间,用来转发请求。此外代理可以对请求和响应进行过滤,比如病毒检测、成人内容屏蔽等等。
详细说明一下,代理还有正向和反向之分。
正向代理
正向代理类似一个跳板机,代理访问外部资源。
举个例子:
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
正向代理的用途:
(1)访问原来无法访问的资源,如google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
初次接触方向代理的感觉是,客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的作用:
(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击。
(2)负载均衡,通过反向代理服务器来优化网站的负载。
在正向代理过程中隐藏了真实请求的客户端,即服务端不知道真实请求客户是谁。
在反向代理过程中,隐藏了内部服务器的信息,用户不需要知道是具体哪一台服务器提供的服务,只要知道反向代理服务器是谁就好了。
除了网友普遍使用的科学上网之外,在商用领域,代理服务器通常应用在两大应用场景之下:提高访问速度和隐藏真实IP,免受攻击。
其实代理服务器提高访问速度这一点,正是印证了把代理服务器比作是一个大的Cache。一般代理服务器会设置一个较大的硬盘缓冲区,当外界有信息访问时会同时将其保存到缓冲区中,当再有用户访问同样的信息时,可以直接从缓冲区中读取信息,传给用户,从而提高了访问速度。
从概念上和具体技术上VPN和代理服务器实际有哪些不同呢?
从概念上来说,代理服务器(Proxy Server)是一种代理网络用户去取得网络信息的存在,是一种网络信息中转站。而VPN全称为“Virtual Private Network”,即虚拟专用网络。VPN是一种虚拟出来的企业内部专线,通过在公用网络上建立专线网络,来进行加密通讯。所以VPN就是快递通过商家交到你手上,代理就是快递通过”商家-快递员-你“的一条链路。
- 缓存
Web缓存或者代理缓存是一种特殊的HTTP代理服务器,客户端从附近的缓存下载文档会比从远程服务器下载快得多。
使用缓存的2个主要原因:
降低延迟:缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更快,网站就显得更灵敏。
降低网络传输:副本被重复使用,大大降低了用户的带宽使用,其实也是一种变相的省钱(如果流量要付费的话),同时保证了带宽请求在一个低水平上,更容易维护了。
- 网关
大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。网关可以用于将HTTP流量转为其他协议,比如FTP协议。还可以进行HTTPS/HTTP的转换,它们接收安全的 HTTPS 流量,对安全流量进行解密,并向 Web 服务器发送普通的 HTTP 请求,这样能够作为安全加速器使用。
- 隧道
隧道是在两条连接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。
HTTP隧道的常见用途是通过HTTP连接承载加密的安全套接字层(SSL)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了。如下图,HTTP/SSL隧道收到一条HTTP请求,要求建立一条到目的地址和端口的输出连接,然后在HTTP信道上通过隧道传输加密的SSL流量,这样就可以将其盲转发到目的服务器上去了。
- agent代理
agent代理是代表用户发起HTTP请求的客户端程序,比如Web浏览器。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)