2011-09-11 2 views
0

나는 거의 새것 같지만 걱정 스럽지만 어디서나 해결책을 찾을 수 없다는 문제가있다. 바니쉬는 GET 요청을 캐시하도록 설정되어있다. 요청의 본문에 매개 변수를 전달하기로 결정한 많은 매개 변수가있는 요청이 있습니다. 이것은 바니시를 우회 할 때 잘 작동하지만 바니시 (캐싱 용)를 통과 할 때 요청이 본문없이 전달되므로 바니시 뒤에있는 서비스가 실패합니다.Varnish/VCL 전문가 : Varnish fetch를 사용하여 요청 본문을 전달하는 방법은 무엇입니까?

나는 POST를 사용할 수 있지만 데이터를 얻고 싶습니다. 또한 패스 모드를 사용하면 바니시가 요청 본문을 전달할 수 있지만 패스 모드에서 요청한 내용은 캐싱되지 않는다는 것을 알 수 있습니다. 저는 이미 해시를 URL에 넣었 기 때문에, 일이 진행될 때 캐시에서 올바른 데이터를 얻을 수 있습니다 (URL이가는 한, 그렇지 않으면 모두 동일하게 보일 것입니다).

이제 문제는 vcl_fetch를 재 작성하여 요청 본문을 웹 서버에 전달하는 것입니다. 모든 힌트와 팁을 환영합니다! 사전에

감사

존이

+0

요청 본문과 함께 HTTP GET 요청을 원하십니까? 이 사이트에서 질문을 찾을 때까지는 가능하지 않다고 생각했습니다. http://stackoverflow.com/questions/978061/http-get-with-request-body. 가능하지만 권장하지는 않습니다. 나는 광택이이 사건을 구현하지 않는다고 상상할 수있다. ... – ivy

+0

나는 그것이 권장되지는 않지만 그것이 허용된다는 것을 안다. 그리고 URL 길이 제한을 둥글게한다. 바니시는 패스 모드에서 지원하지만 결과는 캐시하지 않습니다. 그것은 그들이 (아직?) 페치 모드에서 지원하지 않는 것 같아요 ... 그리고 페치 모드에서 응답을 캐시 할 수 있습니다. : (( –

답변

0

나는 매우 위험조차 할 수 있다면, 당신이 할 수 있다고 생각하지만,하지 않습니다 니스 것이다 캐시 또는 해시 테이블에 저장하지 요청 본문, 그것 때문에 동일한 URI와 다른 본문을 가진 두 요청 사이의 차이점을 볼 수 없습니다.

요청 본문을 읽을 수있는 VCL 키에 대해 들어 본 적이 없지만 요청이있는 경우 req.hash로 전달하여 요청을 차별화 할 수 있습니다.

어쨌든 요청 본문은 POST 또는 PUT ...과 함께 사용해야하며 POST/PUT 요청은 캐시해서는 안됩니다.

요청 본문은 서버에 데이터를 보내야합니다.

+0

추신 : 요청 (VCL "통과"이벤트)를 전달하면 예상대로 작동하지만 캐쉬되지는 않습니다.) –

0

내가 바로 질문을 가지고 확실하지 오전하지만 만약 ... 캐시는

내가 세부 사항을 알고하지 않습니다 ... 데이터를 가져 오는 데 사용됩니다,하지만 난 당신의 과정에서 디자인 문제가 있다고 생각 요청 본문과 VCL로는 어떤 방식 으로든 상호 작용하려고 시도합니다. 이 작업을 수행 할 VCL 변수/서브 루틴이 없습니다.

당신은 여기 VCL에서 사용할 수있는 변수 목록 (또는 남자 VCL)에서 찾을 수 있습니다

: 나는 고티에에 동의

, 당신은 당신의 시스템의 설계 문제를 갖고있는 것 같다 .

'도움이 되길 바랍니다.

+0

그 링크는 작동하지 않습니다. – jononomo

관련 문제