在HTTP与HTTPS对比的日志里,最该核对的是能区分协议、端口、TLS握手结果和重定向链路的字段:请求协议、请求端口、响应状态码、Location、服务器名称、TLS版本与加密套件、证书主题与有效期、以及时间戳和客户端IP。只比对“http://”和“https://”两个URL不够,因为协议切换会牵涉重定向、证书、混合内容和抓取行为。多人协作时,把这些字段写进交付模板,能减少“我以为你查过”的返工。
不同日志来源能看到的字段不同,先分清再核对。Web服务器访问日志通常有请求方法、路径、协议版本、状态码、响应大小、Referer、User-Agent;反向代理或CDN日志可能额外有请求端口、TLS版本、加密套件、上游响应时间;浏览器开发者工具的网络面板能看到最终协议、证书信息和重定向序列。抓取类日志则可能只有URL、状态码和抓取时间。
准备一份最小字段清单,避免多人各查各的:
request_scheme:请求是http还是httpsrequest_port:80、443或其他端口status_code:200、301、302、404、500等location:重定向目标,注意是否从https跳回httpserver_name:命中的虚拟主机或域名tls_version与cipher_suite:TLS握手结果cert_subject与cert_not_after:证书覆盖域名和到期时间timestamp与client_ip:定位同一请求链路如果日志里没有TLS字段,不要从状态码反推“证书一定没问题”。状态码只能说明HTTP层结果,TLS失败可能根本进不到应用日志。这时应改用支持记录TLS信息的代理日志,或在浏览器中单独查看证书。
核对顺序建议从客户端请求开始,到最终响应结束。第一步看请求协议与端口是否匹配:https请求通常落在443,http请求落在80;如果https请求出现在80端口,或http请求出现在443端口,说明配置或代理转发可能有问题。第二步看状态码:301和302表示重定向,200表示直接返回内容,404和500说明目标不可用。第三步看Location字段,确认重定向目标是不是https,以及是否出现循环跳转。
第四步看TLS字段。TLS版本过低、加密套件过旧、证书域名不匹配或已过期,都会让https连接失败或降级。第五步看响应内容里是否还有http资源引用,这属于混合内容问题,日志本身不一定直接记录,需要结合页面源码或浏览器控制台检查。第六步用时间戳和客户端IP把同一次访问的多个日志条目串起来,避免把不同请求的字段混在一起比较。
假设一个例子:某次访问日志显示request_scheme=https、status_code=301、location=http://example.com/page。这表示https请求被重定向回了http,链路方向反了。判断结果:需要检查重定向规则,而不是只改页面里的链接。若status_code=200但浏览器仍提示不安全,则要转向检查混合内容和证书链,而不是继续盯状态码。
验证的关键是让另一个人按同样字段能复现结论。把原始日志行、字段值、判断依据和结论写在一起,不要只写“https有问题”。检查项包括:同一URL分别用http和https请求,记录各自的协议、端口、状态码和重定向次数;确认https最终返回200且没有跳回http;确认证书覆盖当前域名且在有效期内;确认页面没有http子资源。
如果多人协作,交付时附上字段对照表:左边写http请求的字段值,右边写https请求的字段值,差异处标出。这样评审时不用重新翻日志。注意,HTTPS不保证安全无漏洞,也不保证排名;它只说明传输层加密和证书校验通过。robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录,这些判断不能从协议对比日志中直接得出。
协议配置、证书和重定向规则会随部署变化,建议在每次发布后抽查一组URL,核对上述字段。维护清单可以简化为:协议与端口是否一致、状态码是否符合预期、Location是否指向https、TLS版本与证书是否有效、是否出现混合内容。发现异常时,先定位是应用层、代理层还是证书层,再决定改哪里。
下一步:从当前日志中选一条http请求和一条https请求,按上面的字段清单并排填写,标出所有差异,再判断哪些差异是预期重定向,哪些是配置错误。