PHP使用header()重定向时能否修改User-Agent字符串?
关于PHP重定向前修改/剥离User-Agent的问题
答案是不行,得从HTTP请求的核心逻辑说起:
- User-Agent是客户端(比如浏览器、curl工具这类HTTP请求发起方)主动发送给服务器的请求头信息,服务器只能被动接收这个值,没办法直接干预客户端后续请求里的User-Agent内容。
- 当你调用
header('Location: https://example.com/')时,PHP只是给客户端返回一个3xx的重定向响应,相当于告诉客户端“请去访问这个新地址”。接下来的新请求是客户端自己发起的,这个请求的User-Agent完全由客户端本身决定——服务器在第一次请求里做的任何操作,都没法强制客户端修改它发送的User-Agent字符串。
如果你的需求是在服务器内部业务逻辑里使用一个修改后的User-Agent,那倒是可以变通:在第一次请求里把原始User-Agent修改后存在会话($_SESSION)或者Cookie里,然后在目标页面读取这个自定义值来用,但这并不是真正改变了客户端发送的User-Agent,只是服务器自己存了一个替代值而已。
另外,如果是你自己编写的HTTP客户端(比如用PHP的curl发起请求),那你可以在发起请求前直接设置自定义的User-Agent,但这和普通浏览器用户访问的场景完全无关。
内容的提问来源于stack exchange,提问作者crbon




