我开发了一个PhoneGap应用程序,现在正在转换为移动网站.除了一个小小的故障外,一切顺利.我通过POST请求使用某个第三方API,这在应用程序中运行良好,但在移动网站版本中失败.
仔细看后,似乎AngularJS(我猜浏览器实际上)是先发送一个OPTIONS请求.我今天学到了很多关于CORS的知识,但我似乎无法弄清楚如何完全禁用它.我无权访问该API(因此无法进行更改),但他们已将我正在处理的域添加到其Access-Control-Allow-Origin标头中.
这是我正在谈论的代码:
var request = {
language: 'fr',
barcodes: [
{
barcode: 'somebarcode',
description: 'Description goes here'
}
]
};
}
var config = {
headers: {
'Cache-Control': 'no-cache',
'Content-Type': 'application/json'
}
};
$http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {
callback(undefined, data);
}).error(function(data, status) {
var err = new Error('Error message');
err.status = status;
callback(err);
});
Run Code Online (Sandbox Code Playgroud)
如何阻止浏览器(或AngularJS)发送OPTIONS请求并跳转到实际的POST请求?我正在使用AngularJS 1.2.0.
提前致谢.
我正在尝试使用Python登录网站并从几个网页收集信息,我收到以下错误:
Run Code Online (Sandbox Code Playgroud)Traceback (most recent call last): File "extract_test.py", line 43, in <module> response=br.open(v) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open return self._mech_open(url, data, timeout=timeout) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 255, in _mech_open raise response mechanize._response.httperror_seek_wrapper: HTTP Error 429: Unknown Response Code
我用time.sleep()
它并且它有效,但它似乎不聪明和不可靠,有没有其他方法来躲避这个错误?
这是我的代码:
import mechanize
import cookielib
import re
first=("example.com/page1")
second=("example.com/page2")
third=("example.com/page3")
fourth=("example.com/page4")
## I have seven URL's I want to open
urls_list=[first,second,third,fourth]
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# …
Run Code Online (Sandbox Code Playgroud) 我开发了一组宁静的Web服务.由于错误,我无法从远程客户端调用任何这些方法
No 'Access-Control-Allow-Origin' header is present on the requested resource.
这些服务在localhost上完美运行.是否有任何更改或配置要在服务器端解决此问题.即启用跨域请求.
我正在使用WildFly 8,JavaEE 7
是否可以为某种HTTP方法禁用Spring Security?
我们有一个Spring REST应用程序,其服务要求将授权令牌附加到http请求的标头中.我正在为它编写一个JS客户端,并使用JQuery发送GET/POST请求.该应用程序使用此过滤器代码启用CORS.
doFilter(....) {
HttpServletResponse httpResp = (HttpServletResponse) response;
httpResp.setHeader("Access-Control-Allow-Origin", "*");
httpResp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
httpResp.setHeader("Access-Control-Max-Age", "3600");
Enumeration<String> headersEnum = ((HttpServletRequest) request).getHeaders("Access-Control-Request-Headers");
StringBuilder headers = new StringBuilder();
String delim = "";
while (headersEnum.hasMoreElements()) {
headers.append(delim).append(headersEnum.nextElement());
delim = ", ";
}
httpResp.setHeader("Access-Control-Allow-Headers", headers.toString());
}
Run Code Online (Sandbox Code Playgroud)
但是当JQuery发送对CORS的OPTIONS请求时,服务器会使用Authorization Failed令牌进行响应.显然OPTIONS请求缺少授权令牌.那么可以让OPTIONS从Spring安全配置中逃脱安全层吗?
我试图让在node.js的CORS但问题是,我不能设置*
到Access-Control-Allow-Origin
,如果Access-Control-Allow-Credentials
设置.
另外规范说我不能做一个数组或逗号分隔值,Access-Control-Allow-Origin
建议的方法是做类似于这个Access-Control-Allow-Origin多个原始域的东西?
但我似乎无法在node.js中这样做
["http://mydomain.com:9001", "http://mydomain.com:5001"].map(function(domain) {
res.setHeader( "Access-Control-Allow-Origin", domain );
});
res.header( "Access-Control-Allow-Credentials", true );
Run Code Online (Sandbox Code Playgroud)
这里的问题是它被数组中的最后一个值覆盖,因此标题将被设置为 res.setHeader( "Access-Control-Allow-Origin", "http://mydomain.com:5001" );
客户端浏览器出错:
XMLHttpRequest无法加载http://mydomain.com:9090/api/sync."Access-Control-Allow-Origin"标头的值" http://mydomain.com:5001 "不等于提供的原点.因此,不允许来源" http://mydomain.com:9001 "访问.
不透明响应被定义为Fetch API的一部分,并表示在未启用CORS时对远程源发出的请求的结果.
关于如何使用不透明的响应(包括JavaScript和页面上的资源)存在哪些实际限制和"陷阱"?
有fetch('somefile.json')
,可以请求从服务器而不是从浏览器缓存中提取文件?
换句话说,有fetch()
没有可能绕过浏览器的缓存?
我有一个HTTP API,它在成功和失败时返回JSON数据.
示例失败将如下所示:
~ ? http get http://localhost:5000/api/isbn/2266202022
HTTP/1.1 400 BAD REQUEST
Content-Length: 171
Content-Type: application/json
Server: TornadoServer/4.0
{
"message": "There was an issue with at least some of the supplied values.",
"payload": {
"isbn": "Could not find match for ISBN."
},
"type": "validation"
}
Run Code Online (Sandbox Code Playgroud)
我想在JavaScript代码中实现的是这样的:
fetch(url)
.then((resp) => {
if (resp.status >= 200 && resp.status < 300) {
return resp.json();
} else {
// This does not work, since the Promise returned by `json()` is never fulfilled
return Promise.reject(resp.json()); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过XMLHttpRequest从Firebase存储下载文件,但资源上没有设置Access-Control-Allow-Origin,因此无法实现.有没有办法在存储服务器上设置此标头?
(let [xhr (js/XMLHttpRequest.)]
(.open xhr "GET" url)
(aset xhr "responseType" "arraybuffer")
(aset xhr "onload" #(js/console.log "bin" (.-response xhr)))
(.send xhr)))
Run Code Online (Sandbox Code Playgroud)
Chrome错误消息:
XMLHttpRequest无法加载 https://firebasestorage.googleapis.com/[EDITED] 请求的资源上没有"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:3449 "因此不允许访问.