gpt4 book ai didi

javascript - POST 请求在 Phoenix 变成 200 OPTIONS 但不发送以下 POST

转载 作者:行者123 更新时间:2023-12-01 03:32:30 24 4
gpt4 key购买 nike

我正在使用 Angular 2 和 Phoenix,并且正在尝试向 Phoenix 发送 POST 请求。我有以下代码:

端点.ex

plug Corsica, origins: "http://localhost", allow_headers: ["content-type"]

在我的前端我有

@Injectable()
export class RegisterService {

public headers: Headers;

constructor(private _http: Http) {
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
}

createUser(): Observable<Response> {
return this._http.post(
'http://localhost:4000/v1/users',
JSON.stringify({
firstName: 'lll',
lastName: 'xxxxx',
email: 'dddd@gmail.com',
password: 'test123'
}),
{headers: this.headers}
);
}
}

这是组件代码

createUser(): void {
this._registerService.createUser().subscribe();
}

我收到 200 OK OPTIONS 但它从不发送 POST 请求。

一般

Request URL:http://localhost:4000/v1/users
Request Method:OPTIONS
Status Code:200 OK
Remote Address:127.0.0.1:4000
Referrer Policy:no-referrer-when-downgrade

响应 header

cache-control:max-age=0, private, must-revalidate
content-length:0
date:Sat, 10 Jun 2017 04:29:50 GMT
server:Cowboy
x-request-id:hfm969svbqv9oa2jatn5ri641srsht3s

请求 header

Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:4000
Origin:http://localhost:4200
Referer:http://localhost:4200/signup

我的 Phoenix 日志只是说

[info] OPTIONS /v1/users
[info] Sent 200 in 31µs

不知道我做错了什么。我确实稍微修改了我的 router.ex...虽然不确定它是否会产生任何影响,但它是

defmodule Api.Router do
use Api.Web, :router

pipeline :api do
plug :accepts, ["json"]
end

scope "/", Api do
pipe_through :api

resources "/organizations", OrganizationController
end

scope "/v1", Api.V1, as: :v1 do
pipe_through :api

resources "/users", UserController, only: [:create, :show, :update]
end
end

最佳答案

您需要配置 http://localhost:4000/v1/users 路由来发送包含 Access-Control-Allow-Origin 响应 header 的响应,并且还包括值中包含字符串“Content-Type”的 Access-Control-Allow-Headers 响应 header ,以及 Access-Control-Allow -Methods 响应 header ,值中包含字符串 POST

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS详细解释一下。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests解释了浏览器发送 OPTIONS 请求的原因,以及浏览器需要什么响应。

I get a 200 OK OPTIONS but it never sends the POST request.

这是因为如果 OPTIONS 响应不包含 Access-Control-Allow-Origin header 和 Access-Control-Allow-Headers code> 和 Access-Control-Allow-Methods header (其值如上所述),然后浏览器就在那里停止并且永远不会发送 POST

关于javascript - POST 请求在 Phoenix 变成 200 OPTIONS 但不发送以下 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44469584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com