无法从本地主机使用JavaScript使基本的HTTP POST函数正常工作。

14 浏览
0 Comments

无法从本地主机使用JavaScript使基本的HTTP POST函数正常工作。

我正在构建一个网络API。我发现每当我使用Chrome进行POST、GET请求到我的API时,总会先发送一个OPTIONS请求,这相当令人烦恼。目前,我让服务器忽略任何OPTIONS请求。现在我的问题是,发送OPTIONS请求是否会增加服务器的负载?是否有任何方法可以完全阻止浏览器发送OPTIONS请求?

0
0 Comments

无法从本地主机使用Javascript的基本HTTP POST功能,请参考实际需要预先发送OPTIONS请求的答案:CORS - What is the motivation behind introducing preflight requests? 要禁用OPTIONS请求,必须满足以下条件:

1. 请求未设置自定义的HTTP头,如'application/xml'或'application/json'等。

2. 请求方法必须是GET、HEAD或POST之一。如果是POST,则内容类型应为application/x-www-form-urlencoded、multipart/form-data或text/plain之一。

参考资料:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

对于"custom HTTP headers"给予了+1!在我的情况下,它们导致预检请求被触发。我重构了请求,将我在头部发送的任何内容都作为请求体发送,然后OPTIONS请求停止发送。

application/xml或application/json不是"Custom HTTP headers"。头本身应该是Content-Type,将该头称为"custom"是具有误导性的。

删除自定义HTTP头,问题迎刃而解!但是,当我删除了这些头部时,对我来说,并没有发送OPTIONS请求。因此,"custom"在某种程度上是直观的,因为它的意思是"用户提供的",而不是"浏览器生成的"。

我一直在使用Axios + Elasticsearch调试CORS。删除所有头部,只需将请求发送到URL,问题迎刃而解。

我有一个使用C#服务器处理HTTP请求的项目。当我尝试使用ajax进行POST时,遇到了问题。我只是删除了'application/json'...哇,它工作了。

0
0 Comments

问题:无法在本地使用Javascript的基本HTTP POST函数工作。

原因:

根据CORS策略,浏览器在认为有必要时无法强制停止发送OPTIONS请求。要解决这个问题,有两种方法:

1. 确保你的请求是一个“简单请求”。

2. 为OPTIONS请求设置Access-Control-Max-Age。

解决方法:

1. “简单请求”的条件:

- 允许的方法只能是GET、HEAD和POST。

- 除了用户代理自动设置的头部(如Connection、User-Agent等),只能手动设置以下头部:

- Accept

- Accept-Language

- Content-Language

- Content-Type

- Content-Type头部的允许值只能是:

- application/x-www-form-urlencoded

- multipart/form-data

- text/plain

- 简单请求不会触发预检的OPTIONS请求。

2. 为OPTIONS请求设置缓存:

可以为OPTIONS请求设置Access-Control-Max-Age,以便在过期之前无需再次检查权限。

限制:

- 对于Chrome,Access-Control-Max-Age的最大值是600秒(即10分钟)。

- Access-Control-Max-Age每次只对一个资源有效。例如,相同URL路径但不同查询的GET请求将被视为不同的资源,因此对第二个资源的请求仍然会触发预检的OPTIONS请求。

以上是关于解决无法在本地使用Javascript的基本HTTP POST函数工作的问题的原因和解决方法。

0
0 Comments

无法从本地主机使用Javascript获取基本的HTTP POST函数工作的原因可能是由于CORS问题引起的。当在特定情况下跨域请求时,浏览器会发送一个名为OPTIONS的预检请求。这是为了确保服务器信任所发送的请求,即服务器明白请求中的方法、来源和头部是安全的。解决这个问题的方法是在服务器响应中添加一个Access-Control-Allow-Origin: *的头部,告诉浏览器服务器愿意接受来自任何来源的请求。另外,可以参考http://enable-cors.org/了解如何在服务器上添加CORS支持。

0