HTTP协议理解——爬虫第一步

0.为什么要学习HTTP?

因为爬虫需要模拟浏览器进行HTTP请求。理解HTTP是书写爬虫的基础。

1.什么是HTTP协议?

HTTP(Hypertext Transfer Protocol):超文本传输协议。是一个应用层协议,对于分布式的、合作式、超媒体信息系统。HTTP是WWW的数据交互的基础,超文本文档包括超链接链接到其他资源用户可以很容易获取,举个例子,通过鼠标点击,或者触及屏幕在浏览器上。HTTP发展用来促进超文本和WWW。

2.技术概括

HTTP以请求——返回协议在一种客户端——服务器的计算模型中。在网络浏览器中,用户发送HTTP请求信息给服务器。服务器提供资源例如HTML或者其他内容,或者在客户端执行一定的行为。响应包含完成状态信息也可能包含request的内容在消息体中。

浏览器是个用户代理的例子。其他类型的用户代理包括。

HTTP被设计位一个网络元素的媒介去改善和提供用户和服务器之间的交互。

HTTP/1.1 是1.0的修正版本。在HTTP 1.0对于同一台服务器使用各自的资源请求。
在1.1中,可以实现一次链接的多路复用去下载各种东西。因此1.1的延迟更小因为TCP带来个相当大的开销。

3.HTTP会话

3.1 持续链接

一个HTTP会话是一连串的请求——响应事务。请求通过创建一个TCP链接(80号端口,也有8080)一个HTTP服务器监听等待客户请求。在收到请求后,服务器告诉自己的状态 就像HTTP/1.1 200 OK一个自己的消息。这个信息的主体是一个典型的请求资源,也能返回其他信息。
在HTTP /0.9 和1.0中,链接在请求/响应后就关闭。在1.1中,使用了保持链接的机制,因此一次链接能被多次请求复用。持续的链接明显减少了延迟。另一个好的影响就是,大体上,因为TCP的慢开始机制。

HTTP 会话状态

HTTP是一个无状态协议。一个无状态协议不需要HTTP服务器去保留用户的信息或者状态关于每次用户各自的多种请求。然而,一些网络应用实现状态或者服务器方的会话例如HTTP的cookies或者网络表格里面隐藏的变量。

HTTP授权

HTTP提供了多样化的授权方法就像basic access authentication和digest access authentication 通过一种挑战——服务器在提供请求的内容之前识别并发出挑战。

HTTP提供一个通用的框架可以使用控制和授权,通过一种扩展的挑战——响应授权方法,它可以被服务器使用去挑战一个用户的请求,然后通过客户端提供验证的信息。

授权域

The HTTP Authentication specification also provides an arbitrary, implementation-specific construct for further dividing resources common to a given root URI.域的字符串值,如果呈现,与规范的根URI相结合,形成保护空间组件的挑战。

request 信息

包含以下:

  • 一个请求行
  • 一个请求头:头字段不区分大小写
  • 一个空行
  • 一个可选的消息体
    注:
    carriage return 回车
    line feed 换行

request方法

方法是区分大小写的:
GET
get方法请求指定资源的表现形式。requests只用get来data retrieval,而不用它去产生其他影响(对于其他的方法也是一样)
注意:
数据检索。意味着在一个数据库管理系统例如ODBMS中获取数据,在这种情况下,可以想到数据都是结构化的,而且没有模糊的数据。
万维网路联盟(World Wide Web Consortium,简称W3C)

HEAD
HEADFangfa请求一个与GET请求相同的响应,但不要响应主题。主要用来检索响应头的数据,不需要传送整个内容。

POST
post 方法请求服务器接收一个实体封闭在请求中作为一个新的从属性对于通过URI定义的资源。data的posted可能是这样,举个例子,对于存在的资源的注解;公告栏、新闻组、邮件列表或评论线程的消息;将web表单提交给数据处理过程后产生的数据块;或要添加到数据库中的项。

PUT
put方法请求一个闭包实体URI供应的。如果URI指向了一个存在的资源,这会修改。如果URI没有指向一个存在的资源,那么服务器会创建。
加粗样式
DELETE
删除指定的资源。

TRACE
TRACE方法回应接受到请求,所以一个客户端能够看到中介的服务器之间发生了什么。

OPTIONS
OPTIONS方法返回服务器在指定的URL上支持的方法,这个方法主要用来检测服务器的功能,而不是去找一个指定的资源。

PATCH
PATCH方法用于资源的部分修改。

安全方法/不安全方法
一些方法(就像GET、HEAD、OPTIONS和TRACE)通过大会管理,定义为安全,这意味着他们只用来对数据检索,而不能修改服务器的状态。

相反地就像(post、put、delete、patch)用来做出一些行为可能会对服务器造成副作用。
因此这种东西并不经常被爬虫使用。
但这也不是绝对的。如果编程人员不小心、留下一些漏洞,它也可能是不安全的。

Idempotent methods and web applications

A request method is considered “idempotent” if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request. Of the request methods defined by this specification, PUT , DELETE , and safe request methods are idempotent.
一个请求被认为是幂等的,如果当他想要在服务器发生的效果/一个请求和多个请求是一样的。在规范定义的请求方法中,PUT,DELETE和安全请求方法都是幂等的。

相反地、post方法不必须是幂等的、因此发送一个post请求多次可能会造成对于状态的影响,然后造成更多的副作用。
虽然web浏览器可能会在某些情况下显示警告对话框来警告用户重新加载页面可能重新提交POST请求,但通常由web应用程序处理POST请求不应该提交超过一次的情况。在此规范定义的请求方法中,PUT、DELETE和safe请求方法是幂等的。

安全性
In web security, cross-site tracing (abbreviated “XST”) is a network security vulnerability exploiting the HTTP TRACE method.

注:
Request for Comments:
In information and communications technology, a Request for Comments (RFC) is a type of publication from the technology community.
简单总结
HTTP协议理解——爬虫第一步
响应消息
响应消息会包含以下的内容:

  • 一个状态:包含了状态码和原因。
  • 一个响应头部
  • 空行
  • 一个可选的消息体。

状态码
类型:

  • 消息的 1XX
  • 成功 2XX
  • 重定向 3XX
  • 客户端错误 4XX
  • 服务器错误 5XX

信息状态类:
100 继续
已经收到了requests 头没有收到内容。
101 转换协议
请求服务器更换协议,而且服务器同意了
102 进行中
对于一些文件操作请求需要等待较长的时长。
103 早期提示
用于在最终HTTP消息之前返回一些响应头
加密链接

重定向类型
300:多种选择。例如对于一些资源有不同的后缀可以供客户端选择。
301:永久搬走
需要转换到给出的URL。
302:找到
等等。

一种流行加密的方法就是使用HTTPS

会话的例子
下面是一个HTTP的会话例子在xxx网站,80端口,都发送以ascii码的形式。

请求

GET /index.html HTTP/1.1
Host: www.example.com

回应

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close

注意:
ETag(实体标记)头字段用于确定请求资源的缓存版本是否与服务器上资源的当前版本相同。