【问题标题】:Can a browser make an HTTP request to itself?浏览器可以向自己发出 HTTP 请求吗?
【发布时间】:2018-01-18 04:51:57
【问题描述】:

从浏览器到外部地址(即浏览器外部,即使它是 localhost)使用 AJAX 很容易,但我有一个不同的问题。

是否有某种对象或服务允许浏览器向自身发出(或模拟)HTTP 请求,例如来自 JavaScript?

例如从 Firefox 我可以看到以下原始请求:

GET /headers.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

并且通过使用 PHP 脚本(GET 请求中的上述 headers.php):

<pre>
<?php
print_r(apache_request_headers ());

我可以在页面上看到以下内容:

[Content-Type] => 
[Content-Length] => 0
[Upgrade-Insecure-Requests] => 1
[User-Agent] => Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0
[Host] => localhost
[Accept-Language] => en-GB,en;q=0.5
[Accept-Encoding] => gzip, deflate
[Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[Connection] => keep-alive
[Cache-Control] => max-age=0

我可以通过 JavaScript 获得相同的信息,而无需调用服务器脚本吗?

【问题讨论】:

  • 你说的“对自己”是什么意思 你想到的用例是什么?就像那样,我真的看不到浏览器确实提供了您可以请求的服务......也许是 UserAgent 样式表?
  • @Kaiido 用例:发出虚假请求,获取 Accept-Languages 请求标头,否则如果没有服务器将值回显到浏览器,该标头将不可用。
  • 没有收集你想要达到的目标?要求是什么?
  • 好的,现在你能告诉我们当它来自一个真实的服务器时你是如何得到这个头的吗?对about:blank 甚至data:text/plain, 的虚拟请求是否有效?此外,您的问题将受益于 edit 准确说明您要实现的目标和原因(例如“我想在不使用服务器的情况下获取 Accept Languages 请求标头”)而不是当前的废话。

标签: javascript http browser


【解决方案1】:

您可以请求Blob URLdata URI 请参阅Does Stack Overflow have an "echo page" to test AJAX requests, inside a code snippet?,或使用ServiceWorker 为特定的Response Chrome extension: Block page items before access 提供服务。传递给 XMLHttpRequest.open()fetch() 的空字符串请求当前 URL。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2018-01-14
    • 2014-03-25
    • 2011-08-21
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多