2010-12-06 2 views
6

이것은 모든 내부 서버 및 소프트웨어이므로 내 옵션이 매우 제한되어 있지만 여기에 있습니다. 이것은 이미 해결책에 대한 반창고이지만 선택의 여지가 없으므로 나는 단지 그것을 작동 시키려고 노력하고 있습니다.클래식 ASP에서 헤더 값을 읽는 데 문제가 있습니다.

사용자 인증 (이 서비스를 제어 할 수 없음)을 처리 할 서비스로 보호되는 내 서버에 간단한 .asp 파일이 있습니다. 사용자가이 .asp 파일로 이동하면 서비스를 통해 인증해야하며 서비스는 .asp 파일로 리디렉션합니다.

서비스가 사용자가 로그인 한 사용자를 식별 할 수 있도록 http 헤더에 사용자 정의 값을 삽입하고 있습니다 (나는 더 내려와야합니다). ASP에서 ALL_RAW 및 ALL_HTTP 값을 헤더에서 볼 때 모든 사용자 정의 값을 볼 수 있습니다. 그러나이 값들을 특별히 호출하려고 할 때 나는 아무것도 얻지 못합니다.

<% 
for each x in Request.ServerVariables 
    response.write("<B>" & x & ":</b> " & Request.ServerVariables(x) & "<p />") 
next 
%> 

및 사용자 정의 포함한 모든 키 표시 :

나는이 간단한 루프를 달렸다. 그러나 사용자 정의 값이 없음입니다. 값은 필요한 부분입니다.

사용자 정의 값에 대해 고유함을 찾을 수있는 유일한 점은 ALL_RAW 값에서 약간 다르게 보일 뿐이지 만 모두 ALL_HTTP에서 올바르게 보입니다. 내가 말할 수있는 한 정확하게, 그들은 정확하게 형식화되어있다. 표준 및 사용자 지정 값 간의 유일한 서식 지정 차이는 하이픈 대신 대/소문자와 밑줄입니다.

왜 이러한 사용자 지정 값을 읽을 수 없습니까?

+1

문제의 서비스에서 인코딩이 잘못되거나 null 바이트 또는 구문 분석을 망치는 다른 보이지 않는 문자를 삽입 할 수 있습니다.또는 서비스가 너무 늦게 헤더에 전달 될 수 있습니다. –

답변

1

편의상, Request.ServerVariables ("ALL_RAW")를 직접 구문 분석하지 않는 이유는 무엇입니까?

+0

사실, 나는이 질문을 게시 한 다음 바로 그 일을하도록 설정했습니다. 단, ALL_HTTP을 파싱하려고 시도하고있었습니다. 하지만 당신은 분명히 "그냥 ALL_HTTP 구문"수 없습니다. vbCrLf에서 분할되지 않습니다. 그러나 귀하의 언급에 ALL_RAW ALL_HTTP 대체 시도하고 그것을 vbCrLf, 그래서 지금은 향하고있어 방향으로 분할됩니다. – MitchelWB

12

내 대답을 찾았습니다. 나는이 루프

<% 
for each x in Request.ServerVariables 
    response.write("<B>" & x & ":</b> " & Request.ServerVariables(x) & "<p />") 
next 
%> 

는 헤더와 그 값에 있던 모든 이름의 목록을 반환를 실행

. 내가 찾고 있던 사용자 정의 값은 "HTTP_CUSTOM_ID"라는 이름으로 표시되며 ALL_HTTP 및 ALL_RAW의 값과 함께 표시 될 수 있지만 특정 값을 가져 오려고하면 빈 문자열이 반환됩니다.

<%=Request.ServerVariables("HEADER_CUSTOM_ID")%> 

전체 헤더를 보는

가, 아무것도 나를 인도하지 : 나는 다른 여기에 내가 수용하려고했던 동일한 서비스와 비슷한 상황을 통해 갔다 직장에서 누군가와 대화 (에 발견이 솔루션은 사용하는 것입니다 실제로 HTTP 대신 HEADER 접두사를 사용하는 것이 맞았습니다. 그리고 온라인에서 검색하는 방법에 대한 언급도 없었습니다. 그래서 여기에 내 질문에 대한 자신의 답변을 게시하고 있습니다.

+1

이것은 실제로 나를 도왔습니다. 나는 정말로 오래된 프로젝트에 대해 약간의 작업을해야했다. 감사. – jessegavin

+2

설명서의 목적으로 [IIS 서버 변수] (http://msdn.microsoft.com/en-us/library/ms524602%28VS.90%29.aspx)의 MSDN 페이지에 HEADER_ 접두사가 나와 있으며 [ 이 블로그 게시물] (http://blogs.msdn.com/b/david.wang/archive/2006/04/20/howto-retrieve-request-headers-using-isapi-asp-and-asp-net.aspx) 왜 필요한지에 대해 자세히 설명합니다. (요약 : CGI 사양은 "HTTP_"는 밑줄을 대시로 대체해야하므로 "HEADER_"가 없으면 구문 분석에서 "ALL_RAW"만 밑줄이있는 변수를 가져 오는 유일한 방법입니다. –

+0

감사합니다. – drew630

0

자신을 각 항목을 분석하는 것보다 더 좋은 방법이 있습니다. 다른 비트를 Request.ServerVariables("ALL_HTTP")의 값을보고 당신이 필요로하는 헤더를 찾을 이름.

모든 HTTP 헤더는 HTTP_로 시작합니다. 만약 일치하지 않을 경우을 찾고 HTTP_IF_NONE_MATCH (으)로 콜렉션에 있습니다. 가치를 얻으려면 Request.ServerVariables("HTTP_IF_NONE_MATCH")을 사용했습니다.

관련 문제