외부 API용 JSON/JSONP 프록시를 생성하려고 합니다. 지금까지 내 구성은 다음과 같습니다.
server {
listen 80;
server_name api.example.com;
location /api/ {
if ( $arg_callback ) {
echo_before_body '$arg_callback(';
echo_after_body ');';
}
if ($args ~ (.*)callback=[^&]*(.*)) {
set $args $1$2;
}
proxy_pass http://api.external.com;
rewrite ^/api/(.*)$ /external/api/$1?api_key=MY_KEY$is_args$args break;
}
}
프록시는 매개변수 없이도 잘 작동하며 callback
유효한 JSON을 반환합니다. 그러나 를 포함하면 callback
콜백을 래핑하지 않고 여전히 JSON만 반환합니다. callback
요청에 인식할 수 없는 옵션이 포함되어 있으면 오류를 반환하기 때문에 외부 API를 호출하기 전에 매개변수를 제거해야 합니다 . 요청을 전달하기 전에 요청에서 콜백 매개변수를 제거하지만(존재하는 경우) JSONP를 생성하는 데 계속 사용하려면 어떻게 해야 합니까?
답변1
읽어 봤니만약에 악하다?
래퍼 없이 여전히 JSON만 반환합니다.
여기 포장지는 무엇입니까? 첫 번째/두 번째 경우 또는 둘 다?
편집하다:
정규식이 유효한지 테스트하기 위해 간단한 디버깅을 수행하겠습니다(무슨 일이 일어나고 있는지 확인하려면 로그 수준을 높이세요)(솔루션은 테스트되지 않았습니다).
server {
listen 80;
server_name api.example.com;
location /api/ {
rewrite ^/(.*)callback=[^&]*(.*)$ /testurl/$1/$2 last;
}
location /testurl {
return 200;
}
}
이 단계 후에 두 번째 IF - 문을 삽입하고 이것이 작동하면 마침내 첫 번째 문이 됩니다.
해당 콜백 매개변수를 사용하면 URL이 어떻게 생겼나요?