Angularjs 奇怪的有角休息叫声行为

Angularjs 奇怪的有角休息叫声行为,angularjs,rest,jira,jira-rest-api,Angularjs,Rest,Jira,Jira Rest Api,我使用Angular调用Atlassian JIRA的REST API。Angular用于设备上的ionic framework应用程序 Acurlas curl -X POST 'https://url' -H 'Accept: application/json, text/plain, */*' -H 'Authorization: Basic a2someStuff' -H 'Content-Type: application/json' --data-binary '{"tra

我使用Angular调用Atlassian JIRA的REST API。Angular用于设备上的ionic framework应用程序

A
curl
as

curl -X POST 'https://url' -H 'Accept: application/json, text/plain, */*' -H 'Authorization: Basic a2someStuff' -H 'Content-Type: application/json' --data-binary '{"transition": {"id": "761"}}'
工作并产生期望的结果

但是,如果我使用正则表达式执行查询

curl -X POST 'https://url' -H 'Accept: application/json, text/plain, */*' -H 'Authorization: Basic a2someStuff' -H 'X-Atlassian-Token: nocheck' -H 'User-Agent: Mozilla/5.0 (Linux; Android 5.0; Intellibook Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Safari/537.36' -H 'Content-Type: application/json' --data-binary '{"transition": {"id": "781"}}'
是创建的。我已验证,如果删除了
用户代理的头,则此curl可以正常工作。
是否有可能进行这样的操作

编辑 这里是生成请求的JS:

这里是配置部分:

.constant('ApiEndpoint', {
    url: 'someUrl'
  })
.config(['$httpProvider', function ($httpProvider) {

    $httpProvider.defaults.headers.common['X-Atlassian-Token'] = 'nocheck';
  }])
在这里,该方法包含以下内容:

var postData = '{"transition": {"id": "' + transition + '"}}';
      $http({
        url: ApiEndpoint.url + 'issue/' + issueKey + "/transitions",
        method: "POST",
        data: postData,
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(function (response) {
          //some stuff
        },

如果要删除
用户代理
标题,请执行以下操作:

.config(['$httpProvider', function ($httpProvider) {
    delete $httpProvider.defaults.headers.common['User-Agent'];
}]);
以下是有关angular
$http
的一些信息(请参阅安全注意事项部分)

XSRF是一种攻击技术,攻击者可以通过它欺骗攻击者 通过身份验证的用户在不知不觉中在您的网站上执行操作。 Angular提供了一种对抗XSRF的机制。执行XHR时 请求时,$http服务从cookie中读取令牌(默认情况下, XSRF-TOKEN),并将其设置为HTTP头(X-XSRF-TOKEN)。只因为 在您的域上运行的JavaScript可以读取cookie,即您的服务器 可以肯定的是,XHR来自于在您的计算机上运行的JavaScript 域名。不会为跨域请求设置标头

要利用这一点,服务器需要在 JavaScript可读会话cookie,称为第一个HTTP上的XSRF-TOKEN 获取请求。在后续的XHR请求中,服务器可以验证 cookie与X-XSRF-TOKEN HTTP头匹配,因此请确保 只有在您的域上运行的JavaScript才能发送请求。 令牌对于每个用户都必须是唯一的,并且必须可由 服务器(防止JavaScript生成自己的令牌)。我们 建议令牌是站点身份验证的摘要 为了增加安全性,饼干中加入了盐

可以使用xsrfHeaderName和 $httpProvider.defaults的xsrfCookieName属性位于 配置时间,$http.defaults在运行时,或每请求配置 反对

为了防止在多个角度 应用程序共享同一个域或子域,我们建议每个应用程序 应用程序使用唯一的cookie名称

xsrfHeaderName
–{string}–用XSRF令牌填充的HTTP头的名称。
xsrfCookieName
–{string}–包含XSRF令牌的cookie的名称

$http({
        url: ApiEndpoint.url + 'issue/' + issueKey + "/transitions",
        method: "POST",
        data: postData,
        headers: {
          'Content-Type': 'application/json'
        },
        xsrfHeaderName: 'XSRF-Header-Name',
        xsrfCookieName: 'XSRF-Cookie-Name'
      })

能否提供angular http请求的javascript?请查看编辑。是否可以删除
'X-Atlassian-Token:nocheck'
标题?在你的问题中,
curl
中没有这个选项,不幸的是,这不起作用。在我的浏览器(Chrome)中,无论是在设备上还是在PC上,我仍然收到以下错误:XSRF检查失败根据我将代码更新为:
标题:{'Content Type':'application/json','X-Atlassian-Token':'nocheck','xsrfHeaderName':'X-Atlassian-Token','xsrfCookieName':'Atlassian.xsrf.Token'}
但是这不起作用。请尝试:
'xsrfCookieName':'nocheck'
甚至尝试
'X-Atlassian-Token':'no check'
而不是
nocheck
谢谢。这在浏览器(PC)中仍然不起作用。在设备(android/ios)上返回了不同的错误消息。我不确定是否仍然是XSRF问题:消息:“索引7处的预期权限:文件:/”堆栈跟踪:“java.lang.IllegalArgumentException:索引7处的预期权限:文件://↵在java.net.URI.create(URI.java:859)↵位于com.atlassian.applinks.core.auth.cors.DefaultCorsService.getApplicationLinksByOrigin(DefaultCorsService.java:56)↵在com.atlassian.applinks.core.auth.cors.AppLinksCorsDefaults.allowsOrigin(AppLinksCorsDefaults.java:40)上↵位于com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter$1.apply(XsrfResourceFilter.java:226)↵位于com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter。状态代码:500