草庐IT

javascript - 如果单击超链接,使浏览器提交额外的 HTTP header

coder 2024-05-10 原文

如果用户点击链接,有没有办法让网络浏览器提交额外的 HTTP header ?

背景:在我们的环境中,每个 http 请求在服务器端都有一个唯一的 ID。见 https://serverfault.com/questions/797609/apache-x-request-id-like-in-heroku

如果您的 Web 应用程序收到一个 http 请求,我想知道之前的页面是哪个页面。 http 引荐来源网址是不够的,因为用户可以在他的浏览器中使用多个选项卡。

我想避免将丑陋的请求 ID 放入从浏览器发送到服务器的每个 GET 请求中。到目前为止,我们的 URL 都很好。

我更喜欢的解决方案是一些 JavaScript 魔法,它将当前页面的请求 ID 添加到下一个 http 请求中。

详细步骤:

  1. 浏览器访问 URL http://example.com/search
  2. Web 服务器收到请求 ID 为 123 的 http 请求
  3. 网络服务器将 URL 的内容发送到浏览器(搜索页面)。该页面在某处包含请求 ID 123
  4. 用户搜索“foobar”。
  5. Web 浏览器向服务器提交一个 http 请求,并以某种方式包含先前的请求 ID。
  6. 网络服务器接收到第二个 http 请求(ID 456)并且可以以某种方式访问​​第一个请求(ID 123)的值。
  7. Web 服务器可以将关系“123 --> 456”存储在数据库中以供以后分析。

我的目标是跟踪关系“123 --> 456”。以上解决方案只是达到目标的策略。欢迎使用其他策略。

我们使用网络框架django。但是 AFAIK 这在这种情况下确实很重要。

用户可以在他的浏览器中使用多个标签

我详细说明了匹配解决方案的含义。来自一个用户的请求序列不能解决问题。

一次使用多个标签:

  1. 用户查看tab1中的页面A
  2. 用户在tab2中查看页面B
  3. 用户通过页面 A 上的链接到达页面 C
  4. 用户通过页面 C 上的链接到达页面 D
  5. 用户通过页面 B (tab2) 上的链接进入页面 E。

我想知道看到两个序列:

A -> C -> D

B -> E

最佳答案

这里唯一的现代“理智”选项是使用 ServiceWorker。

ServiceWorker 可以拦截针对您控制的域的 HTTP 请求,并用更多 header 对其进行修饰。

ServiceWorker 在浏览器选项卡的“外部”工作,如果在同一个网站上打开多个选项卡,则所有这些选项卡都将使用同一个 ServiceWorker。

有关如何完成此操作的完整教程对于这个答案框来说肯定太多了,但是拦截和处理 HTTP 请求是一个很大的用例,因此场外资源通常将此作为示例。

我会说这是个坏主意。如果你认为你需要这个,也许你可以用不同的方式处理它。执行此操作的常见方法可能是改用 cookie。

关于javascript - 如果单击超链接,使浏览器提交额外的 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51721904/

有关javascript - 如果单击超链接,使浏览器提交额外的 HTTP header的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  3. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  4. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  5. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  6. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  7. ruby-on-rails - Ruby 中意外的大小写行为 - 2

    我在一段非常简单的代码(如我所想)中得到了一个错误的值:org=4caseorgwhenorg=4val='H'endputsval=>nil请不要生气,我希望我错过了一些非常明显的东西,但我真的想不通。谢谢。 最佳答案 这是典型的Ruby错误。case有两种被调用的方法,一种是你传递一个东西作为分支的基础,另一种是你不传递的东西。如果您确实在case中指定了一个表达式语句然后评估所有其他条件并与===进行比较.在这种情况下org评估为false和org===false显然不是真的。所有其他情况也是如此,它们要么是真的,要么是假的。

  8. ruby - 如果它是标点符号,我怎么能从字符串中删除最后一个字符,在 ruby​​ 中? - 2

    啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组

  9. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  10. ruby - 使用 Watir 检查错误链接 - 2

    我有一个未排序的链接列表,我将其保存在旁边,我想单击每个链接并确保它转到真实页面而不是404、500等。问题是我不知道该怎么做。是否有一些我可以检查的对象会给我http状态代码或任何东西?mylinks=Browser.ul(:id,'my_ul_id').linksmylinks.eachdo|link|link.click#needtocheckfora200statusorsomethinghere!how?Browser.backend 最佳答案 我的回答与铁皮人的想法类似。require'net/http'require'

随机推荐