背景
一个域名为 https://www.haha.com, 用http进行post请求访问接口时,某个大佬粗心将url写成了http://www.haha.com。结果,post请求变成get请求,获取不到传过来的参数。 查看nginx日志: 一条日志显示:http方式请求过来,服务器响应301状态码 第二条日志显示:后续又用https方式请求过来,服务器响应200状态码。
相关状态码解析
301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一;
302 Found 要求客户端执行临时重定向(原始描述短语为“Moved Temporarily”)。[20]由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。 新的临时性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新的URI的超链接及简短说明。 如果这不是一个GET或者HEAD请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。 注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用GET方式访问在Location中规定的URI,而无视原先请求的方法。因此状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。
307 Temporary Redirect 请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求
从上面我们可以看出,301跳转是永久重定向,而307是临时重定向。
解决办法
方法一:修改url 改成https://www.haha.com. 方法二:修改nginx层配置,在server里配置return 307 https://servername/request_uri; 307:对于 POST 请求,表示请求还没有被处理,客户端应该向 Location 里的 URI 重新发起 POST 请求
|