使用hashHistory时,因为有 # 的存在,浏览器不会发送request,react-router 自己根据 url 去 render 相应的模块。...app.get('*', (req, res) => { ... }),使用了 nginx 的话,nginx也要做相应的配置。...首先 browserHistory 其实使用的是 HTML5 的 History API,浏览器提供相应的接口来修改浏览器的历史记录;而 hashHistory 是通过改变地址后面的 hash 来改变浏览器的历史记录...但 react-router 通过 polyfill 实现了此功能,具体实现没有看,好像是使用 sessionStorage。...而 History API 需要服务端支持,这样服务端能获取请求细节。 还有一个原因是因为有些应该会忽略 URL 中的 hash 部分,记得之前将 URL 使用微信分享时会丢失 hash 部分。
三、软件的安装方式 在Linux CentOS系统中,软件的管理方式有三种:rpm、yum、编译方式。...all,所有 ②卸载 #rpm -e 软件包全称 [--nodeps] (卸载软件,包的全称需要通过①去查询) 选项说明: -e:卸载 --nodeps:忽略依赖关系 ③安装 #rpm -...浏览器。...需要将下载地址在终端中输入,进行下载: #cd /usr/local/src #wget https://nginx.org/download/nginx-1.15.5.tar.gz ?...配置包含:指定安装的位置、需要的模块功能 指定位置使用:–prefix选项 例如:–prefix=/usr/local/nginx # .
liveServer.settings.CustomBrowser:更改系统的默认浏览器。 不够?需要更多?在github上打开一个issue / pull请求。...铬 chrome:私人模式 火狐 firefox:私人模式 微软边缘 大盘 默认值为 null [字符串,不是null]。(它将打开系统的默认浏览器。)...Debugger for Chrome扩展程序将调试功能注入到浏览器窗口的运行实例中。 默认值为false。...您可以通过将此设置设置为来更改此行为true。 默认: false liveServer.settings.wait::在实时重新加载之前延迟。以毫秒为单位的值。...平台 GitHub忽略目录 测试目录,数字是变更点.有九个 我们打开一个ts文件,虽然没有学过但是还是可以理解个大概 这个文件时扩展文件的测试文件 这没有什么好说的 这边这个东西,在vscode的文档里面也有
使用浏览器访问网页时,如果网址URL中带有hash,页面就会定位到id(或者name)与hash值一样的元素的位置; hash还有一个另一个特点,hash的改变不会使页面重新加载; 浏览器不会把hash...但是在低版本浏览器中并不兼容hashchange事件,需要通过轮询监听url的变化,来检测hash的变化,下面是一段魔力的代码: (function(window) { // 如果浏览器不支持原生实现的事件...在history中跳转 // 在history中向后跳转,与用户点击浏览器的回退按钮效果相同 window.history.back(); // 在history中向前跳转,与用户点击浏览器的前进按钮效果相同...window.history.forward(); // 跳转到history中指定的一个点 windiw.history.go(); 用go()方法载入到会话历史中的某一个特定页面,通过与当前页面相对位置来标记...下面来总结一下: hash方式:js通过hashChange事件来监听url的改变,浏览器兼容性较好,但是IE7及以下需要使用轮询方式; history API:url看起来像普通网站那样,以"/"分割
它使用浏览器中的 History API 用于处理 URL,创建一个像example.com/some/path这样真实的 URL 。 服务器配置 服务器需要做好处理 URL 的准备。...,请使用 try_files 指令: server { ....../index.html [L] IE8, IE9 支持情况 如果我们能使用浏览器自带的 window.history API,那么我们的特性就可以被浏览器所检测到。...当一个 history 通过应用程序的 push 或 replace 跳转时,它可以在新的 location 中存储 “location state” 而不显示在 URL 中,这就像是在一个 HTML...在 DOM API 中,这些 hash history 通过 window.location.hash = newHash 很简单地被用于跳转,且不用存储它们的location state。
安装 【卸载nginx】 在介绍如何安装nginx之前,先要介绍如何卸载nginx。因为nginx不正确的安装,导致无法正常运行,所以需要卸载nginx。...使用location指令来实现URI匹配 location = / { # 完全匹配 = # 大小写敏感 ~ # 忽略大小写 ~* } location ^~ /images/...gzip配置在nginx.conf文件中已经存在,只不过默认是注释的状态,只需将注释符号去掉即可 ## # Gzip Settings ## gzip on; gzip_disable...它的实现和执行全部由浏览器完成,开发者只需提供配置 目前,CSP有如下指令 指令 指令值示例 说明 default-src 'self' cnd.a.com 定义针对所有类型(js...,重启nginx服务 sudo nginx -s reload 后端项目 下面来部署后端的nodejs项目,在/etc/nginx/conf.d目录下新建文件,该项目占用3000端口,则起名为api-xiaohuochai-cc
pid /usr/local/var/run/nginx/nginx.pid; # pid 来指定进程id的存储文件位置。...server下具有全局性例如root,当然也可以在location中重新定义root。...location指令实现Nginx对动、静态网页进行过滤处理。...在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态,常用的状态有: down表示当前的server暂时不参与负载均衡...注:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
安装 【卸载nginx】 在介绍如何安装nginx之前,先要介绍如何卸载nginx。因为nginx不正确的安装,导致无法正常运行,所以需要卸载nginx。...使用location指令来实现URI匹配 location = / { # 完全匹配 = # 大小写敏感 ~ # 忽略大小写 ~* } location ^~...gzip配置在nginx.conf文件中已经存在,只不过默认是注释的状态,只需将注释符号去掉即可 ## # Gzip Settings ## gzip on; gzip_disable...它的实现和执行全部由浏览器完成,开发者只需提供配置 目前,CSP有如下指令 指令 指令值示例 说明 default-src 'self' cnd.a.com 定义针对所有类型(js...后端项目 下面来部署后端的nodejs项目,在/etc/nginx/conf.d目录下新建文件,该项目占用3000端口,则起名为api-xiaohuochai-cc-3000.conf upstream
而这些HTTP响应头在我们部署 Nginx 的时候经常会被忽略掉,个人感觉这是一个比较严重的“疏忽”,加上还是很有必要的,如果有条件最好是部署一个适合自己站点的X-Content-Security-Policy...,遮挡网页原有位置的含义; X-Frame-Options响应头 X-Frame-Options HTTP 响应头是微软提出来的一个HTTP响应头,主要用来给浏览器指示允许一个页面可否在 在Nginx里通过下面这个响应头可以禁用浏览器的类型猜测行为: # X-Content-Type-Options HTTP 消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type...Chrome 扩展已经引入了 CSP,通过 manifest.json 中的 content_security_policy 字段来定义。一些现代浏览器也支持通过响应头来定义 CSP。...在接下来的一年中,如果 example.com 服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问网站。 HSTS可以用来抵御SSL剥离攻击。
: 基于react-router,加入了在浏览器运行环境下的一些功能。...BrowserRouter 常规URL HashRouter 将当前位置存储在URL的哈希部分中,因此URL总会有个#井号,新建的项目大部分是使用这种路由器的。...1.hashHistory 路由将通过URL的hash部分(#)切换,URL的形式类似example.com/#/some/path import { hashHistory } from 'react-router...Hash完成了,而显示正常的路径example.com/some/path,背后调用的是浏览器的History API。...它创建一个内存中的history对象,不与浏览器URL互动 const history = createMemoryHistory(location)
2 title:新页面的标题,但是所有浏览器目前都忽略这个值,可填 null。 3 path:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个地址。...这里我们参考的history-4.7.2版本,最新版本中api可能有些出入,但是原理都是一样的,在解析history过程中,我们重点关注setState ,push ,handlePopState,listen...window.history.pushState方法改变浏览器当前路由(即当前的path),最后通过setState方法通知React-Router更新,并传递当前的location对象,由于这次url...如果有,它们将在 //在子组件身上激活,我们可能会 //在安装之前获取一个新位置。 this._isMounted = false; this....使得我们可以在页面组件中的props中获取location ,match等信息。 4 Redirect-没有符合的路由,那么重定向 重定向组件, 如果来路由匹配上,会重定向对应的路由。
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 frame 标签 或者 object 标签中展现的标记。...DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。...ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示。...如果检测到跨站脚本攻击,浏览器将清除页面并使用 CSP report-uri 指令的功能发送违规报告。...浏览器可以拒绝任何不来自预定义位置的任何内容,从而防止外部注入的脚本和其他此类恶意内容。
前端在本地启了个Node服务器,后端在本地启了个Django服务器,分别使用8080和8000端口。浏览器有个同源策略:域名、端口、协议三者一致才能进行访问,否则会由于跨域访问而被浏览器拦截。...相比于本地运行,Nginx部署时,前端变化比较大,一:dist静态文件拷贝到了/usr/share/nginx/html目录中,二:对/路径来说,Nginx会监听80端口,三:对/api路径来说,Nginx...COPY分别把dist静态文件和nginx.conf配置文件拷贝到镜像中,COPY指令第一个参数是本机目录,第二个参数是镜像目录。...有点区别,RUN指令在docker build时就执行,CMD指令在docker run时才执行,预定义启动命令。...使用命令行编辑工具vi或者图形编辑工具gedit编辑teprunner-frontend/deploy/nginx.conf文件中/api转发地址为你的虚拟机实际IP地址: ?
美国计算机紧急响应小组(CERT)披露(9月27日补充:中国研究者xiaofeng zheng发现了这个安全问题,美国专业安全媒体thehacknews不知何因在报道中忽略了该研究人员的名字,FreeBuf...已做补充),所有的主要浏览器厂商不恰当地实现了RFC 6265标准,也称为“浏览器Cookie”,这使得远程攻击者能够绕过安全的HTTPS协议,并能够泄露秘密的私人会话数据。...然而,研究人员发现,一些主要的Web浏览器通过HTTPS接受Cookie,甚至没有验证HTTPS Cookie的来源(Cookie forcing),这使得在明文传输的HTTP浏览会话中,处于中间人攻击位置的攻击者将注入...现在,这个恶意的HTTPS Cookie由攻击者控制,因此他能够拦截和抓取私人会话信息。 影响范围 在8月份华盛顿举办的第24届USENIX安全研讨会上,该问题首次被披露。...此外,受影响的主流Web浏览器包括以下浏览器的早期版本: 1、苹果的Safari 2、Mozilla的Firefox 3、谷歌的Chrome 4、微软的IE浏览器 5、微软的Edge 6、Opera 然而
node sudo ln -s /usr/local/bin/npm /usr/bin/npm sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf 通过指令查看...在 mongo shell 中创建管理员及数据库。...开启 ngnx 代理 进入到目录位置 cd /usr/local/nginx 在 nginx 目录下有一个 sbin 目录,sbin 目录下有一个 nginx 可执行程序。 ....,发现浏览器出现 404 。...刷新页面时访问的资源在服务端找不到,因为 react-router 设置的路径不是真实存在的路径。 所以那样设置是为了可以刷新还可以打到对应的路径的。
/xyz" 下面的样式表使用示例中使用的一个常见的相对URL,其中link元素使用相对URL引用"style.css",具体被引用的文件取决于您在站点目录结构中的位置,它将基于该位置加载样式表,例如:如果您当前在一个名为...页面时所使用的样式,CSS规范规定了在某些情况下user agents必须忽略非法样式表的一部分,这也意味着user agents在解析非法部分时除非是明确匹配到了开始和结束,否则予以忽略,简单来说就是仅解析其中格式正确完整的部分.../RPO/index.php Step 4:接下来浏览器的工作就是根据URL的路径处理index.php中引用的使用相对地址的脚本,可是万万没想到浏览器它并不认识..%2f,于是URL在它眼里依旧是最初的模样...test目录下的a.js被成功加载 按JS解析内容 通过上面的了解我们可以发现一点就是我们在利用RPO时所有的资源文件都是在服务器端一早就已经有了的,而我们要想通过RPO实现XSS攻击那么就必须得再页面中引入我们的攻击脚本...HTML,然后使用@import语句在IE上工作得很好,尽管从技术上讲以这种方式使用import语句是无效的语法,当然RPO也并不限于IE,我们可以在其他浏览器上使用该技术,但Chrome、Firefox
相反,SessionStorage 中的值会在浏览器会话结束时被销毁,这通常是在浏览器窗口关闭时。 不过有一个例外。...此外,由于浏览器的“会话恢复”功能不会重新打开私有模式会话,因此在浏览器窗口关闭后,在 SessionStorage 中创建的任何内容也将丢失。...实际上,简而言之,在隐私浏览会话期间放入 Local 或 SessionStorage 的任何数据都会在浏览器窗口关闭(有意或无意)后立即丢失。 4....幸运的是,高级浏览器对 LocalStorage 的支持非常好。它在 IE8+ (!)、Firefox 3.5+ 和 Chrome 4+ 中原生可用。...通过包装 userData API,现代 HTML5 应用程序可以处理 polyfill LocalStorage 一直到 IE6(或 IE5,技术上)。
://www.example.com/index.html#print即代表example的index.html的print位置,浏览器读取这个URL后,会自动将print位置滚动至可视区域,通常使用通过window.location.hash属性能够读取锚点位置,可以为Hash的改变添加hashchange监听事件,每一次改变Hash,都会在浏览器的访问历史中增加一个记录,此外Hash虽然出现在URL...中,但不会被包括在HTTP请求中,即#及之后的字符不会被发送到服务端进行资源或数据的请求,其是用来指导浏览器动作的,对服务器端没有效果,因此改变Hash不会重新加载页面。...页面的跳转是不互相关联的,ReactRouter在Link中通过history库的push调用了HTML5 history的pushState,但是这仅仅会让路由变化,其他什么都没有改变。...在Router中的listen,它会监听路由的变化,然后通过context更新props和nextContext让下层的Route去重新匹配,完成需要渲染部分的更新。
ES6语法大部分浏览器还不完全支持,有些浏览器完全不支持。而less、sass这些样式框架就更不用说了。另外对这些代码最好进行压缩,以获得更快的访问速度。所以在正式发布这些代码前必须先要编译打包。...服务器设置 如果我们在使用react-router的时候选择了浏览器历史管理方式,那么服务器必须要能够正确处理各种路径。...实际上我们的应用只有一个页面文件,在访问各种有效路径的时候,服务都应该返回那唯一的页面。在开发过程中,我们通过npm start指令启动了一个node服务,它已经处理好了这些路由。...但是在实际生产环境中,我们往往会使用一个静态服务器,比如nginx或apache。...如果把刚才打包好的dist目录扔给nginx,你会发现只有根路径可以访问,通过点击跳转到各个路由没问题(也就是通过react-router控制的跳转),要直接在浏览器的地址栏输入"http://localhost
它拥有简单的 API 与强大的功能例如代码缓冲加载、动态路由匹配、以及建立正确的位置过渡处理。...它使用浏览器中的 History API 用于处理 URL,创建一个像example.com/some/path这样真实的 URL 。 真实路由需要服务器也进行相应的配置。...state” 而不显示在 URL 中,这就像是在一个 HTML 中 post 的表单数据。...在 DOM API 中,这些 hash history 通过 window.location.hash = newHash 很简单地被用于跳转,且不用存储它们的location state。...这种设计思路与 Nestjs 的描述性路由具有相同的思想 - 在 nodejs 中,我们可以通过装饰器,在任意一个 Action 上描述其访问的 URL: @POST("/api/service") async