En mi aplicación, permito al usuario abrir una página externa en un UIWebView incrustado. ¿Puedo configurar el referidor que se envía con esa solicitud? Me gustaría que mi aplicación obtenga la "credibilidad" cuando el usuario abre estas páginas externas.Especificación del referer HTTP en UIWebView incrustado
Respuesta
Ajuste el referer usando - setValue:forHTTPHeaderField:
NSMutableURLRequest* request = ...;
[request setValue:@"https://myapp.com" forHTTPHeaderField: @"Referer"];
Pero tenga en cuenta que de acuerdo con el RFC HTTP que no debería, debido a que su aplicación no es direccionable usando un URI:
El campo de referencia NO DEBE se enviará si el URI de solicitud se obtuvo desde una fuente que no tiene su propia URI, como la entrada desde el teclado del usuario .
... a menos que esté utilizando un protocolo personalizado enlazado a su aplicación (myapp: //blah.com/blah).
Puede create one y llamar al loadRequest: manualmente o interceptar una solicitud normal hecha por el usuario.
- (BOOL) webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType) navigationType
{
NSDictionary *headers = [request allHTTPHeaderFields];
BOOL hasReferer = [headers objectForKey:@"Referer"]!=nil;
if (hasReferer) {
// .. is this my referer?
return YES;
} else {
// relaunch with a modified request
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSURL *url = [request URL];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"GET"];
[request setValue:@"https://whatever.com" forHTTPHeaderField: @"Referer"];
[self.webView loadRequest:request];
});
});
return NO;
}
}
No he utilizado yo mismo, pero parece que NSURLProtocol
es la forma aprobada para interceptar y modificar las peticiones de URL. He aquí un tutorial: http://www.raywenderlich.com/59982/nsurlprotocol-tutorial
Estoy usando su solución de enviar la solicitud al NSMutableURLRequest
, pero como no está documentado que se trata de una solicitud mutable, Apple podría tener algún riesgo de usar un objeto inmutable en el futuro.
- 1. Cómo falsificar http referer
- 2. Internet Explorer http referer problema
- 3. Cómo guardar http referer en rieles
- 4. Animate incrustado propiedad marco UIWebView
- 5. Cambiar el referer http en javascript
- 6. Solicitando http://mobile.twitter.com en UIWebView
- 7. ¿Cómo me deshago del borde blanco alrededor del video de youtube incrustado en UIWebView?
- 8. ¿Fue intencional la falta de ortografía del nombre de campo HTTP Referer?
- 9. Facebook-ios-sdk con UIWebView incrustado
- 10. Flash en Firefox no envía el valor HTTP REFERER
- 11. ¿Debo verificar HTTP Referer en OAuth 2 Callback?
- 12. Establecer el encabezado del Referer en asp.net
- 13. Url fragment y Referer header
- 14. Determinar Referer en PHP
- 15. Especificación del lenguaje PHP?
- 16. Redirigir sobre la base del referer HTTP_REFERER htaccess
- 17. Nombre del recurso incrustado
- 18. ¿Una redirección 302 mantendrá la cadena del referer?
- 19. Especificación del lenguaje principal del esquema
- 20. Redirigiendo al referer
- 21. Alternativa al encabezado "Referer"
- 22. Procedimiento de especificación del paquete
- 23. Cargar imagen del recurso incrustado
- 24. Especificación del tipo de contenido en rspec
- 25. BizTalk: Encontrar la especificación del documento no
- 26. Cargar plantilla del recurso incrustado
- 27. establecer la URL del referer con la solicitud ajax
- 28. ASPNET MVC: ¿Cómo encontrar la ruta del referer (sic)?
- 29. Bloque por useragent o referer vacío
- 30. Especificación del número L (largo) de Java
Gracias por la nota de la RFC. No estaba enterado de eso. La pantalla en la que mi usuario está cuando abren el enlace externo en el navegador tiene su propio URI, por lo que no me corresponde. –
¿De dónde obtengo la instancia de NSMutableURLRequest? UIWebViewDelegate no me da la versión mutable. Encontré algunas referencias que decían que podía lanzarlo de manera confiable, pero me pregunto si hay una manera más agradable. –
No sé si eso es kosher, pero puedes interceptar y volver a lanzar la solicitud. – Jano