저는 분당 한 번씩 데이터를 업데이트하는 웹 서버를 가지고 있으며 모든 유형의 클라이언트가 해당 데이터를 사용할 수 있도록하려고합니다. 대역폭을 줄이기 위해 IF-MODIFIED-SINCE 및/또는 IF-NONE-MATCH를 사용하여 조건부 GET을 지원하는 PHP 스크립트를 설정합니다. 아이디어는 클라이언트가 30 초마다 폴링 할 수 있기 때문에 아무 것도 놓치지 않고 중복 데이터를 얻지 못하도록합니다.JSONP로 업데이트를 폴링하는 방법은 무엇입니까?
대부분의 클라이언트 유형에 모두 적합하며 표준 HTTP 조건부 GET 의미론을 지원하는 클라이언트에서 작동한다는 것을 확인했습니다.
그러나 JSONP는 DOM으로 < 스크립트 > 태그를 삽입하고 브라우저 핸들 일을 할 수 있기 때문에 자바 스크립트가 작동하지 않습니다 - 조건에 대한 (내가 아는 적어도 없음) 아무런 지원이 없다는 <옵니다 스크립트 > 태그.
그래서 PHP 스크립트를 수정하여 etag 값 전달을 지원했습니다. 반환 된 데이터에는 해당 분에 고유 한 etag 값이 포함됩니다. JavaScript 클라이언트가 서버에서 데이터를 수신하면 etag 값을 저장하므로 후속 요청에서 해당 값을 사용할 수 있습니다. 요청의 형식은 다음과 같습니다.
http://api.mydomain.com/script.php?fmt=json&callback=jscallback&etag=ab79bc65e
데이터의 etag가 전달 된 etag와 일치하지 않으면 새 데이터를 보냅니다.
이 모든 것이 잘 작동하고 jQuery를 사용하여 코드를 작성하는 것이 놀랍도록 쉽습니다. 내 딜레마, 비록 etag가 일치하면 어떻게 해야하는지입니다. 나는 두 가지 선택을 참조하십시오
- 반환 (안 수정)는 HTTP (304)
- 반환하는 HTTP 200 (OK)을하지만, (등 수정 날짜, ETAG) 단지 헤더 정보를 포함하는 반환 된 데이터와 실제 데이터 항목이 없습니다.
첫 번째 작업을 수행하면 JavaScript 클라이언트 코드가 크게 단순화됩니다. 브라우저는 주사 된 < 스크립트 > 태그에 대해 304 응답을 얻으면 올바르게 작동하는 것 같습니다. 하지만 ... 뭔가가 나에게이 솔루션에 대해 귀찮게합니다. 나는 그것이 무엇인지 모르지만, 나는 브라우저에 따라 다를 수있는 행동에 의존하는 것처럼 보입니다. 일부 브라우저는 304를 얻으면 오류를보고하기로 결정할 수 있습니다.
두 번째 작업을 수행하려면 서버에서 약간 더 많은 작업이 필요하고 약간 더 많은 대역폭이 필요하며 클라이언트가 데이터를 검사하여 데이터 업데이트되었습니다. 그것은 모두를위한 더 많은 일이지만 청소기처럼 보입니다.
내 질문에. 이 데이터를 얻기 위해 자바 스크립트 클라이언트를 작성했다면 어떤 것이 좋을까요? "성공"콜백을 절대로 호출하지 않는 침묵 한 실패? 또는 데이터에 상태가없는 "성공"수익이 있습니까? 세 번째 옵션?