|
Dele af Vis Stedet anvender AJAX til diverse søgefunktionaliteter. Dette betyder at der vil opstå et problem med internet-browsernes "same server policy"; scripts på en HTML side må ikke kontakte en anden server end den siden kommer fra. Dette er et kendt problem med AJAX hvis der skal anvendes forskellige datakilder, og der ekistererer par workarounds. Vi anbefaler den simple løsning at sætte en proxy op på egen server, og lade scriptet kontakte denne adresse, som derefter kontakter Vis Stedets datakilder, og spejler resultatet. (En sådan proxy-tjeneste bør sættes op så den kun kan kontakte specifikke servere og/eller URLs, så den ikke kan bruges helt generelt af 3.part til f.eks. at maskere angreb mod andre servere). Her er et eksempel på hvordan det kan laves i C#: Proxy.aspx<%@ Page Language="C#" CodeBehind="Proxy.aspx.cs" Inherits="VisStedetProxy.Proxy" %>
Proxy.aspx.cs using System; using System.IO; using System.Net; using System.Web;
namespace VisStedetProxy { public partial class Proxy : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string path = Request["path"]; if (path != null) { string url = "http://VisStedet.kms.dk/" + path + "?"; foreach (string k in Request.QueryString.AllKeys) { if (!"path".Equals(k)) { url += k + "=" + HttpUtility.UrlEncode(Request[k], System.Text.Encoding.Default) + "&"; } } url = url.Remove(url.Length - 1); try { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); Stream input = req.GetResponse().GetResponseStream();
byte[] bytes = new byte[4096]; int numBytes; while ((numBytes = input.Read(bytes, 0, 4096)) > 0) Response.OutputStream.Write(bytes, 0, numBytes); } catch (Exception ioe) { Response.Write("<html><body>Could not read from<br/>" + url + "<br>" + ioe.Message + "</body></html>"); } } else { Response.Write("<html><body>At least parameter "path" must be given.</body></html>"); } } } }
|
|
Last Updated ( Wednesday, 27 August 2008 14:15 )
|