Redirect 的概念

通过 url 访问某个路径请求资源时,发现资源不在 url 所指定的位置,这时服务器要告诉浏览器,新的资源地址,浏览器再重新请求新的 url,从而拿到资源。

若服务器指定了某个资源的地址,现在需要更换地址,不应该立刻废弃掉 url,如果废弃掉可能直接返回 404,这时应该告诉客户端新的资源地址。

Redirect 的使用

启动服务器 node server.js,localhost:8888 访问

访问时,发现 url 变成了 localhost:8888/new 了,并显示了 /new 路由下的内容

// server.js
const http = require('http')http.createServer(function (request, response) {console.log('request come', request.url)if (request.url === '/') {response.writeHead(302, {  // or 301'Location': '/new' // 这里是同域跳转,只需要写路由})response.end()}if (request.url === '/new') {response.writeHead(200, {'Content-Type': 'text/html',})response.end('<div>this is content</div>')}
}).listen(8888)console.log('server listening on 8888')

查看network localhost

请求发现是302后,浏览器自动根据响应头中的 Location 路径进行跳转。

General
Status Code: 302 Found (from disk cache)Request Headers
Location: /new

Redirect 301 和 302 的区别

302 临时跳转,每次请求仍然需要经过服务端指定跳转地址

301 永久跳转

301的情况

每次访问 locahost:8888,都要经过服务端跳转,服务端通过 console.log 可以看到 / /new 两次请求。

const http = require('http')http.createServer(function (request, response) {console.log('request come', request.url)if (request.url === '/') {response.writeHead(302, {  'Location': '/new' })response.end()}if (request.url === '/new') {response.writeHead(200, {'Content-Type': 'text/html',})response.end('<div>this is content</div>')}
}).listen(8888)console.log('server listening on 8888')

301 的情况

访问 locahost:8888,第一次经过服务端跳转,服务端通过 console.log 可以看到 / /new 两次请求;第二次 服务端 console.log 只显示 /new ,没有再次经过服务器指定新的 Location

response.writeHead(301, {'Location': '/new'})

注意:使用 301 要慎重,一旦使用,服务端更改路由设置,用户如果不清理浏览器缓存,就会一直重定向。

设置了 301,locahost 会从缓存中读取,并且这个缓存会保留到浏览器,当我们访问 8888 都会进行跳转。此时,就算服务端改变设置也是没有用的,浏览器还是会从缓存中读取。

http之Redirect相关推荐

  1. render函数和redirect函数的区别+反向解析

    render函数和redirect函数的区别+反向解析 1.视图函数:一定是要包含两个对象的(render源码里面有HttpResponse对象)   request对象:----->所有的请求 ...

  2. Response.Redirect 打开新窗体的两种方法

    普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...

  3. c:redirect标签的使用

    <c:redirect>标签的使用代码例子 redirect.jsp <%@ page contentType="text/html" pageEncoding= ...

  4. Flask中的重定向redirect和url_for

    1.关于redirect和url_for先举个例子: (1).redirect: #重定向 302 #redirect:重定向URL #url_for:重定向函数 from flask import ...

  5. ICMP重定向(ICMP Redirect)

     网络中的路由器通过相互之间的共同努力,将用户的数据包转发到目的地.通常情况下,主机都会将去往远程网络的数据包发送到路由器,路由器再尽最大努力转发数据.但是在某些情况下,收到数据包的路由器可能并不是去 ...

  6. redirect和forward的区别

    异同 1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以 ...

  7. forward和redirect的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.从地址栏显示来说  forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把 ...

  8. Response.Redirect 打开新窗口的两种方法

    一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...

  9. 使用Response.Redirect 两种方法打开一个新窗口

    普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...

  10. asp.net 在使用Response.Redirect try{}catch{}块失效

    try { - Response.Redirect("/mymaimai.aspx"); - } catch (Exception e) { // 异常处理 } 使用以上语句,不管 ...

最新文章

  1. TestNG学习随笔
  2. 前瞻:在 Java 16 中会带来哪些新特性?
  3. 园内ORM讨论的经典文章及评论[转]
  4. 【2015沈阳现场A】
  5. 【力荐】Select查询语句中LIKE关键词的优化方法分析
  6. redis源码剖析(十五)——客户端思维导图整理
  7. c# 对COM+对象反射调用时地址参数处理 c# 对COM+对象反射调用时地址参数处理
  8. tplink软件升级有用吗_如何升级路由器教程:TPLink刷DDWRT更新固件
  9. UI设计师必备的技能|找灵感
  10. c语言中去掉最小值,2020-07-12(C语言)从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。...
  11. 数据结构 —— 递归和树
  12. 安卓手机的APP图标尺寸规范和图标命名规范
  13. 吸粉神器——维盟智慧wifi,微信粉丝生产基地!
  14. 【巨杉数据库SequoiaDB】24 Hours , 数据库研发实录
  15. UpdateData() 函数
  16. CVPR 2020 | 旷视研究院探究优化场景文字识别的「词汇依赖」问题
  17. Win7、Win10系统封装后GHO文件太大?是因为虚拟内存没关、休眠文件没删!
  18. ChatGPT进化的秘密
  19. Java面向对象之子类方法重写
  20. 开源应用程序打包工具

热门文章

  1. SpringMVC转发与重定向的区别
  2. 中国电子驻车制动器行业市场研究与投资预测
  3. 计算机专硕报广东选调,【广东选调生】千万别考选调生?选调生是个大坑?
  4. websocket实现聊天室应用,包括文字和图片上传
  5. Python爬虫: 用urllib2+beautifulsoup写的抓取网页内容的示例
  6. 移动磁盘显示参数错误要怎么办啊
  7. 生活中我们的那些疑惑
  8. 技术指南 | 如何集成Perforce版本控制系统Helix Core (P4V) 与敏捷规划工具Hansoft
  9. 没什么卵用的 ICN 论文
  10. 新冠肺炎疫情引发空前应用需求,Dynatrace助企业轻松应对