GVKun编程网logo

当我向应用程序(javascript 和 nodejs)中的端点发出请求时,在邮递员中指定原始标头没有任何作用

17

本文将带您了解关于当我向应用程序的新内容,同时我们还将为您解释javascript和nodejs中的端点发出请求时,在邮递员中指定原始标头没有任何作用的相关知识,另外,我们还将为您提供关于javasc

本文将带您了解关于当我向应用程序的新内容,同时我们还将为您解释javascript 和 nodejs中的端点发出请求时,在邮递员中指定原始标头没有任何作用的相关知识,另外,我们还将为您提供关于javascript – chrome开发工具“save”在调试node.js应用程序时不起作用、javascript – Node.js Web应用程序浏览器兼容性、javascript – NodeJS中的数组解析、javascript – NodeJS包括没有EJS的页眉和页脚的实用信息。

本文目录一览:

当我向应用程序(javascript 和 nodejs)中的端点发出请求时,在邮递员中指定原始标头没有任何作用

当我向应用程序(javascript 和 nodejs)中的端点发出请求时,在邮递员中指定原始标头没有任何作用

如何解决当我向应用程序(javascript 和 nodejs)中的端点发出请求时,在邮递员中指定原始标头没有任何作用?

我目前的服务器文件设置如下:

export default createServer = (container) => {
  const env = process.env.NODE_ENV
  const allowedOrigins = process.env.ALLOWED_ORIGINS || ''''
  const allowedOriginsArray = allowedOrigins.split(",").map(item => item.trim());

  const cors = Cors({
    origins: allowedOriginsArray,allowedHeaders: [
      ''access-control-allow-origin'',''authorization'',''Pragma'',''contact'',],exposeHeaders: []
  })
}

在这里,我将 origins 设置为来自我的 env 文件的字符串数组。 (我已经检查了 cors 文档页面,我相信可能有错别字,origins 应该是 origin。无论哪种方式,它似乎都没有区别)。

在我的邮递员请求中,只是为了测试它,我将 origins 标头设置为“http://www.test.com”(这不是我在 env 文件中拥有的可信来源之一)。请求在应该失败时成功。我想知道我是否在邮递员中错误地测试了这个,或者我的代码中的某些内容不正确。

解决方法

浏览器会强制执行同源政策,以阻止 Mallory 的邪恶网站向您的浏览器发送一些 JavaScript,这些 JavaScript 会向您的网上银行发出 Ajax 请求并将您的信用记录发送给 Mallory。

CORS 用于放宽同源策略(以便网站可以将您与它们共享的数据提供给某些受信任的其他网站)。

邮递员不是浏览器。您不使用它来访问网站。它不执行嵌入在这些网站中的 JS。 Mallory 不能告诉它发出 HTTP 请求。只有你能做到。 Postman 不需要执行同源策略,所以它不需要。

您可以使用 Postman 发出带有 Origin 标头的 HTTP 请求。然后,您的服务器可以发回适当的 Access-Control-Allow-Origin 标头。但是,Postman 除了在响应标头列表中显示它外,不会对它做任何事情。

当然不会放松同源政策,因为它首先没有强制执行。

,

请求在应该失败时成功。

这是对 Same Origin Policy 和 CORS 如何工作的误解。请求不应该失败,只是响应将包含或不包含浏览器可以用来确定是否授予对其中信息的访问权限的信息请求信息的来源。如果响应不允许请求它的源,浏览器会阻止源代码看到响应。

邮递员,不是浏览器,不会这样做(尤其是因为它没有测试响应的来源)。

您无法在服务器端可靠地强制执行此操作,因为恶意行为者只会向您的服务器发送他们认为您的服务器想要的内容。关键是服务器回复信息告诉浏览器谁可以访问该信息。

目标不是将服务器发回的信息保密(这就是 SSL 和身份验证的目的)。这是为了防止用户存储的身份验证信息或活动会话被用于使用用户凭据窃取信息。这是它的工作原理:

假设 Alice 上网到 B 银行支付帐单,并且在该会话处于活动状态时,她还会去检查某项费用并访问恶意站点 X 以了解情况。恶意站点 X 希望 Alice 恰好是银行 B 的客户,向银行 B 的网站发送请求(例如)Alice 的帐户信息。假设该请求是真实请求的完美模仿,因此银行 B 的网站很高兴返回信息 - 因为爱丽丝确实恰巧登录了银行 B 的网站。哦不!

这就是 SOP 的用武之地。浏览器知道 X 页面上的代码请求了信息,并且知道它从 B 银行的网站上请求了信息。因此,它会检查响应以查看响应是否明确表示“是的,可以与 X 共享此信息”。由于响应没有说明,浏览器阻止恶意站点 X 看到响应,并且他们窃取 Alice 信息的邪恶阴谋被挫败。

,

从你对另一个答案的评论来看,我认为你的想法倒退了; Postman 可以添加 Origin,因为 Postman 是一种“伪造”浏览器发送的 http 请求的工具,如果不具备添加 Origin 的能力会使 Postman 成为一个糟糕的伪造者。某些服务器可能会使用 Origin,而 Postman 能够发送 Origin 标头意味着无论服务器用它做什么,都可以进行测试。

总的来说,作为浏览器到服务器通信的 Origin 与 CORS 和 SOP 关系不大,它们是一种朝着“服务器到诚实浏览器”方向工作的安全性。在请求中包含 Origin 标头可能会导致服务器使用 CORS 标头进行响应,但您不应该硬链接这两个概念,因为 Origin 也可以为非 CORS 请求发送,并且 CORS 不会特别需要任何信息一个 Origin 标头以便工作

对于启用 CORS 的场景,服务器会说(在响应标头中)哪些站点应该使用它,并且一个诚实的浏览器(就像大多数人一样,当他们安装最新的 Chrome 时)决定显示的页面是否应该获取数据是否来自服务器。想象一下,浏览器正在显示 delta.com,页面上的脚本试图从某个后端服务器获取一些数据。在它执行对数据的请求之前,脚本希望浏览器向服务器发出自己的请求,以检查它是否正常;这是一个 OPTIONS 请求。如果服务器响应 OPTIONS 说“只有从 acme.com 提供的脚本应该使用我”并且浏览器没有显示 acme.com,那么浏览器不会执行页面上的脚本想要执行的请求;相反,控制台中出现错误,因为 delta.com 脚本需要数据,浏览器在快速“在服务器耳边低语”后决定不执行请求

使用不关心“请仅在您显示来自 acme.com 的页面时使用我”的 CORS 请求的浏览器的恶意行为者无论如何都可以使用服务器。 Postman 就是这种“浏览器”的一个例子——它按照你的要求发出请求,根本不关心 CORS。如果您对让 Postman 表现得像浏览器一样感兴趣,您应该:

  • 假装是 delta.com
  • 使用邮递员向 server.com 发出 OPTIONS(带有 Origin)
  • 邮递员在 A-C-A-O 标头中收到“我只与 acme.com 交谈”响应
  • 您自己的大脑决定不发出您最初想要执行的 POST 请求,因为您已经意识到您在假装是 delta.com 而服务器只与 acme.com 对话

这将是一个更准确的“邮递员假装像一个普通的日常浏览器”迭代


Origin 可以输入 CORS;服务器可以有 1000 个不同的站点,它愿意允许来自它的请求。显然,在每个响应中发送 1000 个站点名称(“请仅在您显示来自 acme1.com、acme2.com 或...要检查的一千个站点。如果服务器是智能的,它可以使用 Origin 来驱动响应;如果提交的“来源:acme547.com”在服务器知道的 1000 个站点的允许列表中,那么服务器可以将仅那个 acme547.com 发送回“请仅在以下情况下使用我..”标题 - 它也不需要发送其他 999 个站点。如果 Origin 来自 delta.com,则它根本不会发送“请只使用我..”标头,从而导致诚实的浏览器无法请求

javascript – chrome开发工具“save”在调试node.js应用程序时不起作用

javascript – chrome开发工具“save”在调试node.js应用程序时不起作用

在chrome dev工具(即可能的 http://youtu.be/03qGA-GJXjI)调试node.js cli脚本时,当我从网站调试正常的javascript时,我无法保存我在飞行中所做的更改.我收到一条错误消息:

“Debugger.setScriptSource失败.
LiveEdit失败:无法编译新版本的脚本:SyntaxError:Unexpected token [“

然后一个警告:

通过配置禁用将实时编辑更改保存回源文件.
更改config.json中的“saveLiveEdit”选项以启用此功能.

有谁知道如何解决这个问题?这将非常方便的调试和编辑文件并保存,而不会离开chrome开发工具.

谢谢.

btw,这是config.json的样子,https://github.com/node-inspector/node-inspector/blob/master/config.json.我尝试将“saveLiveEdit”选项改为true,但是我仍然得到相同的消息“通过配置禁止将实时编辑更改保存到源文件.
更改config.json中的“saveLiveEdit”选项以启用此功能.

解决方法

这似乎对我有用我开了2个壳:

>节点检查器 – 保存实时编辑
> node –debug app.js

然后在浏览器上转到http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858.

对代码进行更改应将其保存在硬盘驱动器上.

javascript – Node.js Web应用程序浏览器兼容性

javascript – Node.js Web应用程序浏览器兼容性

我听说node.js是构建实时Web应用程序(聊天,实时源等)的理想框架,然后我猜它涉及nodejs和客户端浏览器之间的大量socket io连接.

在客户端,我必须使用websocket(html5)才能与node.js通信,如果是这种情况,那么大多数旧版浏览器将不支持HTML5-Websocket.

题 :
使用node.js构建的实时Web应用程序仅适用于与HTML5兼容的浏览器.

解决方法

许多nodejs聊天应用程序使用 socket.io.

对于没有websockets的浏览器,socket.io有一个后备(涉及pull或Flash):

Socket.IO aims to make realtime apps possible in every browser and
mobile device,blurring the differences between the different
transport mechanisms. It’s care-free realtime 100% in JavaScript.

使用socket.io的关键在于你并不在乎,你只是使用它,大多数浏览器都会使用websockets,而有些则不会(但它们仍然可以正常工作).

javascript – NodeJS中的数组解析

javascript – NodeJS中的数组解析

我听说过Node.JS有很多EcmaScript 6功能.似乎默认情况下不存在数组理解.

Node.JS有阵列理解吗?如果是这样,我该如何启用它们?

解决方法

我不认为V8(NodeJS使用的 JavaScript引擎)还支持阵列理解,至少不是根据 this issue report. V8项目成员似乎在说它们实际上是标准化的,它们不是优先考虑的事情.

javascript – NodeJS包括没有EJS的页眉和页脚

javascript – NodeJS包括没有EJS的页眉和页脚

我希望有人可以帮我解决NodeJS问题. Iv最近开始使用NodeJS开发我的网站.

问题:

即时寻找一种方式将我的文档作为标题,内容,页脚样式发送,以减少每个部分的重复代码.

我有一个公用文件夹设置,所以我可以包括Js,CSS和常见文件等…

self.app.use(express.static(__dirname + '/public'));

这一切都有效,但我不确定如何实现加入文件内容的简单方法.静态查看在线的每个来源都表明“正确”的方法是通过一个名为EJS模板的软件包.

所以我在EJS中寻找类似于这个实现的东西:

<header>
    <% include ../partials/header %>
</header>

<footer>
    <% include ../partials/footer %>
</footer>

但是,托管的服务不支持EJS,那么可以做这样的事情吗?

self.routes['/'] = function(req,res) {
            res.setHeader('Content-Type','text/html');
            res.send(self.cache_get('header.html')+self.cache_get('index.html')+self.cache_get('footer.html') );
        };

是否有另一种简单的方法来分隔标题,内容和页脚,以便更容易开发具有动态内容的网站?

解决方法

虽然您可以编写自己的js来执行此操作,但在目前的级别我不推荐它(除了用于学习和实验目的).这就是节点如此强大的原因,因为您不必一直重新发明轮子.您注意到您正在使用openshift,并且您无法使用模块.这是你不正确的地方.

This link解释了如何在openhift中使用npm.任何node.js托管服务都不允许包集成,这将是非常愚蠢的.要简要说明这是如何工作的,您实际上是使用–save标志在本地环境中安装软件包.这将更新您的本地package.json文件,其中包含有关您的依赖项和版本的详细信息.当您将repo推送到主机时,它会查看此文件,并为您处理依赖项安装.

在本文中,如果您要继续使用node.js,您应该对包管理有一个很好的阅读. https://docs.npmjs.com/how-npm-works/packages

关于当我向应用程序javascript 和 nodejs中的端点发出请求时,在邮递员中指定原始标头没有任何作用的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于javascript – chrome开发工具“save”在调试node.js应用程序时不起作用、javascript – Node.js Web应用程序浏览器兼容性、javascript – NodeJS中的数组解析、javascript – NodeJS包括没有EJS的页眉和页脚的相关知识,请在本站寻找。

本文标签: