Kir*_*ran 18 proxy cors reactjs axios
我在package.json中添加了proxy,效果很好,但是在npm run build之后,CORS问题再次浮出水面,有人知道在React中npm run build之后如何处理CORS问题。
我试图使用各种方法在axios请求中添加标头。但是,我未能在axios请求中添加'Access-Control-Allow-Origin':'*'。我的代码如下:
package.json
"proxy": {
"*":{ "target" : "http://myurl"}
}
Run Code Online (Sandbox Code Playgroud)
GetData.js
axios.defaults.baseURL = 'http://myurl';
axios.defaults.headers.post['Content-Type'] ='application/json;charset=utf-8';
axios.defaults.headers.post['Access-Control-Allow-Origin'] = '*';
axios.get(serviceUrl, onSuccess, onFailure)
.then(resp => {
let result = resp.data;
onSuccess(result);
})
.catch(error => {
if(onFailure) {
return onFailure(error);
}
})
}
Run Code Online (Sandbox Code Playgroud)
注意:它已从服务器端启用,目前仍无法使用。目前,我无法从服务器端更改代码,我的工作仅限于客户端。
小智 34
只是为那些可能通过谷歌搜索到达这里的人指出我的解决方案。我通过在调用中withCredentials设置为解决了 CORS 问题(当从浏览器中的 UI 调用外部 api 时):falseaxios
axios({
method: 'get',
url: `https://api.someurl.com/subject/v2/resource/somevalue`,
withCredentials: false,
params: {
access_token: SECRET_TOKEN,
},
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,外部 api 端点的安全性基于access_token.
可能对某人有帮助:
我正在将数据从react应用程序发送到golang服务器。
一旦我改变了这个,w.Header().Set("Access-Control-Allow-Origin", "*")错误就被修复了。
反应表单提交功能:
async handleSubmit(e) {
e.preventDefault();
const headers = {
'Content-Type': 'text/plain'
};
await axios.post(
'http://localhost:3001/login',
{
user_name: this.state.user_name,
password: this.state.password,
},
{headers}
).then(response => {
console.log("Success ========>", response);
})
.catch(error => {
console.log("Error ========>", error);
}
)
}
Run Code Online (Sandbox Code Playgroud)
去服务器有路由器,
func main() {
router := mux.NewRouter()
router.HandleFunc("/login", Login.Login).Methods("POST")
log.Fatal(http.ListenAndServe(":3001", router))
}
Run Code Online (Sandbox Code Playgroud)
登录.go,
func Login(w http.ResponseWriter, r *http.Request) {
var user = Models.User{}
data, err := ioutil.ReadAll(r.Body)
if err == nil {
err := json.Unmarshal(data, &user)
if err == nil {
user = Postgres.GetUser(user.UserName, user.Password)
w.Header().Set("Access-Control-Allow-Origin", "*")
json.NewEncoder(w).Encode(user)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在处理 Vue.js 项目时遇到了相同的 CORS 错误。您可以通过构建代理服务器来解决此问题,或者另一种方法是禁用浏览器(例如 CHROME)的安全设置来访问跨源 api(这是临时解决方案,不是解决问题的最佳方法)。这两种解决方案都对我有用。后面的解决方案不需要构建任何模拟服务器或代理服务器。这两种方案都可以在前端解决。
您可以通过在终端上键入以下命令来禁用从源访问 api 的 chrome 安全设置:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir="/tmp/chrome_dev_session" --disable-web-security
Run Code Online (Sandbox Code Playgroud)
在终端上运行上述命令后,将打开一个禁用安全设置的新 chrome 窗口。现在,再次运行您的程序 (npm runserve / npm run dev),这次您将不会收到任何 CORS 错误,并且能够使用 axios 获取请求。
希望这可以帮助!
小智 6
发生这种情况是因为跨源策略限制源。浏览器发送预检请求以了解 API 服务器想要与谁共享资源。所以你必须在 API 服务器中设置 origin 并发送一些状态。之后浏览器允许将请求发送到 API 服务器。
这是代码。我在 localhost:8000 上运行前端,api 服务器在端口 6000 上运行。
const cors = require("cors");
app.options("*", cors({ origin: 'http://localhost:8000', optionsSuccessStatus: 200 }));
app.use(cors({ origin: "http://localhost:8000", optionsSuccessStatus: 200 }));
Run Code Online (Sandbox Code Playgroud)
我已经将 origin 设置为我的前端 url,如果将其设置为 true ,那么它将只允许端口 8000 访问 rosource,而运行在端口 8000 上的前端无法访问该资源。在 api 服务器中路由之前使用此中间件。
我遇到过同样的问题。当我更改内容类型时,它已经解决了。我不确定这个解决方案会帮助你,但也许是。如果你不介意内容类型,它对我有用。
axios.defaults.headers.post['Content-Type'] ='application/x-www-form-urlencoded';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96641 次 |
| 最近记录: |