我们经常说“404错误”,你知道他指的是什么意思么?404其实是Http报头所包含的一个“状态码”,表明该Http请求失败。那么除此之外,还有哪些常用的状态码呢?这些状态码和SEO又有什么关系呢?
每次当用户代理(可以理解为就是IE和Firefox)向Web站点请求一个URL地址,服务器都会给予回复,回复内容包括两部分:HTTP报头,和被请求的内容。但仅从浏览器上我们通常只能看到内容而看不到报头信息。所以,我们需要通过一些浏览器插件来观察他们。就我个人而言,IE我用WebDeveloper;FireFox我用Fiddler。有兴趣的朋友可以在网上自行下载,两个都是相当流行的。
对SEO而言,我们需要了解的状态代码有:
重定向:301和302
被删除:404
服务器错误:500
我们依次讲解,首先将302。302在asp.net中有一个很常见的原型:Response.Redirect(),请看代码:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("~/target.aspx");
//Server.Transfer("~/target.aspx");
}
source.aspx页面上一个Button,Click事件中代码为Response.Redirect(~/target.aspx),点击source.aspx页面Button,查看该页面对应的状态码,结果就是302。(如下图,我使用的是Web Development,不知道为什么enable log之后,就无法再转到target页面了?各位同学知道原因的请指点一二)
但可以查看详细信息,可以发现302的影响,response指明了要转向的url。
客户端/服务器之间往返的过程其实是这样的:
1. 点击Button,产生回发,回发的目标页面仍然是source.aspx,所以请求仍由source.aspx页面进行处理,这样才能进入source.aspx页面的Click事件;
2. Click事件中,Response.Redirect(~/target.aspx)所作的事情实际上就是:
2.1 将回复中Http报头的状态码改成302;
2.1 指明302指向的页面就是target.aspx;
3. 浏览器(用户代理)收到回复的报头信息后,
3.1 将URL地址栏的地址改成target.aspx;
3.2 向target.aspx发出请求
和Response.Redirect()同样著名的是Server.Transfer()。但使用Server.Transfer,你会发现,页面对应的状态码是200,且地址栏的url并不会发生改变,仍然是source.aspx!这是因为Server.Transfer是完全在服务器端进行跳转的。所以一种很流行但我觉得不那么正确的说法就是:应当使用Server.Transfer()而不是Response.Redirect()来提高性能。因为在得到Server.Transfer()性能提升的同时,你应该权衡:性能的提高,和由此产生的代价。很难直接给出一个答案,这需要依靠具体的情景来做判断。但我倾向于尽量不使用Server.Transfer(),因为:1. 性能提升不大,节约的其实就是报头信息的往返;2. 清晰的URL无论对于终端用户,还是开发调试,都有很重要的作用。
好了,理解了302,301也就好办了。302意味着重定向是暂时的,而301则是永久的重定向。
文章评论 本文章有个评论