Как настроить прокси для поддержки перекрестных запросов с помощью GCDWebServer

Я рендеринг местного веб-контента на WKWebView используя локальный сервер GCDWebServer, но у меня есть запрос о происхождении из-за файлов cookie, находящихся в бэкэнде. Как я мог настроить прокси, который решит эту проблему.

ПРИМЕЧАНИЕ: я попытался реализовать что-то на GitHub под названием CorsProxy но он устарел и откровенно не решает мою проблему, создавая прокси.

Я сталкивался с ответами на аналогичную проблему, однако я запускаю свой webView на GCDWebServer и не знаю, как создать такой прокси на этом конкретном локальном сервере?

Любая помощь?

Вот мой код:

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler {





var wkWebView: WKWebView!
var webServer = GCDWebServer()

var contentController = WKUserContentController()


func initWebServer() {
    let folderPath = Bundle.main.path(forResource: "www", ofType: nil)

    webServer.addGETHandler(forBasePath: "/", directoryPath: folderPath!, indexFilename: "index.html", cacheAge: 0, allowRangeRequests: true)

    webServer.start(withPort: 8080, bonjourName: "GCD Web Server")

}


public override func viewDidLoad() {
    super.viewDidLoad()

    initWebServer()

    let userScript = WKUserScript(source: "helloMsg2(\"boooo hoo hoo hoooo\")", injectionTime: .atDocumentEnd, forMainFrameOnly: true)

    contentController.addUserScript(userScript)
    contentController.add(self, name: "callback")

    let config = WKWebViewConfiguration()
    config.userContentController = contentController


    wkWebView = WKWebView(frame: view.bounds, configuration: config)
    wkWebView.scrollView.bounces = false
    wkWebView.uiDelegate = self
    wkWebView.navigationDelegate = self
    view.addSubview(wkWebView!)

    wkWebView.load(URLRequest(url: webServer.serverURL!))
}

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if message.name == "callback" {

        print("message from javaScript is: \(message.body)")
    } else {
       print("message from javaScript is: \(message.body)")
    }
}

3 ответа

Это может помочь в поддержке CORS. Просто добавь Access-Control-Allow-Origin: * в заголовки ответа.

Вам нужно будет свернуть собственную реализацию -addGETHandlerForBasePath...добавить Access-Control-Allow-Origin: * заголовок, так как этот API не позволяет настраивать заголовки.

См. Исходный код в https://github.com/swisspol/GCDWebServer/blob/master/GCDWebServer/Core/GCDWebServer.m#L1015.

Просто делать:

GCDWebServerResponse * yourResponse = [GCDWebServerResponse new]; [yourResponse setValue:@"*" forAdditionalHeader:@"Access-Control-Allow-Origin"];

Другие вопросы по тегам