【发布时间】: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请求标头,否则如果没有服务器将值回显到浏览器,该标头将不可用。 -
@CJDennis 您是否要发出
HEAD或OPTIONS请求Why does Fetch API Send the first PUT request as OPTIONS、stackoverflow.com/questions/42311018/…? -
没有收集你想要达到的目标?要求是什么?
-
好的,现在你能告诉我们当它来自一个真实的服务器时你是如何得到这个头的吗?对
about:blank甚至data:text/plain,的虚拟请求是否有效?此外,您的问题将受益于 edit 准确说明您要实现的目标和原因(例如“我想在不使用服务器的情况下获取 Accept Languages 请求标头”)而不是当前的废话。
标签: javascript http browser