HTTP来源地址(referer,或 HTTP referer)是HTTP表头的一个字段,用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着HTTP来源地址,目前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。
网站里面常常会用到这个属性来对爬虫进行限制以及做防盗链处理,当你傻愣愣的去访问页面时,往往会返回这样的错误信息页面
这里因为有关键字referer所以大家可能很快就能够判断出问题所在然后针对性做处理,但是更多时候往往会出现一些我们没遇到过的情况,,比如IP黑名单,Token防盗链等等,我们可以去CDN 默认错误码寻找常见的错误码信息,然后找到问题再针对解决。
这里引用一下又拍云的CDN 默认错误码
错误码(code) | 错误描述(msg) | 发生了什么 |
---|---|---|
40310001 | invalid url | URL 被禁止访问 |
40310002 | region is forbidden | 触发了地区访问限制规则 |
40310003 | too many requests | 触发了 IP 频率限制规则 |
40310011 | invalid User-Agent header | 触发了 User-Agent 防盗链规则 |
40310012 | remote address is forbidden | 触发了 IP 黑白名单规则 |
40310013 | invalid user token | 触发了 Token 防盗链规则 |
40310014 | invalid Referer header | 触发了 Referer 防盗链规则 |
40310015 | referer uri is forbidden | 触发了 Referer URI 防盗链规则 |
40310020 | invalid authentication response body | 鉴权服务器返回的 body 内容不合法,导致鉴权失败 |
40310021 | invalid authentication response status | 鉴权服务器返回的状态码不合法,导致鉴权失败 |
40310022 | cyclic authentication requests | 鉴权服务器地址在又拍云进行了 CDN 加速,导致了循环请求 |
50310020 | authentication service unavailable | 鉴权服务器不可用 |
40110910 | authentication fails | 回源鉴权失败 |
40310006 | (api) request body too large | 通过 API 接口上传的文件 body 太大 |
41310001 | request body too large | 请求的 body 大小超过限制 |
40010030 | multiple Content-Type header | 触发了 WAF 规则,请求头中含有多个 Content-Type 头部 |
40310031 | too large form | 触发了 WAF 规则,form 表单太大 |
40310032 | waf protection rules triggered | 触发了 WAF 规则 |
xxx10999 | edge rule triggered | 触发边缘规则,xxx 特指状态码 |
40510004 | invisible domain | 域名触发了敏感信息被禁止访问 |
如何辨别
- 方式一
如果您通过浏览器访问,您可以通过浏览器页面查看到一段错误代码,例如:
{"code":"40310002","msg":"region is forbidden"}
如上错误代码及描述则说明用户在 CDN 侧配置了地区访问限制策略。
- 方式二
通过 curl 命令可以看到 X-Error-Code
响应字段,则可以看出触发了何种错误。
<br />< HTTP/1.1 403 Forbidden
< Server: marco/2.2
< Date: Fri, 18 May 2018 06:39:47 GMT
< Content-Type: application/json
< Connection: keep-alive
< X-Error-Code: 40310002
< X-Request-Id: 6b947a5e14a252909acab1e55df121c2
< Content-Length: 47
< Via: M.pcw-cn-hkg-166
通过查看 X-Error-Code: 40310002
,可以看出触发了地区访问限制规则。
不错,这个在爬取一些网站的时候应该比较实用