我正在尝试使用“ put”动词使用http协议进行一次更新,但是我被403禁止使用“请求方法:chrome中的选项”。
如果我尝试将动词从PUT更改为POST,那么它会起作用。
这是我的服务器代码(春季)
@PutMapping("/path")
public ResponseEntity putMethod(@RequestBody Dto dto) throws URISyntaxException {
log.debug("put is called");
return ResponseEntity.ok().build();
}
这里是我的角度代码
update(dto: dto) {
return this.http
.put<Dto>(this.resourceUrl + '/path', dto, { observe: 'response' })
.pipe();
}
如果我更改了角度,并且弹簧日志被正确书写,但是我需要进行更新,我想使用正确的动词
Chrome日志
Request URL: http://localhost:9080/path
Request Method: OPTIONS
Status Code: 403 Forbidden
Remote Address: 127.0.0.1:9080
Referrer Policy: no-referrer-when-downgrade
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Connection: Close
Content-Language: it-IT
Content-Length: 20
Date: Fri, 05 Jul 2019 15:19:14 GMT
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
X-Powered-By: Servlet/3.1
Provisional headers are shown
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: PUT
Origin: http://localhost:4200
Referer: http://localhost:4200/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
这是我的Java帖子映射
@PostMapping("/path")
public ResponseEntity postMethod(@RequestBody Dto dto) throws URISyntaxException {
log.debug("post is called");
return ResponseEntity.ok().build();
}
和角度邮政编码
post(dto: dto) {
return this.http
.post<Dto>(this.resourceUrl + '/path', dto, { observe: 'response' })
.pipe();
}
在Chrome日志中用于发布请求(工作)
Request URL: http://localhost:9080/path
Request Method: POST
Status Code: 200 OK
Remote Address: 127.0.0.1:9080
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Origin: *
Content-Language: it-IT
Content-Length: 16
Content-Type: application/json;charset=UTF-8
Date: Fri, 05 Jul 2019 15:48:01 GMT
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
X-Powered-By: Servlet/3.1
Provisional headers are shown
Accept: application/json, text/plain, */*
Content-Type: application/json
Origin: http://localhost:4200
Referer: http://localhost:4200/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
答案 0 :(得分:0)
后端服务器中是否允许使用动词PUT?我看不到前端方面的任何问题。
答案 1 :(得分:0)
我看到您正在从9090
调用在4200
上运行的API,您可能会得到显示Access control allow origin
错误的镶边日志。
如果这是您需要的,则可能必须允许您的出身。里面会有安全隐患。因此,您在执行此操作时必须谨慎。
添加CrossOrigin
将允许此流程。
@CrossOrigin(origins = "http://localhost:4200")
@PutMapping("/path")
答案 2 :(得分:0)
最后,我在我的dev application.properties中使用了以下设置:
cors.allowed-origins=*
cors.allowed-methods=*
cors.allowed-headers=*
cors.exposed-headers=Authorization,Link,X-Total-Count
cors.allow-credentials=true
因为在开发环境中,我使用位于localhost:4200的节点服务器,所以在生产环境中我向localhost:9080发出http请求,而angular和java在同一端口(设置了maven-war-plugin和webResources)在同一服务器上不需要此设置。