当我去几乎所有的网站,如何,如果我打开控制台,注入jQuery并发送一个跨域ajax请求到我在本地主机上运行的服务器,我没有得到任何错误正如我所预期的那样?但是,如果我打开其中一个自己写的网页,并且它也在我的本地主机上运行(但与服务器使用的端口不同),如果我尝试从控制台发送ajax请求我得到这个消息:为什么我能够从JavaScript控制台发送跨域的Ajax请求?
XMLHttpRequest cannot load https://localhost:10000/. Request header field My-First-Header is not allowed by Access-Control-Allow-Headers in preflight response.
Ajax请求的样子:
$.ajax({
type: 'POST',
url: 'https://localhost:10000',
headers: {
"My-First-Header":"first value",
"My-Second-Header":"second value"
}
})
需要明确的是,我的问题不是如何解决这个问题,而是为什么我甚至能够使跨来自大多数其他网站的域名请求(不应该不允许他们?)。这些网站是否设置了自动绕过限制的某种机制?
请求头:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:csrftoken=lxe5MaAlb9GC5lPGQpXtSj9HvCP0QhCz; PHPSESSID=uta0nlhlh8r1uimdklmt3v3ho1
Host:localhost:10000
Referer:http://stackoverflow.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36
响应头:
Content-Length:3
Content-Type:text/html
Date:Mon, 16 May 2016 06:29:03 GMT
Server:TwistedWeb/16.0.0
开发人员控制台是特殊的;浏览器明白你是代码的来源,因为它是你自己的浏览器,你应该可以做任何你想做的事情。 – Pointy
_why我甚至能够提出跨域请求_....,因为这是xhr所做的。响应是请求的最终状态。我想你误解了请求/回应.....! – Jai
@Pointy但为什么这不工作在我的第一个例子(当我从我自己的网页发送请求)? –