为了账号安全,请及时绑定邮箱和手机立即绑定

处理 CORS 表单提交

处理 CORS 表单提交

Go
缥缈止盈 2021-12-20 19:32:18
我从 localhost:3000 提供了一个非常简单的表单<form id="my-HTML-form" action="http://localhost:8080" method="POST">    <input type="text" placeholder="Username" name="username" />    <input type="password" placeholder="Password" name="password" />    <input type="hidden" name="form-id" value="login" />    <button type="submit">Submit</button></form>在 localhost:8080 上,我有一个非常简单的 go 服务器:package mainimport (    "log"    "net/http")func main() {    // Start the server    http.HandleFunc("/", handler)    serverErr := http.ListenAndServe(":8080", nil)    if serverErr != nil {        log.Println("Error starting server")        log.Fatal(serverErr)    }}func handler(w http.ResponseWriter, r *http.Request) {    log.Println(r.Header.Get("Origin"))    log.Println(r.Method)    w.Header().Set("Access-Control-Allow-Origin", "*")    w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")    w.Header().Set("Access-Control-Allow-Headers",    "Accept, Accept-Encoding, Authorization, Content-Length, Content-Type, Origin, X-CSRF-Token")    w.WriteHeader(http.StatusOK)}当我提交表单时,我实际上收到了两个请求!一个 POST 和一个 GET!这是单次提交后我的控制台:$ http://localhost:3000$ POST$ $ GET请注意 GET 请求没有附加源。我正在尝试执行一些逻辑,然后根据成功或失败将用户重定向到不同的 url。但我不能这样做,因为 GET 请求紧跟在 POST 请求之后。我可以使用 AJAX,没问题,但我希望找到一个简单的 html 表单提交的解决方案。任何想法,想法?是否所有浏览器都遵循POST/Redirect/Get范式,而我是 SOL?
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

我假设您的表单操作是action="http://localhost:8080"因为您说这是一个跨源请求。

第二个 GET 请求是对 favicon 的请求(正如 elithrar 在评论中指出的那样)。做一个log.Println(r.URL)来确保。我不确定为什么浏览器不向它添加原始标题。

您可以通过替换w.WriteHeader(http.StatusOK)为例如, 重定向请求http.Redirect(w, r, "http://localhost:3000/success.html", http.StatusSeeOther)


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信