目录
一、HTTP的请求与响应
二、浏览器发送HTTP请求的过程
三、HTTP请求方法
四、查看网页请求
五、常用的请求报头
六、服务端HTTP响应
七、常用的响应报头
八、Cookie 和 Session
九、响应状态码
十、网页的两种加载方法
十一、认识网页源码的构成
十二、爬虫协议
在如今这个数据驱动的时代,网络爬虫在数据采集、信息抓取和处理等方面发挥着越来越重要的作用。为了更好地理解和应用网络爬虫,我们需要深入了解HTTP和HTTPS的请求与响应原理。本文将带领大家探讨这些基本原理,带您领略网络爬虫的魅力。
一、HTTP的请求与响应
HTTP,全称Hypertext Transfer Protocol,即超文本传输协议,是一种应用层协议,用于在网络中传输超文本(例如网页)。HTTP请求和响应是HTTP协议的基本组成单元。
HTTP请求由请求行、请求头部和请求正文组成。请求行包括请求方法、请求的资源路径和HTTP协议版本。请求方法包括GET、POST、PUT、DELETE等。请求头部包含了一些关于请求的元数据,例如请求来源、内容类型等。请求正文则包含了要发送给服务器的数据。
HTTP响应由响应行、响应头部和响应正文组成。响应行包括HTTP协议版本、状态码和原因短语。响应头部包含了一些关于响应的元数据,例如内容类型、字符集等。响应正文则包含了服务器返回给客户端的数据。
二、浏览器发送HTTP请求的过程
当我们访问一个网页时,浏览器会根据我们需要获取的资源地址生成一个HTTP请求,并将该请求发送给服务器。服务器在收到请求后,会进行处理并返回相应的HTTP响应。
具体而言,当我们输入一个URL后,浏览器会进行以下步骤:
- 解析URL,得到协议类型(http或https)、主机名、端口号和资源路径等信息;
- 根据协议类型选择相应的网络库,如HttpURLConnection、HttpClient等;
- 按照HTTP协议格式组装请求报文,包括请求行、请求头部和请求正文;
- 通过网络库发送请求报文;
- 接收服务器返回的HTTP响应报文,并解析出响应行、响应头部和响应正文;
- 根据响应头部的内容类型进行相应的处理,如解析HTML、处理JSON等;
- 将最终的响应结果展示在浏览器界面上。
三、HTTP请求方法
HTTP请求方法是指用来向服务器发送请求的动作类型。目前,HTTP协议主要支持GET、POST、PUT、DELETE等几种方法。
GET方法是最常用的请求方法之一,它用于从服务器获取特定资源的信息。GET请求将请求参数附加在URL的末尾,以“?”符号分隔,如http://example.com/search?keyword=apple&page=1。
POST方法则用于向服务器发送数据。它通过在请求正文中包含要发送的数据来进行通信。POST请求常用于表单提交、上传文件等操作。
四、查看网页请求
在浏览器中查看HTTP请求报文需要使用一些开发者工具。常见的浏览器(如Chrome、Firefox)都提供了内置的开发者工具,其中包含了网络面板,可以用来查看和分析HTTP请求和响应报文。
以Chrome浏览器为例,打开开发者工具的步骤是:右键点击页面中的任意位置选择“检查”,或者使用快捷键F12打开开发者工具。在开发者工具的顶部菜单中选择“Network”选项卡,然后刷新页面即可看到所有的HTTP请求和响应报文。
五、常用的请求报头
HTTP请求头部包含了关于请求的元数据信息,这些信息对于客户端和服务端进行沟通协作至关重要。以下是一些常用的HTTP请求头部:
- User-Agent:用于指定客户端所使用的操作系统、浏览器和其他相关信息。例如,User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3。
- Referer:用于指示请求来源,即告诉服务器该请求是从哪个页面或链接过来的。例如,Referer: Example Domain。
- Cookie:用于保存用户在多个请求之间的状态信息,例如登录信息、个性化设置等。例如,Cookie: username=john_doe; session_id=abcdefg。
- Host:用于指定请求的目标服务器的主机名和端口号。例如,Host: http://www.example.com:80。
- Accept:用于告诉服务器客户端能够处理哪些类型的内容。例如,Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8。
六、服务端HTTP响应
服务端HTTP响应是指服务器对客户端请求的响应。响应报文包括响应行、响应头部和响应正文。
响应行包含HTTP协议版本、状态码和原因短语。状态码表示请求的处理结果,如200表示成功,404表示未找到资源,500表示服务器内部错误等。
响应头部包含了一些关于响应的元数据,如内容类型、字符集、响应时间等。响应正文则包含了服务器返回给客户端的数据,例如HTML、JSON或其他格式的数据。
七、常用的响应报头
以下是一些常用的HTTP响应头部:
- Content-Type:用于指定响应正文的内容类型。例如,Content-Type: text/html; charset=utf-8。
- Content-Length:用于指示响应正文的长度。例如,Content-Length: 12345。
- Set-Cookie:用于在客户端存储服务器特定的状态信息。例如,Set-Cookie: session_id=abcdefg。
- Location:用于指示重定向的URL地址。例如,Location: Example Domain。
- Expires:用于指示响应过期的日期和时间。例如,Expires: Wed, 21 Jul 2023 10:00:00 GMT。
- Cache-Control:用于控制客户端如何缓存响应并对其进行重用。例如,Cache-Control: no-cache, no-store, must-revalidate。
八、Cookie 和 Session
Cookie和Session都是为了维护用户状态而产生的技术。
Cookie是在客户端(浏览器)上存储用户状态信息的一种方式。当用户访问网站时,服务器会在响应报文中加入一个或多个Cookie,这些Cookie包含了标识用户身份的信息,如用户名、登录状态等。当用户再次访问该网站时,浏览器会将存储的Cookie信息发送给服务器,以帮助服务器识别用户身份,并进行个性化推荐、登录验证等操作。
Session是在服务器端存储用户状态信息的一种方式。当用户首次访问网站并登录时,服务器会在客户端生成一个唯一的Session ID,并将其发送给客户端(通常通过Cookie)。当用户再次访问该网站时,浏览器会将存储的Session ID发送给服务器,以帮助服务器识别用户身份,并恢复用户的会话状态。与Cookie不同,Session的信息存储在服务器端,因此可以存储更敏感的信息,并且可以跨多个浏览器使用。
九、响应状态码
HTTP响应状态码是由服务器返回给客户端的数字代码,用于表示请求的处理结果。以下是一些常见的HTTP响应状态码:
- 200 OK:请求成功。
- 301 Moved Permanently:请求的资源永久性转移到其他URL。
- 302 Found:请求的资源临时性转移到其他URL。
- 304 Not Modified:客户端缓存的资源未被修改,可直接使用缓存资源。
- 403 Forbidden:禁止访问请求的资源。
- 404 Not Found:请求的资源未找到。
- 500 Internal Server Error:服务器内部错误导致无法完成请求。
- 503 Service Unavailable:服务器暂时无法处理请求(通常用于维护或升级期间)。
十、网页的两种加载方法
网页的加载方法主要分为两种:同步加载和异步加载。
- 同步加载:当浏览器请求一个网页时,会按照HTML文档的结构顺序加载每个元素。在加载过程中,浏览器会等待每个元素加载完成后再加载下一个元素。这种方式需要等到所有元素都加载完毕后才能展示整个网页,因此加载速度较慢。
- 异步加载:随着Web技术的发展,为了提高网页的加载速度和用户体验,出现了异步加载技术。异步加载是指当浏览器请求一个网页时,会先加载HTML文档的结构,然后再通过JavaScript等技术异步加载其他元素。这种方式不需要等待所有元素都加载完成后再展示整个网页,因此加载速度较快。
常见的异步加载技术包括AJAX(Asynchronous JavaScript and XML)、Fetch API、axios等。
十一、认识网页源码的构成
网页源码是由HTML、CSS和JavaScript等语言编写的文本文件,用于构建和设计网页的内容、样式和交互。
- HTML(HyperText Markup Language):HTML是网页的基础,用于创建网页的结构和内容。它使用一系列标记来描述文本、链接、图片等元素,使得浏览器能够正确地解析和展示网页。
- CSS(Cascading Style Sheets):CSS用于控制网页的样式,包括字体、颜色、布局等。它可以让网页看起来更加美观、易于阅读和使用。CSS可以通过内联样式、内部样式表和外部样式表等方式来定义和应用。
- JavaScript:JavaScript是一种脚本语言,用于实现网页的交互功能,如响应用户的点击、提交表单等操作。它可以让网页变得更加生动有趣,提升用户体验。JavaScript通常嵌入在HTML文档中,也可以通过外部文件引入。
除了以上三种基本的网页构成元素之外,网页源码还可能包含其他内容,如图片、视频等多媒体元素,以及服务器端脚本语言(如PHP、Java等)生成的动态内容等。
十二、爬虫协议
爬虫协议是指网络爬虫在抓取网页内容时需要遵循的一些规范和协议,以确保合理、合法、道德地获取数据。以下是一些常见的爬虫协议:
以上这些爬虫协议都是在爬取网页内容时需要遵守的基本规范。在编写网络爬虫时,需要遵循这些协议,以避免对目标网站造成不必要的干扰或伤害。同时,也需要了解各种爬虫协议之间的差异,以便更好地理解和处理不同格式的数据。
- Robots.txt协议:Robots.txt文件是一个文本文件,它告诉爬虫哪些页面可以抓取,哪些页面不能抓取,以及爬虫的访问方式。大多数网站都会提供一个Robots.txt文件来指导爬虫的行为。
- Robots Exclusion Protocol(REP):REP是一种更加灵活的爬虫协议,它可以通过HTTP头部的User-agent字段来告诉爬虫哪些页面可以抓取,哪些页面不能抓取。
- Common Crawl Data Format(CCDF):CCDF是一种公开的数据格式,它用于规范化和描述网络爬虫所抓取的数据。任何人都可以使用CCDF来分享自己爬取的数据,也可以使用CCDF来解析其他爬虫所爬取的数据。
- Portable Document Format (PDF):虽然PDF不是一种爬虫协议,但是PDF文件经常被用于展示网页内容,特别是在学术论文和报告等领域。在爬取网页内容时,需要识别和处理PDF文件。
- JSON/XML/Atom/RSS Feeds:这些数据格式通常不是爬虫协议,但是它们经常被用于提供API接口或者提供数据服务。在爬取网页内容时,需要识别和处理这些数据格式。