gpt4 book ai didi

javascript - 在 GET 之前重新发送 OPTIONS 方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:51 24 4
gpt4 key购买 nike

我正在使用仅接受 GET 方法并限制使用 OPTIONS 的 API。当我在 chrome 中发送请求时(通过 --disable-web-security 绕过 cors),它会在 GET 方法之前发送 OPTIONS 方法,从而阻止获取资源。

但是,在 Safari 中,我可以获得资源,因为它只发送 GET。我通过 ionic 框架在移动设备上进行测试,但我无法获取资源,我假设 OPTIONS 是造成这种情况的原因。我试过创建自定义请求,尽管 this , thisthis文档会有所帮助,但我一直没有运气。这就是我的代码的样子,我刚开始使用 Restangular 并且仍在弄清楚它,感谢任何帮助/提示。谢谢。

      .constant('baseURL', {
url: 'https://api.example.com'
})

.config([
'RestangularProvider', 'baseURL',
function(RestangularProvider, baseURL) {

RestangularProvider.setBaseUrl(baseURL.url);


RestangularProvider.setDefaultHeaders({
Authorization: 'Basic ' + baseURL.jwt
})

}
])


.controller('MainCtrl', ['$scope', 'Restangular',
function($scope, Restangular) {

Restangular.one('destinations').get('').then(function(destinations) {

$scope.destinationBase = destinations;

});

最佳答案

您可以尝试拦截响应,如果方法是 OPTIONS 并且请求是对有问题的 URL 发出的,则将响应代码修改为 200204.

这里只是一个偏好问题,而不是使用 RestangularProvider.addResponseInterceptor , 我会在 $httpProvider.interceptors 中添加一个函数大批。 Restangular 在幕后使用 $http,那么为什么不跳过中间人直接进入源代码呢?

像这样的东西应该可以工作:

angular.module('myApp', ['restangular'])
.config(httpConfig);

function httpConfig($httpProvider) {
$httpProvider.interceptors.unshift(interceptor);

function interceptor() {
return {
response: responseInterceptor
};

function responseInterceptor(response) {
if (response.config.url === 'http://my.api.com/endpoint' && response.config.method === 'OPTIONS' && response.status > 299) {
response.status = 204;
response.statusText = 'No Content';
}

return response;
}
}
}

描述了response 对象here ,并且 response.config 被描述为 here .

关于javascript - 在 GET 之前重新发送 OPTIONS 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34169106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com