菜鸟教程小白 发表于 2022-12-11 19:53:02

ios - 如何使用 GCDWebServer 配置代理以支持跨域请求


                                            <p><p>我正在使用 <code>GCDWebServer</code> 的本地服务器在 <code>WKWebView</code> 上呈现本地 Web 内容,但由于 cookie 位于后端,我有一个跨域请求。我该如何配置一个代理来解决这个问题。</p>
<p>注意:我已经尝试在 GitHub 上实现一个名为 <code>CorsProxy</code> 的东西,但它已经过时了,坦率地说并不能解决我的问题,创建一个代理。</p>
<p>我遇到了解决类似问题的答案,但是我在 GCDWebServer 上运行我的 webView,但我不知道如何在这个特定的本地服务器上创建这样的代理?</p>
<p>有什么帮助吗?</p>
<p>这是我的代码:</p>
<pre><code>class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler {

    var wkWebView: WKWebView!
    var webServer = GCDWebServer()   
    var contentController = WKUserContentController()   

    func initWebServer() {
      let folderPath = Bundle.main.path(forResource: &#34;www&#34;, ofType: nil)            
      webServer.addGETHandler(forBasePath: &#34;/&#34;, directoryPath: folderPath!, indexFilename: &#34;index.html&#34;, cacheAge: 0, allowRangeRequests: true)            
      webServer.start(withPort: 8080, bonjourName: &#34;GCD Web Server&#34;)            
    }

    public override func viewDidLoad() {
      super.viewDidLoad()
      
      initWebServer()
      
      let userScript = WKUserScript(source: &#34;helloMsg2(\&#34;boooo hoo hoo hoooo\&#34;)&#34;, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
      
      contentController.addUserScript(userScript)
      contentController.add(self, name: &#34;callback&#34;)
      
      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 == &#34;callback&#34; {
            print(&#34;message from javaScript is: \(message.body)&#34;)
      } else {
            print(&#34;message from javaScript is: \(message.body)&#34;)
      }
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这可能会有所帮助<a href="https://github.com/swisspol/GCDWebServer/issues/306" rel="noreferrer noopener nofollow">support CORS</a> .
只需将 <code>Access-Control-Allow-Origin: *</code> 添加到响应 header 中即可。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用 GCDWebServer 配置代理以支持跨域请求,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/49350201/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/49350201/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用 GCDWebServer 配置代理以支持跨域请求