ruby-on-rails - 使用 Rails 5.2 和 Turbolinks、Webpacker 和 Angular 6 获取重复页面
问题描述
我在 Rails 中有一个运行 Angular 6 应用程序的联系页面,
<% content_for :content_title, "Contact Us" %>
<% content_for :metatags do %>
<!-- This is to get rid of "Zone already loaded error" from a combination of Angular and Turbolinks' doing-->
<meta name="turbolinks-visit-control" content="reload">
<% end %>
<% content_for :scripts do %>
<%= javascript_pack_tag 'contact',
"data-turbolinks-track": "reload" %>
<% end %>
<%= render "pages/layout" do %>
<% content_for :title, "Contact Us" %>
<div class="divider"></div>
<div class="container" style="max-width: 800px;">
<div class="section">
<div class="card-panel">
<contact>Loading...</contact>
</div>
</div>
</div>
<% end %>
从表面上看,一切都按预期工作,但我观察到以下行为,
- 从不运行 Angular 应用程序的其他页面(例如 home 到 about),一切都按预期工作,
- 直接登陆 /contact(在浏览器中输入 localhost:3000/contact 并按回车键)按预期工作,
然而,
从其他页面导航到 /contact 会导致对 /contact 的两个请求,
从 /contact 导航到根路径 / 会导致对 / 的两个请求,
后续请求再次正常。
我确定这与 turbolinks 有关,但我对它的理解还不够,无法准确指出这里发生了什么。
添加 data-turbolinks="false" 解决了对 /contact 的重复请求的问题,但是由于导航离开 /contact 而导致的重复请求仍然存在。
<%= link_to "Contact", contact_path, data: { turbolinks: false } %>
一个额外的观察,这是关于“接受”标题的。对于正常的单个请求,“Accept”标头是,
"accept": text/html, application/xhtml+xml
对于重复的请求,第一个标头是,
"accept": text/html, application/xhtml+xml
第二个标题是,
"accept": text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
如果有人能告诉我这里发生了什么,我将不胜感激。这种行为在 Chrome 和 Safari 上都可以观察到,并且在 Heroku 上的生产版本中也可以观察到,因此它不仅限于开发设置。
解决方案
推荐阅读
- python - 如何在 python 中为大型 spark 数据帧计算 kendall 的 tau?
- terraform - 如何避免在 Terraform 中重复变量?
- sql-server - 报告运行缓慢,需要步骤我应该检查以使其更快。关于故障排除代码的任何想法
- python - 生成器和 lambda 函数列表:所有函数都被最后一个函数覆盖
- java - 如何通过Querydsl为UUID编写LIKE条件以查找匹配前缀的值?
- java - 正则表达式与 antMatcher URL 模式不匹配
- logstash - 需要帮助 - logstash 因 OOM 错误而崩溃
- java - 调出带有多个 git url 的 spring-cloud-config-server 组件
- javascript - 如何在 JavaScript 中将引号括在 div 中
- apache - 为主页提供静态 html,否则提供给 index.php