一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。
当用户 访问 /, 直接跳转到 /new, 返回/new 的数据
第二次再次访问 /, 因为已经被永久重定向了,所以直接经过 浏览器跳转到 /new,也就是直接到了 /new, 而不需要再次经过服务器由 / 跳到 /new。
301 ,访问 / , 直接由浏览器跳到 /news, 不会再次经过服务端,后果就是,当你服务端修改了访问 / 的资源,客户端也不会有变化,客户端显示的还是 /new 的资源,因为直接由浏览器跳到了 /new,服务端修改的代码相当于是直接被忽略了。
301跳转对查找引擎是一种对照驯良的跳转编制,也是查找引擎能够遭遇的跳转编制,它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。
当用户访问 /,第一次经过服务器, 跳转到 /new,返回 /new 的数据,第二次访问的时候,还是会访问/ ,然后由服务器 跳转到 /new, 就是每次都有两个req.url, / => /new
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。