移动端网页如何通过 Accept-CH 响应头请求设备型号信息
服务器可以通过 Accept-CH 响应头请求客户端发送 Sec-CH-UA-Model 等高熵提示头,浏览器在允许的情况下会在后续请求中携带这些信息。
检查服务器是否发送了 Accept-CH 响应头
在移动端浏览器开发者工具的 Network 面板中,找到加载网页的主请求,查看其响应头。确认是否存在 Accept-CH 响应头,且该头中包含 Sec-CH-UA-Model 或 Sec-CH-UA-Form-Factors 等字段。如果响应头中没有 Accept-CH,浏览器将不会在后续请求中发送这些高熵提示信息。
如果响应头中存在 Accept-CH,但列表为空,服务器可能已停止请求这些提示。此时浏览器会停止在当前会话中发送相关提示头,直到服务器再次发送包含新列表的 Accept-CH 响应头。检查响应头中的列表内容,确认服务器是否明确请求了设备型号相关的提示。
验证浏览器是否在后续请求中携带了请求的提示头
在开发者工具的 Network 面板中,切换到 Fetch/XHR 标签页,刷新页面并观察后续的请求。检查这些请求的请求头,确认是否包含了服务器在 Accept-CH 中请求的提示头。例如,如果服务器请求了 Sec-CH-UA-Model,则后续请求中应包含该头。
如果后续请求中未包含请求的提示头,可能是因为浏览器的隐私策略或权限策略阻止了发送。检查浏览器的权限策略设置,确认是否允许该站点发送高熵提示头。此外,确认浏览器或标签页未关闭,因为提示头的生命周期仅限于当前浏览会话。
确认提示头是否包含在 Vary 响应头中
查看服务器响应头中的 Vary 字段,确认是否包含了请求的提示头。例如,如果服务器请求了 Sec-CH-UA-Model,Vary 头中应包含该字段。这指示浏览器和缓存系统根据该提示头的值来区分不同的响应内容。
如果 Vary 头中未包含请求的提示头,浏览器可能会错误地使用缓存的响应,导致设备信息未生效。确保 Vary 头中包含所有请求的提示头,以确保服务器根据不同的设备信息提供不同的资源。注意,频繁变化的提示头(如网络提示头)可能会导致资源无法被有效缓存。
检查是否使用了 HTML meta 标签指定提示头
查看网页的 HTML 源代码,检查是否存在使用 http-equiv 属性的 meta 标签。例如,查找 <meta http-equiv='Accept-CH' content='Sec-CH-UA-Model'>。如果存在此类标签,浏览器会根据其内容请求相应的提示头。
如果使用了 meta 标签,但服务器响应头中的 Accept-CH 列表未包含相应字段,浏览器可能不会发送该提示头。确保 meta 标签的内容与服务器响应头中的 Accept-CH 列表一致,以避免冲突。此外,meta 标签指定的提示头也会受到浏览器隐私策略的限制。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。