【问题标题】:Why are my CORS requests denied?为什么我的 CORS 请求被拒绝?
【发布时间】:2026-01-26 01:20:08
【问题描述】:

相关question.

我正在尝试向 API 发送 POST 请求以进行测试。我不断得到

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“{我的本地 IP}”。响应的 HTTP 状态代码为 403。

以下是相关代码:

function searchSimilar2(){
var base_url = "{request url}"
var send_url = base_url + "{inline arguments}"
var params = '{"size":10, "mediaUrl":"https://cdn.yoox.biz/39/39706632kh_20_f.jpg2"}'

function func(){
    console.log(this.response)
}

var hReq = new XMLHttpRequest();
hReq.open('POST', send_url)
hReq.setRequestHeader('Content-Type', 'application/json')
hReq.onload = func;
hReq.send(params)

我省略了请求 url 和参数,因为我知道问题不在于它们。

根据链接的问题答案,我没有使用 JQuery,我正在运行一个 python SimpleHTTPServer,我从中发送此请求。我不断收到此错误。

【问题讨论】:

  • 服务器没有发回所需的 CORS 标头。您是否通过file:// URL 加载您的页面?如果是这样,浏览器会将页面和http://localhost 服务器视为两个不同的域。
  • 是的,我在链接的问题中读到了。这就是为什么我运行一个 simpleHTTPServer 并从那里打开运行 javascript 的 html 文件。
  • 了解就浏览器而言,必须匹配的是“http”部分(“http”或“https”),域letter for letter,和端口号。与字符串比较时,它们必须相同,而不仅仅是相同的 IP 地址。
  • 目前还不完全清楚发生了什么。该 ajax 请求是通过包含页面从您的浏览器发生的吗?还是它以某种方式在服务器中的 Python 下运行?

标签: javascript xmlhttprequest cors httprequest


【解决方案1】:

您需要在 SimpleHttpServer 响应中设置“Access-Control-Allow-Origin”标头值。标头值需要包含请求应用程序的主机名或 IP。或者,您可以设置“*”通配符值以允许所有来源,但只有在您确实想要允许所有来源时才应该这样做,因为它会产生一点 XSS 漏洞:

//allow single origin
self.send_header('Access-Control-Allow-Origin', 'http://yourapp.com')
self.end_headers()

-或-

//allow all origins
self.send_header('Access-Control-Allow-Origin', '*') 
self.end_headers()

【讨论】:

    【解决方案2】:

    通过更改服务器的设置,我得到了它的工作。

    请求的部分 url 是“v1/api”,出于某种原因将其切换为“api/v1”后一切正常。

    【讨论】: