httpclient 请求 nginx 400 bad request怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpclient 请求 nginx 400 bad request怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A nginx 400 Bad request是request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。 所幸在nginx中是有办法解决这个问题: 在nginx.conf中,将client_header_buffer_size和large_client_header_buffers都调大,可缓解此...

HttpClient Angular 5 不发送请求

【中文标题】HttpClient Angular 5 不发送请求【英文标题】:HttpClient Angular 5 does not send request 【发布时间】:2018-02-08 17:14:25 【问题描述】:

我在 Angular 5 中遇到了 HttpClient 的问题。HttpClient 没有在两个指定的组件上发送任何请求(我在控制台中看不到任何 xhr 登录)。在其他组件上,一切都很好。

从组件 A 调用 ApiService POST 方法(像 HttpClient 的包装器一样工作的自定义服务),但是当我从组件 B 调用此方法时 HttpClient 似乎被冻结了。

我的应用中有很多使用 ApiService 的组件。一切都很好。我不知道出了什么问题。

---回应

ApiService.ts

@Injectable()
export class ApiService

    private errorListeners : Map<string, Array<(details ?: any) => any>> =
        new Map<string, Array<(details ?: any) => any>>();

    public constructor(private http: HttpClient)
    

    

    public post<T>(path : string, data : any, urlParams : any = null) : Observable<any>
    
        return this.http.post<T>(`$environment.api.path$path`, data, 
            params: urlParams
        ).catch(this.catchErrors()).map(response => 
            if (response['Error'])
                throw response['Error'];
            

            return response;
        );
    


-- 组件

   @Component(
    selector: 'login-register-component',
    templateUrl: './register.component.html',
    styleUrls: [
        './../../assets/main/css/pages/login.css'
    ]
)
export class RegisterComponent implements OnInit, OnDestroy


public constructor(private route: ActivatedRoute,
                       private router: Router,
                       private userService : UserService,
                       private apiService: ApiService
    )
    
        this.apiService.post('/some-endpoint', null, ).subscribe(res => 
console.log(res);

);


即使我直接将 HttpClient 注入到组件中,HttpClient 也不起作用

-- 同一模块中的其他组件 示例调用:(有效)

public loginTraditionalMethod(emailAddress : string, plainPassword : string)
    

        this.apiService.post('/auth/email', 
            email: emailAddress,
            password: plainPassword
        , ).subscribe(res => 
           console.log(res);
        )

    

【问题讨论】:

了解一些方法:服务中的 http 调用,以及如何在组件中调用服务 @David 我编辑了帖子 其他组件中如何调用service?您可以发布组件 A 和 B 的调用吗? @David 我添加了一个调用服务方法的代码示例 我滑倒了。在组件而不是调用 subscribe() 中,我使用了 map()。我在上面的帖子中的示例代码也犯了错误,我没有复制代码,我重写了它,过了一会儿我发现我在原始代码中犯了错误。所以上面的代码是正确的,并且似乎可以正常工作。很抱歉给您带来麻烦,但感谢您的帮助。我花了 3 个小时才看到这个愚蠢的小姐 【参考方案1】:

我遇到了同样的问题,订阅http.get() 后没有 xhr 请求。这是一个忘记密码功能的请求,因此我没有连接到应用程序。

请求被一个 http 令牌拦截器拦截,如果没有检测到会话,该拦截器返回一个空的 Observable。

不知道,这可能对某人有帮助...

【讨论】:

谢谢好心的陌生人!这正是我所需要的! 这个“http 令牌拦截器”在哪里?在应用程序中,还是在 API 服务器上?可以发一些代码吗? 令牌拦截器是客户端,看起来像这样:medium.com/@ryanchenkie_40935/… 如果我们没有通过身份验证,以下代码会阻止任何请求被分派:if (!this.session.isAuthenticated() &amp;&amp; !this.session.isFetching()) this.session.dispatchSessionLost(); return Observable.empty();

以上是关于httpclient 请求 nginx 400 bad request怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

apache HttpClient关于digest的一个大坑

第二次调用 C# HttpClient 错误请求

HTTPClient 返回 400 Bad Request 但 Postman 在 C# 中返回 201

尝试在 Java 中使用 HttpClient 发送 HTTP Post GraphQL 查询时出现 HTTP 400

如何记录传出的 HttpClient 请求?

Nginx 在 /socket.io 请求上返回 400