提取api不返回Location标头 [英] fetch api not returning the Location header

查看:164
本文介绍了提取api不返回Location标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的标题从chrome Version 52.0.2743.82 (64-bit)复制(尚未确定是否隔离到chrome)

Here are my headers copied from chrome Version 52.0.2743.82 (64-bit) (have yet to determine whether this is isolated to chrome)

Request URL:http://localhost:8080/users
Request Method:POST
Status Code:201 
Remote Address:[::1]:8080

Response Headers
view parsed
HTTP/1.1 201
Access-Control-Allow-Origin: http://localhost:9000
Vary: Origin
Access-Control-Allow-Credentials: true
X-Application-Context: application:xenoterracide,development
Location: http://localhost:8080/users/17
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 0
Date: Thu, 18 Aug 2016 13:51:19 GMT

Request Headers
view parsed
POST /users HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 92
Pragma: no-cache
Cache-Control: no-cache
accept: application/json
Origin: http://localhost:9000
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36
content-type: application/json
DNT: 1
Referer: http://localhost:9000/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

这是我创建提取客户端的方式

here's how I'm creating the fetch client

import 'isomorphic-fetch';
import { Router, RouterConfiguration } from 'aurelia-router';
import { Logger } from 'aurelia-logging';
import { Container, LogManager, autoinject } from 'aurelia-framework';
import { Route } from './main/Route';
import { HttpClient } from 'aurelia-fetch-client';

@autoinject
export class App {
router: Router;
private log: Logger = LogManager.getLogger( App );

constructor( container: Container ) {
    let client: HttpClient = new HttpClient;
    client.configure( config => {
        config.useStandardConfiguration()
            .withBaseUrl( 'http://localhost:8080/' )
            .withDefaults( {
                credentials: 'include',
                headers: {
                    Accept: 'application/json'
                }
            } );
    } );
    container.registerSingleton( HttpClient, () => client );
}

这是我的服务代码

@autoinject
export class RegistrationSvc {
private log: Logger = LogManager.getLogger( RegistrationSvc.name );

constructor( private client: HttpClient ) {
}

register( user: RegisterUser ): Promise<any> {
    let basic = user.email + ':' + user.passwordCredentials.password;
    let log = this.log;
    log.debug( `registering ${ basic }` );

    return this.client.fetch( 'users', {
        method: 'post',
        body: json( user )
    } ).then( response => {
        let location = response.headers.get( "Location" );
        log.debug( `location ${ location }` );
    } );

我在chrome的控制台中运行了

I ran this in chromes's console

response.headers.forEach( v => console.log( v ) );
VM783:1 no-cache
VM783:1 no-cache, no-store, max-age=0, must-revalidate
VM783:1 0
undefined

...其余的标题在哪里?他们为什么失踪?

... where are the rest of my headers? why are they missing?

推荐答案

默认情况下,您只能从JavaScript提取响应中获取的标头是:

By default the only headers you will be able to get to in your JavaScript from a fetch response are:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma
  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

要公开其他信息,请发送 Access-Control-Expose-Headers 标头中,值要么是您要公开的标头的显式列表,要么是*公开所有标头.

To expose others, send a Access-Control-Expose-Headers header in the response, with the value either being an explicit list of just the headers you want to expose, or * to expose them all.

这篇关于提取api不返回Location标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆