我有一个使用 (Dropzone js) 上传的 ajax 文件.它将文件发送到我的 hapi 服务器.我意识到浏览器发送了一个 PREFLIGHT OPTIONS METHOD.但我的 hapi 服务器似乎没有发送正确的响应标头,所以我在 chrome 上遇到错误.这是我在 chrome 上遇到的错误
I have an ajax file upload using (Dropzone js). which sends a file to my hapi server. I realised the browser sends a PREFLIGHT OPTIONS METHOD. but my hapi server seems not to send the right response headers so i am getting errors on chrome. here is the error i get on chrome
XMLHttpRequest cannot load http://localhost:3000/uploadbookimg. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
这是 hapi js 路由处理程序
this is the hapi js route handler
server.route({
path: '/uploadbookimg',
method: 'POST',
config: {
cors : true,
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data'
},
handler: require('./books/webbookimgupload'),
}
});
据我了解,hapi js 应该从 Pre-fight (OPTIONS) 请求中发送所有 cors 标头.不明白为什么不是
In my understanding hapi js should send all cors headers from the Pre-fight (OPTIONS) request. Cant understand why its is not
来自 chrome 的网络请求/响应
Network request /response from chrome
**General**
Request Method:OPTIONS
Status Code:200 OK
Remote Address:127.0.0.1:3000
**Response Headers**
view parsed
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
cache-control: no-cache
vary: accept-encoding
Date: Wed, 27 Apr 2016 07:25:33 GMT
Connection: keep-alive
Transfer-Encoding: chunked
**Request Headers**
view parsed
OPTIONS /uploadbookimg HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36
Access-Control-Request-Headers: accept, cache-control, content-type
Accept: */*
Referer: http://localhost:4200/books/upload
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
提前致谢
hapi cors: true 是一个通配符规则,允许来自所有域的 CORS 请求,除了少数情况,包括有额外的hapi 的默认白名单之外的请求标头:
The hapi cors: true is a wildcard rule that allows CORS requests from all domains except for a few cases including when there are additional request headers outside of hapi's default whitelist:
[accept"、authorization"、content-type"、if-none-match"、origin"]
请参阅 API 文档中路由选项下的 cors 选项部分:
headers - 允许的标头的字符串数组('Access-Control-Allow-Headers').默认为 ['Accept', 'Authorization', 'Content-Type', 'If-None-Match'].
headers- a strings array of allowed headers ('Access-Control-Allow-Headers'). Defaults to['Accept', 'Authorization', 'Content-Type', 'If-None-Match'].
additionalHeaders - 附加标头到标头的字符串数组.使用它来保留默认标题.
additionalHeaders - a strings array of additional headers to headers. Use this to keep the default headers in place.
您的问题是 Dropzone 发送了几个标题以及不在此列表中的文件上传:
Your problem is that Dropzone sends a couple of headers along with the file upload that aren't in this list:
x-requested-with(不在您上面的标题中,而是为我发送的)缓存控制x-requested-with (not in your headers above but was sent for me)cache-control您有两个选项可以让事情正常运行,您需要在服务器或客户端上进行更改:
You have two options to get things working, you need to change something on either the server or the client:
server.route({
config: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
},
method: 'POST',
path: '/upload',
handler: function (request, reply) {
...
}
});
通过他们的配置尚不可能,但有一个待定的 PR 允许它:https://github.com/enyo/dropzone/pull/685
这篇关于hapi.js Cors Pre-flight 不返回 Access-Control-Allow-Origin 标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
即使在调用 abort (jQuery) 之后,浏览器也会等待Browser waits for ajax call to complete even after abort has been called (jQuery)(即使在调用 abort (jQuery) 之后,浏览器也会等待 ajax 调用
JavaScript innerHTML 不适用于 IE?JavaScript innerHTML is not working for IE?(JavaScript innerHTML 不适用于 IE?)
XMLHttpRequest 无法加载,请求的资源上不存在“AXMLHttpRequest cannot load, No #39;Access-Control-Allow-Origin#39; header is present on the requested resource(XMLHttpRequest 无法加载,请求的资
XHR HEAD 请求是否有可能不遵循重定向 (301 302)Is it possible for XHR HEAD requests to not follow redirects (301 302)(XHR HEAD 请求是否有可能不遵循重定向 (301 302))
XMLHttpRequest 206 部分内容XMLHttpRequest 206 Partial Content(XMLHttpRequest 206 部分内容)
XMLHttpRequest 的 getResponseHeader() 的限制?Restrictions of XMLHttpRequest#39;s getResponseHeader()?(XMLHttpRequest 的 getResponseHeader() 的限制?)