localhost可以访问 ip不能访问_为啥用 ip 不可以访问知乎,而百度却可以?

(给算法爱好者加星标,修炼编程内功)

作者:帅地 (本文来自作者投稿)

我们先来ping知乎的域名,然后可以得到响应的服务器的ip,

bd9b77a3e026d4b6fbf693d9b5663694.png

之后我们用浏览器来访问这个ip,结果如下

d5f009e983d6f646d395c7edffafc385.png

被拒绝访问了。

而用ip来访问百度,则没啥问题,如图

24bebfecba40afd62451ea879bd06c06.png

56fec4fa923e2ecbd9de5f6edcef4c06.png

访问知乎的时候,域名可以访问,ip不可以访问,这究竟是为啥?

我们知道,ipv4的ip地址是非常有限的,如果每个人都想拥有一个全球ip,那肯定是不够分配的

所以,很多网站在发布的时候,是有可能几个域名共用一个CDN服务器的。

b824c17a7e57c2099b3acbdcef407a52.png

稍微解释下CDN是啥: CDN服务器可以说是一种缓存服务器。当我们要访问某个网站的资源时,如果该网站的服务器离我们很远,这样的话响应速度就会很慢,为了让响应速度快一些,我们可以把资源分布放在各个地方,然后响应客户端的时候,把离客户端较近的资源传送给他。

当我们用域名访问知乎的时候,CDN服务器可以根据访问的域名知道你想要的是哪个网站的资源,然后直接给你返回对应的资源。

但是当你用公网ip访问就不一样了,由于一个CDN服务器的公网ip对应多个域名网站,他不知道你想要的是哪个网站的资源,也就是说,当你用 118.89.204.192 去访问知乎的时候,CDN服务器不知道你要访问的是 zhihu.com,还是访问 a.com 或 b.com,所以他也干脆明了点,直接拒绝你的访问。

有人可能会问,我输入域名之后,DNS服务器帮我自动解析成对应的ip,去访问知乎的时候,也还是用ip访问的啊,这貌似和ip访问没啥区别啊。

确实,访问的时候,DNS服务器都会帮们我把域名解析成ip去访问,CDN服务器之所以能够检测到对应的域名,其实是这样的:

当客户端用域名访问知乎的时候,DNS会解析成对应的ip去访问CDN服务器,然后CDN服务器可以根据SNI机制获得该ip对应的来源域名,然后返回对应的资源。

这里稍微简单粗暴解释下SNI机制: 该机制主要是用来解决一个服务器对应多个域名时产生的一些问题,通过这种机制,服务器可以提前知道(还没建立链接)客户端想要访问的网站,想要知道更加具体的我已经给你们准备好文章:https://blog.csdn.net/firefile/article/details/80532161

知道了用域名可以访问知乎,而用ip不可以访问知乎之后,我们再来说说百度。

为啥百度ip和域名都可以访问呢?

这其实很简单,就是百度用的CDN服务器,只对应一个网站域名呗,说白了,就是百度有钱!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");print("点个好看吧!");printf("点个好看吧!");
cout <"点个好看吧!" <Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")echo "点个好看吧!"

【本文作者】

帅地:一名热爱编程的在校生,目前维护订阅号「苦逼的码农」,专注于写于编程相关的文章

推荐阅读

(点击标题可跳转阅读)

算法题:IP地址

为什么 AI 工程师要懂一点架构?

为什么说 O(n) 复杂度的基数排序没有快速排序快?

觉得本文有帮助?请分享给更多人

关注「算法爱好者」加星标,修炼编程内功

bd6ef4026d313d1f6b9580571bb6c498.png

喜欢就点一下「好看」呗~

Python可以使用第三方库Requests来发送HTTP请求,并使用BeautifulSoup库来解析HTML文档。通过这两个库的组合,我们可以实现根据问题访问知乎页面的功能。 首先,我们需要安装Requests和BeautifulSoup库。可以使用pip命令来安装: ``` pip install requests pip install beautifulsoup4 ``` 接下来,我们需要构造知乎问题的URL,例如要搜索关于Python的问题,可以使用以下URL: ```python url = "https://www.zhihu.com/search?q=python&type=content" ``` 然后,使用Requests库发送GET请求获取网页的HTML内容: ```python import requests response = requests.get(url) ``` 获取到HTML内容后,我们可以使用BeautifulSoup库解析HTML文档,提取相关信息。例如,可以提取问题的标题和答案: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") questions = soup.select(".Card") for question in questions: title = question.select_one(".ContentItem-title").text answer = question.select_one(".ContentItem.AnswerItem .RichText").text print("问题:", title) print("答案:", answer) print() ``` 以上代码,我们使用CSS选择器语法来选择问题标题和答案的元素,并提取其文本内容进行打印。 最后,我们可以将以上代码封装为一个函数,供需要的时候调用: ```python import requests from bs4 import BeautifulSoup def get_zhihu_results(keyword): url = f"https://www.zhihu.com/search?q={keyword}&type=content" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") questions = soup.select(".Card") results = [] for question in questions: title = question.select_one(".ContentItem-title").text answer = question.select_one(".ContentItem.AnswerItem .RichText").text results.append({"问题": title, "答案": answer}) return results keyword = "python" results = get_zhihu_results(keyword) for result in results: print("问题:", result["问题"]) print("答案:", result["答案"]) print() ``` 通过上述方法,我们就可以用Python根据问题访问知乎页面,并提取相应的问题和答案进行处理或展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值