真实用户的浏览器只会发 GET 和 POST
当通常患者或用户接见医院官网时:
打开网页、查看科室、看专家介绍:浏览器默认发送的是
GET要求。。。。。。。提交挂号、填写表单、登录后盾:浏览器发送的是
POST要求。。。。。。。
只有服务器和动易 CMS 对 GET 和 POST 的处置是正常的,,,,,,真实用户在前端感知不到任何异常,,,,,,网页能打开,,,,,,挂号也能提交,,,,,,业务逻辑天然美满运杏祝。。。。。。
人类不会手写 HEAD 要求去“看网页”
HEAD 要求在 HTTP 和谈中的界说是:“只获取 HTTP 响应头(Header),,,,,,不必要返回网页正文内容(Body)”。。。。。。。
正常人上网是为了看网页页面,,,,,,不成能有人用浏览器去发 HEAD 要求来读网页,,,,,,所以业务层齐全不受任何影响。。。。。。。
搜索引擎(如百度 Baiduspider、Googlebot)不是人类,,,,,,它们是用法式写成的“自动化爬虫”。。。。。。。为了在互联网上高效抓取上百亿的页面,,,,,,蜘蛛设计了一套极端节俭资源和带宽的探活机造。。。。。。。
1. 蜘蛛的“轻量探活”机造(先敲门,,,,,,再进屋)
鄙人载一个几百 KB 甚至几 MB 的 HTML 页面之前,,,,,,百度蜘蛛通;;;;;;;嵯认蚍务器发一个轻量的 HEAD 要求 试探一下。。。。。。。它的主张有两个:
探活(Check Alive):这个页面到底还在不在???????状态码是不是
200???????校验更新(Check Modified):通过 Header 里的
Last-Modified或ETag查抄页面自上次抓取后有没有更新。。。。。。。若是是没更新的旧页面,,,,,,就直接跳过,,,,,,节俭抓取配额。。。。。。。
2. 状态码是搜索引擎的“最高指令”
搜索引擎蜘蛛是严格依照 HTTP 状态码处事的:
当它发送
HEAD要求探活时,,,,,,动易后端由于没有映射HEAD路由,,,,,,直接回复了404 Not Found(页面不存在)。。。。。。。百度蜘蛛收到
404后,,,,,,它的法式逻辑会立即做出判定:“这个 URL 已经失效/被删除了!”既然已经被判定为死链,,,,,,蜘蛛就不会再浪费流量去发
GET要求下载网页正文了。。。。。。。
3. 了局:在索引库里直接“拉黑”
搜索引擎会在后盾将该 URL 象征为异常死链。。。。。。。
即便你手动去百度站长平台提交这个网址,,,,,,百度后盾的自动化校验剧本用
HEAD一测又是404,,,,,,提交就会直接失败。。。。。。。持久如此,,,,,,域名在搜索引擎里的权威度(Site Quality)就会被大幅扣分,,,,,,导致官网域名彻底无法进入搜索前十名。。。。。。。
处置方式:
把nginx批改成下面体式,,,,,,将HEAD转成GET:
location / {
# 维持原有的 proxy_pass 配置
proxy_pass http://127.0.0.1:8080; # 换成你的动易后端地址/端口
# 主题安全逻辑:只有当要求是 HEAD 时,,,,,,才将作为转成 GET
if ($request_method = HEAD) {
proxy_method GET;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}