2017-01-11 6 views
1

나는 단위 테스트 HTTP 응답 헤더를 사용해 왔습니다. 헤더에서 쿠키를 받아야합니다. 두 개의 Set-Cookie 헤더를 다시 가져 오지만 인증에 하나 필요합니다. HTTP 헤더의 형식은 무엇입니까?

HTTP/1.1 200 OK 
Server: Cowboy 
Connection: close 
Set-Cookie: heroku-session-affinity=ADaDaANoA24IARpRKtf///8HYgABgzdiAAJZ5WECbAAAAAJtAAAABXdlYi4ybQAAAAV3ZWIuMWpcXMFamSToBPxyiOHM7o5AwvVZ3g__; Version=1; Expires=Thu, 12-Jan-2017 01:45:27 GMT; Max-Age=86400; Domain=xxxxxxxx.xxxx.xx; Path=/; HttpOnly 
X-Powered-By: Express 
Vary: Origin 
Access-Control-Allow-Credentials: true 
Content-Type: application/json; charset=utf-8 
Content-Length: 30914 
Etag: W/"78c2-veX2kgrO3zh118nYsOP80A" 
Set-Cookie: connect.sid=s%3Adl1_47SY9vlKlHOguBvjZpmaa2WTUhHG.O2j9YOShB4AX0rAC5RRj%2BeCXAB11s5q1DB4x4fiHE4A; Path=/; Expires=Fri, 13 Jan 2017 01:45:27 GMT; HttpOnly 
Date: Wed, 11 Jan 2017 01:45:27 GMT 
Via: 1.1 vegur 

내가이 값이 포함 된 테스트 파일 추가 : 리턴 된 헤더는
{ 
    "Server": "Cowboy", 
    "Connection": "close", 
    "Set-Cookie": "heroku-session-affinity=ADaDaANoA24IAXtpQOD///8HYgAAKehiAA6V12ECbAAAAAJtAAAABXdlYi4ybQAAAAV3ZWIuMWrNqkap0u4H0uG3Btrtlamaq2nQ5w__; Version=1; Expires=Wed, 11-Jan-2017 01:12:09 GMT; Max-Age=86400; Domain=xxxxxxxx.xxxx.xx; Path=/; HttpOnly", 
    "X-Powered-By": "Express", 
    "Vary": "Origin", 
    "Access-Control-Allow-Credentials": "true", 
    "Content-Type": "application/json; charset=utf-8", 
    "Content-Length": "30914", 
    "Etag": "W/\"78c2-veX2kgrO3zh118nYsOP80A\"", 
    "Set-Cookie": "connect.sid=s%3ACX3tfhPk9nlRtU8e8gtouQIx1kpP07h9.iExm%2F96Dgzuh289nmjwbYO49E0Bq0WwUHmN539IkudI; Path=/; Expires=Thu, 12 Jan 2017 01:12:09 GMT; HttpOnly", 
    "Date": "Tue, 10 Jan 2017 01:12:09 GMT", 
    "Via": "1.1 vegur" 
} 

내가 두 번째 Set-Cookie 값이 필요합니다,하지만 나는 그것의 값에 액세스하려고 할 때, 나는 처음 Set-Cookie를 얻을 수 대신. 머리글을 사전에 넣기 때문에 나는 추측하고 있습니다. 그러나 단위 테스트에서 응답을 스텁하는 경우 헤더에 필요한 형식은 사전입니다. 사전에 같은 키 두 개를 가질 수 없기 때문에 하나만 Set-Cookie 헤더를 얻고 있습니다.

내가 잘못하고 있습니까?

답변

1

RFC 7230, Section 3.2.2은 HTTP 헤더를 처리하는 방법을 다룹니다. 그것은 특히 RFC 2616을 대체, 그것은 말한다 : 해당 헤더 필드의 전체 필드 값 중 하나가 쉼표로 정의되지 않는 한

보낸 사람이 메시지에서 같은 필드 이름으로 여러 헤더 필드를 생성해서는 안 - 분리 된 목록 [ie, # (values)] 또는 헤더 필드는 잘 알려진 예외입니다 (아래 명시). (RFC 6265 적용) 구문을 쉽게의 쉼표로 구분 된 목록에 적합하지 않기 때문에 불행히도 사용 사례에 대한

그리고, 이들의 Set-Cookie입니다 하나는 "잘 알려진 예외"를 언급, 쿠키 값.

즉, HTTP 헤더를 표현하기 위해 사전/해시 테이블 구조를 사용하면 이 일반적으로 일 때 작동하지만, Set-Cookie과 같은 경우에는 중단됩니다. 헤더를 얻는 다른 방법이 있습니다. 예를 들어 this StackOverflow post을 참조하십시오. 또는 머리글 단위 테스트를 수행 할 수있는 경우 Set-Cookie 다른 방법이 있습니다.

희망이 도움이됩니다.