我已经编写了HTML和AJAX代码来更新网络中的摄像头密码。 当我提交表格时,我只得到
在Chrome中"错误" (net :: ERR_EMPTY_RESPONSE)
并且它不会更新密码。但是当我用POSTMAN尝试PUT请求时,我得到OK(200)
并且它成功更新。它也适用于Locale(即从桌面运行HTML文件)和Internet Explorer。但在上传到服务器后,它无法与Internet Explorer一起使用(待处理和拒绝访问)。
function myFunction() {
var settings = {
"async": true,
"crossDomain": true,
"url": "http://192.168.1.64/Security/users?auth=YWRtaW46MTEK",
"method": "PUT",
"headers": {
"cache-control": "no-cache",
"postman-token": "fda97359-6164-70d0-2896-8ca4804ac06c"
},
"data": "<UserList xmlns=\"http://www.hikvision.com/ver10/XMLSchema\" version=\"1.0\"><User xmlns=\"http://www.hikvision.com/ver10/XMLSchema\" version=\"1.0\"><id>1</id><userName>admin</userName><password>TT.123456</password></User></UserList>"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
}
我在chrome中遇到此错误。请看屏幕截图:
&#34;邮差&#34;屏幕截图:
答案 0 :(得分:0)
为了执行跨域请求(在客户端),它很可能需要是POST请求而不是PUT。根据{{3}}的MDN文档:
简单请求
有些请求不会触发HTTP access control (CORS)。这些在本文中称为“简单请求”,尽管CORS preflight规范(定义CORS)不使用该术语。不触发Fetch的请求 - 所谓的“简单请求” - 符合以下所有条件的请求:
唯一允许的方法是:
我在本地发布了您的帖子中的代码,将方法更改为1。端点需要添加以下标头:
access-control-allow-headers: cache-control,postman-token
access-control-allow-origin: *
虽然可以将POST设置为特定域而不是*
。例如:
Access-Control-Allow-Origin: https://intranetHost
在下图中,第一个XHR请求是飞行前请求(其中方法为OPTIONS
),第二个是实际请求(方法为POST
)
或者,如果它仍然需要是PUT请求,则可能会向将发出PUT请求的服务器端端点发出请求(例如,使用cURL)。