Linux企业级项目实践之网络爬虫(30)——通过查阅RFC文档扩充更加复杂的功能
HTTP是一种很简单的请求、响应式协议,客户端发送一个请求、服务器返回一个响应。HTTP 1.1 版本规范由 RFC2616 定义。了解了 HTTP请求、响应消息在TCP数据流中的格式,很容易使用纯 socket 模拟HTTP客户端、HTTP服务器发送接收数据。
RFC文档全是ASCII码,txt格式,但有其标准格式,用户可通过官方网站查阅(http://www.rfc-editor.org/),也可下载txt版本并使用阅读器(RFCReader、UE或写字板都可以,记事本打开时格式不规范,有网友还把很多RFC作了翻译,
RFC是一系列以编号排定的文件。文件收集了有关因特网相关资讯,以及UNIX和因特网社群的软件文件。目前RFC文件是由Internet Society(ISOC)所赞助发行。
基本的因特网通讯协定都有在RFC文件内详细说明。RFC文件还在标准内额外加入了许多的论题,例如对于因特网新开发的协定及发展中所有的记录。因此几乎所有的因特网标准都收录在RFC文件之中。
RFC是Request for Comments的缩写,是计算机网络工程领域最常用的一个词,是由IETF(Internet Engineering Task Force,因特网工程任务组)发表的用于描述Internet或Internet连接系统方面的相关方法、行为、研究成果或其它创新成果的一种备忘录。工程师和计算机科学家们可通过Internet Society以RFC的形式发表自己的看法,作为同行评审或者只是为了传达新概念、信息或(偶尔)工程幽默。IETF会接受一些以RFC形式发表的建议作为Internet标准。最初起源于1969年(1969年4月7日,UCLA的Steve Crocker公开发表了RFC 1),现已成为IETF和IAB(Internet Architecture Board)及其它一些主要的公共网络研究社区的正式出版物发行途径,Jon Postel一直是RFC文档的编辑,而Bob Braden和Joyce Reynolds是主要领导和工作人员。目前为止,RFC文档已发布了6520篇,由于它不删除旧的文档,如果新发布的文档与旧文档是关于同一技术时,则会标注清楚由新的文档取代旧文档。可以说,在计算机网络特别是Internet领域,RFC文档具有相当的参考价值。
RFC文件只有新增,不会有取消或中途停止发行的情形。但是对于同一主题而言,新的RFC文件可以声明取代旧的RFC文件。RFC文件是纯 ASCII文字档格式,可由电脑程序自动转档成其他档案格式。RFC文件有封面、目录及页首页尾和页码。RFC的章节是数字标示,但数字的小数点后不补零,例如4.9的顺序就在4.10前面,但9的前面并不补零。RFC1000这份文件就是RFC的指南。
如何阅读RFC文档
一是需要确定它是最新的文档,二是需要注意RFC文档的类别;
所有的RFC文档都要经历评论和反馈过程,并且在这一段时间内它们会被划分为不同的类别;
RFC文档一旦被提交,IETF和IAB组织将审查RFC文档,通过后可以成为一项标准;
RFC文档按照它发展与成熟的过程可以分为标准、草案标准、提案标准、实验性的、信息性或历史性的;
RFC文档又可以分为被要求、被推荐、被选择、受限制使用或不被推荐;
HTTP协议(RFC2616)目录(Table ofContents)
1. 介绍(Introduction) 6
1.1 目的(Purpose) 6
1.2 术语(Terminology) 6
1.3 概述(OverallOperation) 8
1.4 HTTP and MIME 9
2. 标志转换及通用语法(NotationalConventions and Generic Grammar) 9
2.1 补充反馈方式(AugmentedBNF) 9
2.2 基本规则(BasicRules) 10
3. 协议参数(ProtocolParameters) 12
3.1 HTTP版本(HTTP Version) 12
3.2 统一资源标识(UniformResource Identifiers) 13
3.2.1 一般语法(General Syntax) 13
3.2.2 http URL 14
3.3 Date/Time 格式(Date/Time Formats) 15
3.4 字符集(CharacterSets) 16
3.5 内容译码(ContentCodings) 16
3.6 介质类型(MediaTypes) 17
3.6.1标准及文本缺省(Canonicalizationand Text Defaults) 18
3.6.2 多部分类型(Multipart Types) 18
3.7 产品标识(ProductTokens) 19
4. HTTP 消息(HTTP Message) 19
4.1 消息类型(MessageTypes) 19
4.2 消息标题(MessageHeaders) 20
4.3 普通标题域(GeneralHeader Fields) 20
5. 请求(Request) 21
5.1 请求队列(Request-Line) 21
5.1.1 方法(Method) 22
5.1.2 请求URI(Request-URI) 22
5.2 请求标题域(RequestHeader Fields) 23
6. 回应(Response) 23
6.1 状态行(Status-Line) 24
6.1.1 状态代码和原因分析(Status Codeand Reason Phrase) 24
6.2 回应标题域(ResponseHeader Fields) 25
7. 实体(Entity) 26
7.1 实体标题域(EntityHeader Fields) 26
7.2 实体主体(EntityBody) 26
7.2.1 类型(Type) 27
7.2.2 长度(Length) 27
8. 方法定义(MethodDefinitions) 27
8.1 GET 28
8.2 HEAD 28
8.3 POST 28
9. 状态代码定义(StatusCode Definitions) 29
9.1 消息1xx(Informational1xx) 29
9.2 成功2xx(Successful2xx) 29
9.3 重定向(Redirection3xx) 30
9.4 客户端错误(ClientError )4xx 31
9.5 服务器错误(ServerError )5xx 32
10. 标题域定义(HeaderField Definitions) 33
10.1 允许(Allow) 33
10.2 授权(Authorization) 34
10.3 内容编码(Content-Encoding) 34
10.4 内容长度(Content-Length) 34
10.5 内容类型(Content-Type) 35
10.6 日期(Date) 35
10.7 过期(Expires) 36
10.8 来自(From) 37
10.9 从何时更改(If-Modified-Since) 37
10.10 最近更改(Last-Modified) 38
10.11 位置(Location) 38
10.12 注解(Pragma) 39
10.13 提交方(Referer) 39
10.14 服务器(Server) 40
10.15 用户代理(User-Agent) 40
10.16 WWW-授权(WWW-Authenticate) 40
11. 访问鉴别(AccessAuthentication) 41
11.1 基本授权方案(Basic Authentication Scheme) 42
12. 安全考虑(SecurityConsiderations) 43
12.1 客户授权(Authentication of Clients) 43
12.2 安全方法(Safe Methods) 43
12.3 服务器日志信息的弊端(Abuse of Server Log Information) 43
12.4 敏感信息传输(Transfer of Sensitive Information) 44
12.5 基于文件及路径名的攻击(Attacks Based On File and Path Names) 44
13. 感谢(Acknowledgments) 45
14. 参考书目(References) 45
15. 作者地址(Authors'Addresses) 47
附录(Appendices) 48
A. Internet介质类型消息/http(Internet Media Type message/http) 48
B. 容错应用(TolerantApplications) 48
C. 与MIME的关系(Relationshipto MIME) 49
C.1 转换为规范形式(Conversionto Canonical Form) 49
C.2 日期格式转换(Conversionof Date Formats) 49
C.3 内容编码介绍(Introductionof Content-Encoding) 50
C.4 无内容传输编码(NoContent-Transfer-Encoding) 50
C.5 多个主体的HTTP标题域(HTTPHeader Fields in Multipart Body-Parts)
50
D. 附加特性(AdditionalFeatures) 50
D.1 附加请求方法(AdditionalRequest Methods) 51
D.2 附加标题域定义(AdditionalHeader Field Definitions) 51
Linux企业级项目实践之网络爬虫(30)——通过查阅RFC文档扩充更加复杂的功能的更多相关文章
- Linux企业级项目实践之网络爬虫(1)——项目概述及准备工作
我们在学习了Linux系统编程之后,需要一些实战项目来提高自己的水平,本系列我们通过编写一个爬虫程序,将我们学习的知识进行综合应用,同时在实现项目的过程中逐渐养成一些有用的思维方式,并具有初步的软件开 ...
- Linux企业级项目实践之网络爬虫(29)——遵守robots.txt
Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以 ...
- Linux企业级项目实践之网络爬虫(21)——扩展为多任务爬虫
高效的网络爬虫是搜索引擎的重要基础.采用多任务并发执行,实现类似于CPU的流水线(pipeline)运行方式,可极大地提高网络和计算资源的利用率等性能. #include "threads. ...
- Linux企业级项目实践之网络爬虫(2)——网络爬虫的结构与工作流程
网络爬虫是捜索引擎抓取系统的重要组成部分.爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份. 一个通用的网络爬虫的框架如图所示:
- Linux企业级项目实践之网络爬虫(23)——系统测试:找出系统中的bug
为了验证爬虫的业务流程.性能和健壮性需要进行测试. 软件测试是描述一种用来促进鉴定软件的正确性.完整性.安全性和质量的过程.软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件 ...
- Linux企业级项目实践之网络爬虫(28)——爬虫socket处理
Socket是进程之间交换数据的机制.这些进程即可以是同一台机器上的,也可以是通过网络连接起来的不同机器.一旦一个Socket连接建立,那么数据就能够双向传输,直到其中一端关闭连接. 通常,请求数据的 ...
- Linux企业级项目实践之网络爬虫(19)——epoll接口
由于要实现爬虫程序的快速抓取,显然如果采用阻塞型的I/O方式,那么系统可能很长时间都处在等待内核响应的状态中,这样爬虫程序将大大地降低效率.然而,如果采用非阻塞I/O,那么就要一直调用应用进程,反复对 ...
- Linux企业级项目实践之网络爬虫(6)——将程序设计成为守护进程
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程.为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统. ...
- Linux企业级项目实践之网络爬虫(3)——设计自己的网络爬虫
网络抓取系统分为核心和扩展组件两部分.核心部分是一个精简的.模块化的爬虫实现,而扩展部分则包括一些便利的.实用性的功能.目标是尽量的模块化,并体现爬虫的功能特点.这部分提供简单.灵活的API,在基本不 ...
随机推荐
- atitit.提升研发效率的利器---重型框架与类库的差别与设计原则
atitit.提升研发效率的利器---重型框架与类库的差别与设计原则 1. 框架的意义---设计的复用 1 1.1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 2.1 ...
- TinyXml高速入门(一)
作者:朱金灿 来源:http://blog.csdn.net/clever101 对于xml文件,眼下我的工作仅仅是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这样的重量级的x ...
- lamp安装指南(转)
主要软件包, 1. httpd-2.2.6.tar.gz 2. mysql-5.0.45-linux-i686-glibc23.tar.gz ( 这个版本是已编译好的压缩包,解压后稍做配置即可使用 ) ...
- shell 脚本实现的守护进程
转自:http://blog.csdn.net/cybertan/article/details/3235722 转自:http://blog.sina.com.cn/s/blog_4c451e0e0 ...
- Java基础知识强化83:System类之gc()方法(垃圾回收)以及和finalize()区别
1. System概述: System类包含一些有用的类字段和方法.它不能被实例化. 2. gc()方法:垃圾回收器 public static void gc() 调用gc方法暗示着Ja ...
- NS2仿真:公交车移动周期模型及性能分析
NS2仿真实验报告3 实验名称:公交车移动周期模型及性能分析 实验日期:2015年3月16日~2015年3月21日 实验报告日期:2015年3月22日 一.实验环境(网络平台,操作系统,网络拓扑图) ...
- 用timer控件实现sleep效果
有时候我们需要代码延迟执行,这就需要用到Thread.Sleep()这个方法,但这个方法在主线程使用时会造成界面假死.使用timer控件既能达到代码延迟执行的效果,又不会有假死的困扰. 假设我们需要在 ...
- javascript基础之javascript的存在形式和js代码块在页面中的存放位置
1.存在形式 文件 如: <script src='js/jc.js'></script> 前页面 <script type='text/javascript'>a ...
- js 获取元素在页面上的偏移量的最佳方式
使用js制作效果时,我们常常要获取某个元素在页面上的偏移量(例如tip提示框功能).而获取偏移量可以直接获取相对于document的偏移量,也可以获取相对与视口的偏移量(viewpoint)加上页面滚 ...
- IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
在WIN7 X64平台IIS7.5,使用Asp.net连接access数据库时候,提示:未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序. 说明: 执行当前 Web 请求 ...