2.3.2 URL携带搜索关键字
在不同搜索客户端,URL携带搜索关键字的实现有所不同。这一节以浏览器携带搜索关键字为例,说明用户提交的搜索关键字是如何传送给搜索引擎的。
表2-2是不同的搜索引擎在Safari浏览器中搜索“刘俊启”这个搜索关键字时,浏览器发出的网络请求。
表2-2 不同搜索引擎在Safari浏览器中搜索“刘俊启”时发出的网络请求
为什么使用浏览器验证呢?因为搜索服务在浏览器中是使用业界公开的标准传递关键字信息的,其次从URL的定义标准来讲,同一个URL在不同的浏览器中打开,用户看到的内容应该是一致的(服务端差异化定制部分或与用户私人信息相关的部分除外)。若是相同的URL在不同的浏览器中所展现的内容不一样,说明网站对于不同的浏览器进行了差异化定制。
在使用Safari浏览器做不同的搜索引擎对比时,可以发现从地址栏中复制出来的URL中存在中文,直接把这种带中文的URL复制到浏览器中,页面也可以正常打开。这有些不符合人们对URL的常规认知。因此,我最后在浏览器的网络层对真正发出的网络请求进行了确认,发现所有网络请求都是经过URL编码处理的。至少从表面上来看,Safari浏览器对特殊字符进行了自动兼容。
而在Chrome浏览器中,通过使用上面的搜索引擎进行搜索,再从地址栏复制URL到浏览器中,可以发现它们都是经过URL编码的,其处理逻辑和Safari浏览器不太一样,但网络请求的URL是一样的。
在搜索客户端中,可能会遇到相同的问题。无论是用户发起的关键字搜索还是直接输入URL,当输入的内容不符合网络通信的标准时,客户端需要主动进行编码,以符合标准。用户输入关键字后,客户端向服务端发送搜索请求,这一动作会将关键字作为URL参数的一部分上传到服务端。这时,需要对URL中的特殊字符进行编码,否则即使在地址栏看起来正常,在实际的网络请求中也会出现异常。
通过上述分析可以发现,每个搜索引擎中URL携带关键字的方式都有所不同。以表2-2所示的内容为例,sogou.com中的关键字的key是query,而so.com中的关键字的key是q。如果你对此感兴趣,可以使用表中带有中文的URL进行一次URL编码,或者在不同的浏览器中尝试不同的搜索引擎,观察它们如何在URL中描述关键字。