[使用https播放2 javascript路由

问题描述 投票:2回答:3

我正在使用play的javascript路由(http://www.playframework.com/documentation/2.2.x/ScalaJavascriptRouting)。我有一台nginx前端服务器,已将其配置为强制使用https。当我尝试进行ajax调用时,出现错误,因为JavaScript路由生成了http url,而我的浏览器由于跨源访问而阻止了它们。

如何配置JavaScript路由以提供https网址?

nginx https playframework-2.0
3个回答
1
投票

您如何打电话? Play JavaScript路由器返回的对象具有两个属性,一个是method属性,其中包含方法,例如POSTGET等。另一个是url属性,其中包含相对URL。

返回的对象上还有两种方法,一种叫做absoluteURL,另一种叫做webSocketURL。它们将根据当前页面的主机名返回绝对URL,根据当前页面是否安全,它们将为http或https(或ws或wss)。

因此,例如,如果与jQuery一起使用,您应该能够:

$.ajax(jsRoutes.controllers.MyController.myAction("foo")).then(...)

并且它将使用相对URL,或者您也可以:

var route = jsRoutes.controllers.MyController.myAction("foo")
$.ajax({
  method: route.method,
  url: route.url,
  ...
}).then(...)

0
投票

[如果您尝试使用绝对网址发出请求,则由于同源策略,主机名,协议和端口应匹配。您至少有两个选择:

  1. 在诸如href="/your/page"之类的ajax请求上使用相对URL
  2. 使用协议的相对URL。例如:href="//your.domain.com/your/page

这里是Paul Irish关于协议相对URL的详细文章:

http://www.paulirish.com/2010/the-protocol-relative-url/


0
投票

您必须将它作为参数传递给absoluteURL / websocketURL

Frome Chrome开发人员工具:

> jsRoutes.controllers.CalendarController.getEvents().absoluteURL
  function (s){return _s('http',s)+'localhost:9000'+r.url}

> jsRoutes.controllers.CalendarController.getEvents().absoluteURL()
  "http://localhost:9000/events"

> jsRoutes.controllers.CalendarController.getEvents().absoluteURL(true)
  "https://localhost:9000/events"

> jsRoutes.controllers.CalendarController.getEvents().webSocketURL
  function (s){return _s('ws',s)+'localhost:9000'+r.url}

> jsRoutes.controllers.CalendarController.getEvents().webSocketURL()
  "ws://localhost:9000/events"

> jsRoutes.controllers.CalendarController.getEvents().webSocketURL(true)
  "wss://localhost:9000/events"

[_shttps://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/routing/JavascriptReverseRouter.scala#L54处定义为]

function(p,s){return p+((s===true||(s&&s.secure))?'s':'')+'://'}
© www.soinside.com 2019 - 2024. All rights reserved.