不懂Web基本原理怎么能学好爬虫。(五 、网络协议之HTTP)(爬虫、反爬虫、网络协议、HTTP、WebSocket )

目录

前言

1.HTTP 是什么       

2.HTTP 工作过程        

2.1 HTTP 协议格式       

2.1.1 抓包工具的使用

2.1.2 抓包工具原理       

 2.1.3 抓包结果分析

2.1.4 协议格式总结  ​编辑

3. HTTP 请求 (Request)

3.1 请求地址 URL       

3.2 认识方法         

 3.2.1 GET 方法       

3.2.2 POST 方法

3.2.3 其他方法

3.3 HTTP请求报文头属性

3.3.1Accept 

3.3.2cookie

3.3.3Referer

3.3.4Cache-Control

3.3.5 Host       

3.3.6Content-Length

3.3.7 Content-Type

3.3.8 User-Agent (简称 UA)        

3.4 请求 "正文" (body)

4.HTTP响应报文

4.1 响应行:

4.2 响应头:

4.3 响应体:

4.4 响应状态码 

4.5常见的HTTP响应报文头属性

4.5.1 Cache-Control

4.5.2 ETag 

4.5.3 Location 

4.6 cookie机制:

总结


前言

网络协议时链接客户端和服务器的桥梁,学习网络协议相关的知识,能让我们对网络通信过程以及通信所需条件有一个全面的认识,可以帮助我们提升爬虫技术。

常见的网络协议有HTTP协议、WebSocket协议、FTP协议、SSH协议和ViewSource协议等。我们重点学习在Web应用中使用最多的HTTP协议WebSocket协议


1.HTTP 是什么
       

HTTP (全称为 "超文本传输协议") 是⼀种应用非常广泛的应用层协议。

HTTP 诞生与1991年. 目前已经发展为最主流使用的一种应用层协议,我们平时打开一个网站, 就是通过 HTTP 协议来传输数据的.

        https 是在 http 基础之上做了一个加密解密的工作,当我们在浏览器中输入一个百度搜索的 "网址" (URL) 时, 浏览器就给百度的服务器发送了一个 HTTP 请 求, 百度的服务器返回了一个 HTTP 响应.
        这个响应结果被浏览器解析之后, 就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片, 字体等信息).

2.HTTP 工作过程 
       

        当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.

        事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应  的交互过程. 可以通过 chrome 的开发者工具观察到这个详细的过程:

通过 F12 打开 chrome 的开发者工具, 切换到 网络 标签页. 然后刷新页面即可看到如下图效果. 每一条记录都是一次 HTTP 请求/响应

2.1 HTTP 协议格式
       

        HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具分析 HTTP 请求/响应 的细节.

2.1.1 抓包工具的使用

以 Fiddler 为例. (下载地址: https://www.telerik.com/fiddler/),安装过程比较简单, 一路 next 即可。

左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
请求和响应的详细数据, 可以通过右下角的 View in Notepad 通过记事本打开.
使用 ctrl + a 全选左侧的抓包结果, delete 键清除所有被选中的结果.
 

2.1.2 抓包工具原理
       

        Fiddler 相当于一个 "代理",浏览器访问 baidu.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器.

 2.1.3 抓包结果分析

HTTP请求抓包结果:

首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;


 HTTP响应:

 首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.


2.1.4 协议格式总结
 
 

为什么 HTTP 报文中要存在 "空行"?

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者是 "报头和正文之间的分隔符".
HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题". 

3. HTTP 请求 (Request)


3.1 请求地址 URL
       

        平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. 

        URL 的详细规则由 因特网标准RFC1738 进行了约定(https://datatracker.ietf.org/doc/html/rfc1738).

URL中可以省略的部分:

  • 协议名: 可以省略, 省略后默认为 http://
  • ip 地址 / 域名: 在 HTML 中可以省略(比如 img, link, script, a 标签的 src 或者 href 属性). 省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致.
  • 端口号: 可以省略. 省略后如果是 http 协议, 端口号自动设为 80; 如果是 https 协议, 端口号自动设为 443.
  • 带层次的文件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问/index.html
  • 查询字符串: 可以省略
  • 片段标识: 可以省略

关于 URL encode

        像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一 位,前面加上%,编码成%XY格式

 "\\" 被转义成了 "%5C%5C"

urldecode就是urlencode的逆过程.

3.2 认识方法
         

这里的方法指的是请求的方法类型,它的分类有以下几个:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值