엑셀 : 하이퍼 링크 호출 URL을 세 번 클릭


1

Excel에서 하이퍼 링크를 클릭하면 리소스가 세 번 (또는 URL을 방문한 경우 두 번) 호출됩니다. 브라우저에서 예상대로 첫 번째와 두 번째 시간을 숨기고 세 번째로 숨 깁니다.

세부

Excel 2016에서 다음과 같은 HYPERLINK-formular를 사용하고 있지만 공식화 기와 하이퍼 링크 기능없이 작업 할 때도 문제가 발생합니다.

=HYPERLINK(CONFIRM_NO_DATA_URL&B3)

어쨌든, 이와 같은 URL을 호출해야합니다

http://example.org/index.php?action=replyToEmailId&emailId=123123123

셀을 클릭하면 올바른 URL로 새 탭이 열립니다.

그러나 : URL은 실제로 세 번 호출됩니다 (첫 번째 이메일은 짧은 지연으로 3 개의 이메일이 전송되었으므로 알았습니다).

Http-Headers를 파일에 넣어서 이것이 어디서 왔는지 알아 내려고했습니다. 엑셀은 브라우저에서 링크를 열기 전에 하이퍼 링크를 내부적으로 호출합니다. 또한 제공된 Http-Headers는 최종 요청과 다릅니다.

첫 번째 숨겨진 요청

이것은 HEAD Http-Request-Method를 사용한 첫 번째 요청입니다.

{
    "HTTP_USER_AGENT": "Microsoft Office Excel 2014 (16.0.10730) Windows NT 10.0",
    "HTTP_X_OFFICE_MAJOR_VERSION": "16",
    "HTTP_X_MS_COOKIEURI_REQUESTED": "t",
    "HTTP_X_FEATUREVERSION": "1",
    "HTTP_ACCEPT_AUTH": "badger,Wlid1.1,Bearer",
    "REMOTE_PORT": "50216",
    "REQUEST_METHOD": "HEAD",
    "REQUEST_TIME_FLOAT": 1537284526.406,
    "REQUEST_TIME": 1537284526
}

HEAD 메소드는 서버가 응답으로 메시지 본문을 리턴해서는 안된다는 점을 제외하고는 GET과 동일합니다. 출처 : [w3.org] [1]

두 번째 숨겨진 요청

두 번째 요청은 식별하기 어렵습니다. Excel은 여러 사용자 에이전트를 조롱하는 것처럼 보입니다.

{
    "HTTP_ACCEPT": "*\/*",
    "HTTP_USER_AGENT": "Mozilla\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office)",
    "HTTP_ACCEPT_ENCODING": "gzip, deflate",
    "REMOTE_PORT": "50221",
    "REQUEST_METHOD": "GET",
    "REQUEST_TIME_FLOAT": 1537284527.807,
    "REQUEST_TIME": 1537284527
}

의문

Excel 측 에서이 동작을 방지하는 방법은 무엇입니까?

(필자는 " ms-office "또는 REQUEST_METHOD " HEAD "를 포함하는 HTTP_USER_AGENT를 차단하여 PHP 스크립트에서이를 방지 할 수 있지만 깨끗한 솔루션을 선호합니다.

사이드 노트

업데이트 # 1

방금이 SO -question을 발견했습니다.이 질문은 동일한 행동을 설명합니다 : https : //.com/questions/24993813/link-in-excel-cause-duplicate-invocation

업데이트 # 2 깊은이로 파고 동안 내가 더 찾을보다 종류-의 연결 SO 이 "기능"의 좋은 설명을 제공하는이처럼, -threads : https://webmasters.stackexchange.com/a/71151

그러나 약간의 차이가 있습니다. 필자의 경우 첫 번째 요청의 요청 방법은 HEAD이며 위에서 언급 한 답변과 달리 OPTION이 아닙니다. 어쨌든, 이것은 여전히 ​​문제 해결에 도움이되지 않습니다.

업데이트 # 3 이것을 재현하는 동안 두 개가 아닌 세 개의 요청이 있음을 알았습니다.

답변:


0

확실하지는 않지만 테스트 할 때 Excel에서 "인터넷 탐색기"에 링크를 열어 보안 또는 존재 여부를 확인하는 것으로 나타났습니다.

예를 들어 잘못된 URL을 입력하면 Excel 디스플레이를 열 수 없습니다. 보안 문제가 발생했습니다.

나는 시험했다

=HYPERLINK("https://test.test")

이 메시지 오류 메시지를 받았습니다

그래서 Excel에서 이런 종류의 문제를 "수정"할 수 있다고 생각하지 않습니다.


그렇습니다. 일종의 기능 인 것 같지만 Excel에서 기능을 수행하지 못하게하는 것이 좋습니다. 나에게, 사용자로서, 실제 브라우저에서 404를받을 때도 괜찮습니다.
nr

0

이 동작 (적어도 첫 번째 HEAD 요청)은 Office 2007에 도입 된 이른바 Microsoft Office Protocol Discovery 에 의해 발생합니다 ( blogs.msdn.microsoft.com 참조) .

HEAD 요청의 목적은 내용이 단순히 읽기 전용 세션을 위해 스트리밍되는 임시 리소스가 아니라 URL 위치에 문서로 존재하는지 확인하는 것입니다.

HEAD 메소드는 서버가 응답으로 메시지 본문을 리턴해서는 안된다는 점을 제외하고는 GET과 동일합니다. 출처 : w3.org

이 technet 스레드 에 따르면 이 기능을 비활성화 할 방법이 없습니다.

해결 방법

이 기능을 실제로 비활성화 할 수있는 방법이 없으므로 서버 쪽에서 만 요청을 차단하거나 클라이언트 쪽 방화벽을 사용할 수 있습니다.

PHP- 반면에이 두 줄로 요청을 거부 할 수 있습니다. 이것은 단순히 첫 번째 숨겨진 요청에 대한 REQUEST_METHOD를 포착하고 두 번째 숨겨진 요청에서 이상한 사용자 에이전트를 다시 확인합니다.

    if ($_SERVER['REQUEST_METHOD'] == 'HEAD' OR 
        strpos($_SERVER['USER_AGENT'], 'ms-office') != NULL) {

        throw new Exception('This script may only be called directly');
        die();

    }

헤즈 업 : 이것은 위에서 설명한 시나리오에서 작동하며, 실제로 "원하는"트래픽 차단을 피하기 위해 자유롭게 조정하십시오.

추가 자료

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.