为什么说反爬是个伪命题

因为不管是正常的客户端请求,还是爬虫请求,都要遵循HTTP协议,爬虫发的 HTTP报文与正常用户请求没有本质区别,服务器无法区分

服务器只能通过一些trick,如短时间内发现某个ip的请求特别频繁认定其为爬虫,直接拒绝服务,或者通过验证码的方式等提高爬虫的难度,但无法彻底杜绝

爬虫也有应对之道,它可以在请求的时候不停地更换自己的 ip 以达到欺骗 server 的目的,也可以破解验证码

爬虫和反爬也是在相爱相杀中不断提高破解与被破解的手段了

301 与 302 有啥区别

image.png

输入 A 网址后,会重定向到 B 网址,就需要考虑是用 301 还是 302,两者的区别如下:

  • 301:代表永久重定向
    • 第一次请求拿到长链接后,下次浏览器再去请求短链的话,不会向短网址服务器请求了,而是直接从浏览器的缓存里拿,这样在 server 层面就无法获取到短网址的点击数
    • 如果这个链接刚好是某个活动的链接,也就无法分析此活动的效果。所以我们一般不采用 301。
  • 302:代表临时重定向
    • 每次去请求短链都会去请求短网址服务器(除非响应中用 Cache-Control 或 Expired 暗示浏览器缓存),这样就便于 server 统计点击数
    • 所以虽然用 302会给server增加一点压力,但在数据异常重要的今天,这点代码是值得的,所以推荐使用 302!

HTTP 1.1 唯一一个要求请求头必传的字段是哪个,它有什么作用

是 Host

HTTP 1.1 允许一台服务器搭建多个Web站点,也就是说一台服务器可以托管多个域名对应的网站,这样的话必须指定Host,到达服务器后才能找到对应的网址向其请求。
image.png

老生常谈很多人的误解:GET 和 POST 的区别是啥

其实 GET,POST 都可以用来传输信息

  • GET 请求可以用 body 传输数据
  • POST 请求时你可以不用不用 body 而用 url 传输数据

这就好比你可以用救护车来运货,也可以用卡车来救人,都没有问题的,但这不符合人们的认知,不符合HTTP对其定义的语义,无规矩不成方圆,遵循语义大家沟通才能更高效

所以其实它们的区别只在语义上有区别,至于安全,那是 HTTPS 的事了。