![](/img/trans.png)
[英]HTTP Put request works using Sun Jersey Client 1.19, but same request is not using SoapUI or Postman
[英]Web Client PUT request returns 403 but Postman request does not - Jersey REST API on Glassfish
我正在使用帶有 React.js 前端的 Jersey 和 Glassfish 4.0 編寫 CRUD 應用程序。 我的應用類:
@ApplicationPath("API")
public class AppServ extends Application
{
@Override
public Set<Class<?>> getClasses()
{
Set<Class<?>> classes = new HashSet<>();
classes.add(RestRoot.class);
classes.add(JacksonFeature.class);
return classes;
}
@Override
public Set<Object> getSingletons()
{
Set<Object> out = new HashSet<>();
out.add(new CorsFilter());
return out;
}
}
我的 CORS 過濾器:
@Provider
@Priority(Priorities.HEADER_DECORATOR)
public class CorsFilter implements ContainerResponseFilter
{
@Override
public void filter(ContainerRequestContext requestContext,
ContainerResponseContext responseContext) throws IOException
{
responseContext.getHeaders().add(
"Access-Control-Allow-Origin", "*");
responseContext.getHeaders().add(
"Access-Control-Allow-Credentials", "true");
responseContext.getHeaders().add(
"Access-Control-Allow-Headers",
"origin, content-type, accept, authorization, cookie");
responseContext.getHeaders().add(
"Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
}
}
我的前端執行的提取:
fetch("MY_SERVER_IP:8080/FitAppBackend/API/food", {
method: 'PUT',
credentials: 'include',
headers: {
'Accept': '*/*',
'Content-Type': 'application/json',
'User-Agent': ''
},
body: JSON.stringify({
name: this.state.fName,
cals: this.state.cals,
prot: this.state.prot,
carbs: this.state.carbs,
fat: this.state.fat
})
});
當我用 Postman 測試 API 時,我得到 204 響應,但上面的獲取給了我 403。我懷疑它與我的 CORS 過濾器有關,或者 G_ENABLED_IDPS=google cookie 與由我的瀏覽器放置。 任何幫助將不勝感激; 我一直試圖解決這個問題幾個小時。
Access-Control-Allow-Headers
響應頭的目的是告訴瀏覽器允許請求的請求頭。 您擁有的列表如下: origin, content-type, accept, authorization, cookie
。 但是在您的請求中,您試圖設置User-Agent
標頭。 如果您刪除標題或將其添加到列表中,它應該可以工作。
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.