HTTP 对Location跳转方式的特殊处理

我们知道,某些情况下由于网站迁移,权限,页面错误时我们可能需要跳转页面到错误页面,如

1.HTTP/1.1 404 Not Found

2.HTTP/1.1 301 Moved Permanently

3.HTTP/1.1 302 Moved Temporarily

但是我们发送响应码只是一种状态机制,因此往往我们需要选择合适的跳转方式,Location跳转是一种常见的方式,特别对于做SEO的同学来说

下面我们通过php语言来说明(结果与编程语言无关)

index.php

<?php
header(‘HTTP/1.1 301 Moved Permanently‘); 
Header( "Location: http://localhost/test/result.php" ); 
exit();

result.php

<?php
$arr = [];

$arr[‘name‘] = ‘zhangsan‘;
$arr[‘age‘] = 20;
echo json_encode($arr);

?>

当我们访问index.php时,发生了如下转换

Request-1

GET /test/ HTTP/1.1
Host: localhost
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36
Content-Type: text/plain; charset=utf-8
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

RedirectTo

HTTP/1.1 301 Moved Permanently
Date: Sun, 30 Aug 2015 09:59:14 GMT
Server: Apache/2.4.9 (Win32) PHP/5.5.12
X-Powered-By: PHP/5.5.12
Location: http://localhost/test/result.php
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

Request-2

GET /test/ HTTP/1.1
Host: localhost
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36
Content-Type: text/plain; charset=utf-8
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

responseTo

HTTP/1.1 200 OK
Date: Sun, 30 Aug 2015 09:59:14 GMT
Server: Apache/2.4.9 (Win32) PHP/5.5.12
X-Powered-By: PHP/5.5.12
Content-Length: 28
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html

响应体

{"name":"zhangsan","age":20}

总结:

在这个过程中Request-1与Request-2相同,也就是说Location在跳转的时候同样将请求进行了转发,在这一过程中,一个请求被传递了2次,跳转的过程中并未改变客户端连接,整个过程是完整的,所以Location使得http请求过程具有完整性和连续性

使用方向:

1.SEO优化,固定重定向

2.请求转发跳转

3.权限检测,拦截,重要文件下载(先判断权限,然后跳转到文件链接,类似某视频网站的)

时间: 2024-10-14 07:02:09

HTTP 对Location跳转方式的特殊处理的相关文章

jsp中几种跳转方式和参数共享

整理了一下jsp入门中的跳转和数据共享问题,写成这篇博文希望对大家有帮助,参考文章列在后面: 常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用javascript完成,属于客户端跳转 (3)提交表单完成跳转,属于客户端跳转 (4)使用response对象,属于客户端跳转 (5)使用requestDispatcher类,属于服务器跳转 下面一一来看 (1)href超链接标记 这个比较简单,通常写到a标签里即可,来完成指定位置的动态跳转比较方便 代码:<a href=

URI跳转方式地图导航的代码实践

本文转载至 http://adad184.com/2015/08/11/practice-in-mapview-navigation-with-URI/ 前言 之前介绍了我正在做的是一款定位主打的应用 然后最近我们需要做一个定位导航的功能 能够让用户从当前位置导航到指定目的地(默认以驾车的方式导航) 手机上的导航方式 分应用内导航和应用外导航 应用内导航是指使用地图服务提供的SDK(比如高德,百度等等) 直接将导航功能嵌入到我们自己的APP内部但是这个方案我个人不喜欢 一是接入要一定的时间 二是

(转)JSP三种页面跳转方式的比较

使用JSP大约有下列三种跳转方式: 1. response.sendRedirect(); 2. response.setHeader("Location",""); 3. <jsp:forward page="" /> 经过试验得到下面的一些规则: 一. response.sendRedirect() 此语句前不允许有out.flush(),如果有out.flush(),会有异常: java.lang.IllegalStateExc

页面跳转方式的总结

个人经常用到的页面跳转方式: 凡是js用到的跳转方式,php基本都可以用 1.通过js自身的window.open打开非模态窗口 top.window.open("alarm_add_con.php?wd_id=40&wd_name='hello'"); 关闭子窗口,并刷新父窗口,刷新父窗口不清除父窗口的临时变量 echo "<script>"; echo "opener.location.reload();"; //刷新父窗

JSP的几种跳转方式的异同

1 <jsp:foward page="url" /> 服务端跳转,立即跳转,后续语句不会执行: 2 <% response.sendRedirect("url"); %> 客户端跳转,重定向301方式,返回的response header中会有Location项.跳转前后续代码会继续执行,相当于把跳转动作委托设置于response header中. 3 在Servlet中:RequestDispatcher view = request.g

mui键盘收起、页面的跳转方式2

页面跳转方式一: mui.openWindow({ url : 'mspck.jsp?openid='+ data.openid + '&ddbh=' + data.ddbh, id : 'mspck.jsp' }); 页面跳转方式二: window.location.href = '<%=request.getContextPath() %>/orderAction/mspOrderingQuery2.action?openid='+ data.openid + '&ddbh

微笑小程序的几种跳转方式

微信小程序页面跳转 的几种方式 最近在做微信小程序,碰到页面跳转的问题,总结一下页面之间跳转的方式 一.wx.navigateTo(OBJECT) 这是最普遍的一种跳转方式,其官方解释为:"保留当前页面,跳转到应用内的某个页面" 类似于html中的 window.location.href=" "eg: wx.navigateTo({ url: 'test?id=1' })实际效果如下: 小程序中左上角有一个返回箭头,可返回上一个页面 也可以通过方法  wx.nav

django中web页面的跳转方式

web的页面跳转方式 转发(forward) 重定向(redirect) 转发 render 服务器默认的跳转方式是转发 转发的特点: 地址栏地址不会发生改变 一次请求 可以携带数据到模板中 只能在服务器内部进行转发 重定向 redirect 重定向的特点: 地址栏会发生改变 2次请求 不能够携带数据到模板 重定向可以重定向到一个外部请求上(如百度) 重定向发送2次请求的原因: 当用户发送请求到后台处理数据的时候,后台如果使用 redirect 做页面跳转的话: 那么服务器会响应一个特殊的头信息

JavaWeb学习——页面跳转方式

JavaWeb学习——页面跳转方式 摘要:本文主要学习了请求转发和响应重定向,以及两者之间的区别. 请求转发 相关方法 使用HttpServletRequest对象的 getRequestDispatcher(String path) 方法获取RequestDispatcher类型的转发器. 使用RequestDispatcher转发器的 forward(ServletRequest request, ServletResponse response) 方法进行转发. 实例 1 @Overrid