2.网络基础
。。。
DNS
作用:把域名解析成ip,这个DNS的A记录。
除了这些他还能解析成其他的,比如c name就是cdn
先查看本地缓存,本地hosts
windows路径C:\Windows\System32\drivers\etc\hosts
如果本地DNS服务器有去往该域名的解析ip,就用它的。
刷新DNS解析缓存
ipconfig flushdns
然后后面就是你内网网段的DNS服务器
然后没有记录的话,继续走,就是到运营商了,三大运营商的DNS
然后就是到13台根服务器去查询了,
现在我们拿到了解析的IP
然后我们要加端口,80端口可以不加。
0-1023保留
1024-...
拿到IP和确定端口就可以建立三次握手,发请求了
协议
HTTP/1.1做了缓存处理,内存优化,连接报头错误通知消息,传递内容协商等多个方面做了改进,然后这个协议支持持久连接在一个TCP连接上传输多个连接,优化建立连接和关闭连接的这种消耗。
我们的时候比较常见的,别的就是开发比较常用的POST的请求可以完全可以替代,我们主要就是用POST的来求,然后状态状态代码状态代码绿的就是成功200,表示请求成功武器返回网页或者数据,
状态码
1**(信息类):表示接收到请求并且继续处理
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
2**(响应成功):表示动作被成功接收、理解和接受
200——表明该请求被成功地完成,所请求的资源发送回客户端
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
3**(重定向类):为了完成指定的动作,必须接受进一步处理
300——请求的资源可在多处得到
301——本网页被永久性转移到另一个URL
302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
303——建议客户访问其他URL或访问方式
304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
4**(客户端错误类):请求包含错误语法或不能正确执行
400——客户端请求有语法错误,不能被服务器所理解
401——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
HTTP 401.2 - 未授权:服务器配置问题导致登录失败
HTTP 401.3 - ACL 禁止访问资源
HTTP 401.4 - 未授权:授权被筛选器拒绝
HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
402——保留有效ChargeTo头响应
403——禁止访问,服务器收到请求,但是拒绝提供服务
HTTP 403.1 禁止访问:禁止可执行访问
HTTP 403.2 - 禁止访问:禁止读访问
HTTP 403.3 - 禁止访问:禁止写访问
HTTP 403.4 - 禁止访问:要求 SSL
HTTP 403.5 - 禁止访问:要求 SSL 128
HTTP 403.6 - 禁止访问:IP 地址被拒绝
HTTP 403.7 - 禁止访问:要求客户证书
HTTP 403.8 - 禁止访问:禁止站点访问
HTTP 403.9 - 禁止访问:连接的用户过多
HTTP 403.10 - 禁止访问:配置无效
HTTP 403.11 - 禁止访问:密码更改
HTTP 403.12 - 禁止访问:映射器拒绝访问
HTTP 403.13 - 禁止访问:客户证书已被吊销
HTTP 403.15 - 禁止访问:客户访问许可过多
HTTP 403.16 - 禁止访问:客户证书不可信或者无效
HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
404——一个404错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的URL
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
5**(服务端错误类):服务器不能正确执行一个正确的请求
HTTP 500 - 服务器遇到错误,无法完成请求
HTTP 500.100 - 内部服务器错误 - ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 - 服务器太忙
HTTP 500-14 - 应用程序无效
HTTP 500-15 - 不允许请求 global.asa
Error 501 - 未实现
HTTP 502 - 网关错误
HTTP 503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常
HTTP报文
由请求行、请求头部、空行、请求报文主体几个部分组成。
http报文有很多行内容,字段都是由一些ASCIl码串组成,但各个字段长度不同,报文分两种一是客户端发往服务端的报文(请求报文),二是服务端发往客户端的报文(响应报文)。
请求行
请求报文的第一行,用于说明客户端想干嘛?内容有请求方法,URL,和HTTP协议版本三个字段组成,他们之间用空格分隔。
例:GET /index.html HTTP/1.1
请求方法HEAD
请求资源/123456
请求协议HTTP/1.1
请求头部(请求头,header)
HTTP请求头是客户端在向服务器发送HTTP请求时,携带的一些元数据信息。这些信息通常包括客户端的一些属性、请求的内容类型、请求方法、请求的目标资源等等。
常见的HTTP请求头包括:
User-Agent:客户端的用户代理标识,用于标识客户端的类型和版本信息。
Accept:客户端接受的内容类型,用于告诉服务器客户端能够接受哪些类型的响应。
Accept-Encoding是HTTP请求头中的一个字段,用于告知服务器客户端支持的内容编码方式。内容编码是一种在HTTP传输中对数据进行压缩或编码的方式,以减少数据传输的大小和提高传输效率。常见的内容编码方式包括gzip、deflate和 br等。
Accept-Language是HTTP请求头中的一个字段,用于告知服务器客户端支持的语言类型。
Cache-Control是HTTP请求头和响应头中的一个字段,用于控制缓存的行为。在HTTP请求头中,客户端可以使用Cache-Control字段来控制请求的缓存行为
请求标头原文
GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: BIDUPSID=C5B65D0311FCD684DC5CAC1235EF9188; PSTM=1689092083;
Accept:客户端接受的内容类型就是用于告诉客户端能够接受哪些类型的响应,
Accept-Encoding: 用于告知无锡客户端支持内容编码方式内容编码,一种在HTTP传输中的数据进行压缩编码的减少数据传输的大小,提高传输效率都是传输的时候压缩传输会更快的,
Accept-Language:就这三个语言
Cache-Control:这个是这个是缓存控制缓存,然后HTTP请求中使用这个字段控制的缓存行为nocahce就是不希望使用这个缓存的响应,
Connection: keep-alive连接持久连接客户端,希望保持与服务端的长久连接持久连接,以便于下次再请求的时候不用重新建立三次握手,然 就是微信发信息,比如你登录吧,你登录存了一堆登录的,你下次再连接的时候你就不用重新登录把它放在头里,
Cookie: 会话信息
Cookie是在请求头里,
Host: www.baidu.com主机,主机名和端口
Pragma: no-cache 这个跟上面的Cache-Control是一样的,已经被上面的Cache-Control给代替了
Sec这些都是ua的一些详细信息。
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch
User-Agent: 用户代理,有点时候是用这UA做反爬
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)
然后请求头完了是个空行
空行是告知服务器,这个空行以下就没有请求信息了,
然后下面就是请求体了
请求体
请求体包含了要发送的信息
GET不是啊,GET就直接请求这个资源了。
响应
MacBook-Pro ~% curl -I www.315i.com/12345
HTTP/1.1 404 Not Found
Server: nginx
Date: Fri,02 Feb 2024 19:16:13 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Content-Language: en
Vary: Accept-Encoding
空行
空行--这行应该是数据,因为他没响应数据所以也是空的
Vary: Accept-Encoding
告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题。
Robots协议
robots 协议也称爬虫协议、爬虫规则等,指的是网站跟路径下的robots.txt文件,这个文件告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。但是,这个robots 协议不是防火墙,也没有强制执行力,搜索引擎完全可以忽视robots.txt文件去抓取网页的快照。
如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。
网站有机器人协议意思就是 协议内的数据你随便爬,当然我们现在做的大部分爬虫是不遵从这个协议的,这只是个君子协议,例如scrapy框架配置中有遵从 robots协议的配置,但是我们要想拿更 多数据做数据分析,肯定不能遵从这个协议了。
换句话说遵从的话0风险
大多用于商业竞争。
禁止Disallow: /baidu
User-agent: * 这里的-代表的所有的搜索引擎种类,*是一个通配符
Disallow: /admin/ 这里定义是禁止爬寻admin目录下面的目录
Disallow: /require/ 这里定义是禁止爬寻require目录下面的目录
Disallow: /ABC/ 这里定义是禁止爬寻 ABC目录下面的目录
Disallow: /cgi-bin/*.htm 禁止访问/cgi-bin/目录下的所有以".htm"为后缀的URI (包含子目录)。
Disallow: /*?* 禁止访问网站中所有包含问号(?)的网址
Disal1ow: /.jpgs$ 禁止抓取网页所有的.jpg格式的图片
Disallow: /ab/adc.html 禁止爬取ab文件夹下面的adc.html文件。
Allow: /cgi-bin/ 这里定义是允许爬寻cgi-bin目录下面的目录
Allow: /tmp 这里定义是允许爬寻tmp的整个目录.
Allow: .htm$ 仅允许访问以".htm"为后缀的URI。
Allow: .gifs 允许抓取网页和gif格式图片
Sitemap: 网站地图 告诉爬虫这个页面是网站地图
评论区