<track id="1ichm"><input id="1ichm"><tbody id="1ichm"></tbody></input></track>

      <rt id="1ichm"><delect id="1ichm"></delect></rt><button id="1ichm"></button>

      \n    

      請求轉(zhuǎn)發(fā)測試<\/h1>\n    <\/p>\n    

      亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

      Table of Contents
      What is cross-domain
      Why is it cross-domain
      How to solve cross-domain problems
      1. Proxy server
      1. Online environment
      2. Development environment
      1.借助JSONP
      2.使用CORS
      3. Other solutions
      Summary
      Home Operation and Maintenance Nginx How to solve cross-domain issues? A brief analysis of common solutions

      How to solve cross-domain issues? A brief analysis of common solutions

      Apr 25, 2023 pm 07:57 PM
      front end interview nginx

      How to solve cross-domain issues? A brief analysis of common solutions

      Cross-domain is a scenario often encountered in development, and it is also a question often discussed in interviews. Mastering common cross-domain solutions and the principles behind them can not only improve our development efficiency, but also make us more comfortable in interviews.

      SoLet’s talk to you today about several common ways to solve cross-domain problems from a front-end perspective.

      What is cross-domain

      Before talking about cross-domain, let’s first take a look at the components of a URL:

      The contents of a URL Composition, usually contains protocol, host name, port number, path, query parameters and anchor parts.

      An example of a URL is shown here:

      https://www.example.com:8080/path/resource.html?page=1&sort=desc#header

      In the above example:
      ● The protocol is HTTPS
      ● The hostname is www.example.com
      ● The port The number is 8080
      ● The path is /path/resource.html
      ● The query parameter is page=1&sort=desc
      ● The anchor point is header

      The so-called cross-domain refers to It means that any part of the protocol, host name, and port number in the request URL is different.

      Taking the above URL as an example, the following writing methods are considered to be cross-domain with it:

      http://www.example.com:8080/    // 協(xié)議不同
      https://www.example.a.com:8080/ // 主機名不同
      https://www.example.com:8081/   // 端口號不同

      Why is it cross-domain

      In fact The occurrence of cross-domain problems is limited by the browser's same-origin policy.

      The so-called same-origin policy is actually a security mechanism of the browser, which is used to restrict network requests in a web page to only access files from the same source (the domain name, protocol and port number are the same) resources, the main purpose is to prevent malicious websites from stealing sensitive data from other websites through scripts, and to protect user privacy and security.

      When the browser-side script (js file) accesses network resources in other domains, cross-domain problems will occur.

      How to solve cross-domain problems

      As mentioned earlier, the occurrence of cross-domain problems is limited by the browser’s same-origin policy, so common solutions to cross-domain problems The solution actually revolves around the browser:

      1. Proxy server

      In our usual development, is most commonly used to solve cross-domain problems The solution is to use a proxy server.

      Proxy serverTo solve the cross-domain problem, we actually grasp the feature that the same-origin policy is only limited to the browser accessing the server, and there is no restriction on the server accessing the server. As an intermediate The server has a request forwarding function.

      Specifically, the web page written by the front-end engineer runs on a proxy server built by scaffolding such as webpack. When the front-end web page initiates a network request in the browser, the request is actually sent to the proxy server. , then the proxy server will forward the request to the target server, and then forward the response returned by the target server to the client.

      The proxy server plays a relay role in this process and can modify, filter and intercept requests and responses to achieve some specific functions. Because the front-end web page runs on the proxy server, there is no cross-domain problem.

      So how does the proxy server forward requests in the online environment and development environment?

      1. Online environment

      In the online environment, we generally use nginx as a reverse proxy to forward the front-end requests forwarded to the target interface.

      nginx is a lightweight high-concurrency web server, event-driven, cross-platform, and can be configured on both window and Linux.

      The main way it serves as a proxy server to solve cross-domain problems in development is to listen to the running port of the online front-end URL, and then forward the request after encountering a request containing a special tag .

      2. Development environment

      In the development environment, whether it is a front-end project built with the help of webpack or using vite or other scaffolding, the core of solving cross-domain problems is Implemented with the help of http-proxy-middleware middleware. The core of http-proxy-middleware middleware is a further encapsulation of http-proxy.

      Here is a sample code that uses http-proxy-middleware to implement the request forwarding function in the project:

      const { createProxyMiddleware } = require(&#39;http-proxy-middleware&#39;);
      
      module.exports = {
        server: {
          proxy: {
            // 將 /api/* 的請求代理到 http://localhost:3000/*
            &#39;/api&#39;: {
              target: &#39;http://localhost:3000&#39;,
              changeOrigin: true,
              pathRewrite: { &#39;^/api&#39;: &#39;/&#39; }
            }
          }
        }
      };

      Then we can use native node, use the http-proxy library to build a proxy server Demo with request forwarding function. Interested friends can test and play by themselves:

      1. First you need to create a Use the empty folder (named in English) as the project folder, and then use the npm init -y command to upgrade the project to a node project:

      npm init -y

      2. Next Create an index.html file in the project root directory to initiate cross-domain requests:

      <!DOCTYPE html>
      <html>
      
      <head>
          <meta charset="UTF-8">
          <title>請求轉(zhuǎn)發(fā)測試</title>
      </head>
      
      <body>
          <h1>請求轉(zhuǎn)發(fā)測試</h1>
          <p id="message"></p>
          <script>
              fetch(&#39;/api/login&#39;)
                  .then(response => response.text())
                  .then(data => {
                      document.getElementById(&#39;message&#39;).textContent = data;
                  });
          </script>
      </body>
      
      </html>

      3. Then create a new index in the project root directory .js file to write server-side code.
      The index.js file is the core file for implementing a proxy server with request forwarding function.

      const http = require(&#39;http&#39;);
      const httpProxy = require(&#39;http-proxy&#39;);
      const fs = require(&#39;fs&#39;);
      const path = require(&#39;path&#39;);
      
      // 創(chuàng)建代理服務(wù)器實例
      const proxy = httpProxy.createProxyServer({});
      
      // 創(chuàng)建HTTP服務(wù)器
      const server = http.createServer((req, res) => {
          if (req.url === &#39;/&#39; || req.url.endsWith(&#39;.html&#39;)) {
              // 讀取HTML文件
              const filename = path.join(__dirname, &#39;index.html&#39;);
              fs.readFile(filename, &#39;utf8&#39;, (err, data) => {
                  if (err) {
                      res.writeHead(500);
                      res.end(&#39;Error reading HTML file&#39;);
                  } else {
                      res.writeHead(200, { &#39;Content-Type&#39;: &#39;text/html&#39; });
                      res.end(data);
                  }
              });
          } else if (req.url.startsWith(&#39;/api&#39;)) {
              // 重寫路徑,替換跨域關(guān)鍵詞
              req.url = req.url.replace(/^\/api/, &#39;&#39;);
              // 將請求轉(zhuǎn)發(fā)至目標(biāo)服務(wù)器
              proxy.web(req, res, {
                  target: &#39;http://localhost:3000/&#39;,
                  changeOrigin: true,
              });    
          }
      });
      
      // 監(jiān)聽端口
      server.listen(8080, () => {
          console.log(&#39;Server started on port 8080&#39;);
      });

      4. Then write the contents of the target servertarget.js file for testing cross-domain access:

      const http = require(&#39;http&#39;);
      
      const server = http.createServer((req, res) => {
          if (req.url.startsWith(&#39;/login&#39;)) {
              res.writeHead(200, { &#39;Content-Type&#39;: &#39;text/plain&#39; });
              res.end(&#39;我是localhost主機3000端口下的方法,恭喜你訪問成功!&#39;);
          } else {
              res.writeHead(200, { &#39;Content-Type&#39;: &#39;text/plain&#39; });
              res.end(&#39;Hello, world!&#39;);
          }
      });
      
      server.listen(3000, () => {
          console.log(&#39;Target server is listening on port:3000&#39;);
      })

      5. 打開終端,輸入啟動目標(biāo)服務(wù)器的命令:

      node ./target.js //項目根目錄下執(zhí)行

      6. 再開一個終端啟動代理服務(wù)器,等待瀏覽器端發(fā)起請求就可以啦:

      node ./index.js //項目根目錄下執(zhí)行

      7. 最后在瀏覽器里訪問http://localhost:8080, 打開控制臺即可查看效果:

      可以發(fā)現(xiàn),瀏覽器network模塊的網(wǎng)絡(luò)請求確實是訪問的8080端口的方法,但是我們的服務(wù)器默默的做了請求轉(zhuǎn)發(fā)的功能,并將請求轉(zhuǎn)發(fā)獲取到的內(nèi)容返回到了前端頁面上。

      其實http-proxy是對node內(nèi)置庫http的進一步封裝,網(wǎng)絡(luò)請求的核心部分還是使用http創(chuàng)建一個服務(wù)器對象去訪問的。感興趣的同學(xué)可以再讀讀http-proxy的源碼~

      除了代理服務(wù)器這種繞過瀏覽器同源策略的解決方式外,從前端的角度解決跨域問題還有如下一些常見的方法:

      1.借助JSONP

      JSONP的原理是通過動態(tài)創(chuàng)建

      Hot AI Tools

      Undress AI Tool

      Undress AI Tool

      Undress images for free

      Undresser.AI Undress

      Undresser.AI Undress

      AI-powered app for creating realistic nude photos

      AI Clothes Remover

      AI Clothes Remover

      Online AI tool for removing clothes from photos.

      Clothoff.io

      Clothoff.io

      AI clothes remover

      Video Face Swap

      Video Face Swap

      Swap faces in any video effortlessly with our completely free AI face swap tool!

      Hot Tools

      Notepad++7.3.1

      Notepad++7.3.1

      Easy-to-use and free code editor

      SublimeText3 Chinese version

      SublimeText3 Chinese version

      Chinese version, very easy to use

      Zend Studio 13.0.1

      Zend Studio 13.0.1

      Powerful PHP integrated development environment

      Dreamweaver CS6

      Dreamweaver CS6

      Visual web development tools

      SublimeText3 Mac version

      SublimeText3 Mac version

      God-level code editing software (SublimeText3)

      How to execute php code after writing php code? Several common ways to execute php code How to execute php code after writing php code? Several common ways to execute php code May 23, 2025 pm 08:33 PM

      PHP code can be executed in many ways: 1. Use the command line to directly enter the "php file name" to execute the script; 2. Put the file into the document root directory and access it through the browser through the web server; 3. Run it in the IDE and use the built-in debugging tool; 4. Use the online PHP sandbox or code execution platform for testing.

      After installing Nginx, the configuration file path and initial settings After installing Nginx, the configuration file path and initial settings May 16, 2025 pm 10:54 PM

      Understanding Nginx's configuration file path and initial settings is very important because it is the first step in optimizing and managing a web server. 1) The configuration file path is usually /etc/nginx/nginx.conf. The syntax can be found and tested using the nginx-t command. 2) The initial settings include global settings (such as user, worker_processes) and HTTP settings (such as include, log_format). These settings allow customization and extension according to requirements. Incorrect configuration may lead to performance issues and security vulnerabilities.

      How to limit user resources in Linux? How to configure ulimit? How to limit user resources in Linux? How to configure ulimit? May 29, 2025 pm 11:09 PM

      Linux system restricts user resources through the ulimit command to prevent excessive use of resources. 1.ulimit is a built-in shell command that can limit the number of file descriptors (-n), memory size (-v), thread count (-u), etc., which are divided into soft limit (current effective value) and hard limit (maximum upper limit). 2. Use the ulimit command directly for temporary modification, such as ulimit-n2048, but it is only valid for the current session. 3. For permanent effect, you need to modify /etc/security/limits.conf and PAM configuration files, and add sessionrequiredpam_limits.so. 4. The systemd service needs to set Lim in the unit file

      What are the Debian Nginx configuration skills? What are the Debian Nginx configuration skills? May 29, 2025 pm 11:06 PM

      When configuring Nginx on Debian system, the following are some practical tips: The basic structure of the configuration file global settings: Define behavioral parameters that affect the entire Nginx service, such as the number of worker threads and the permissions of running users. Event handling part: Deciding how Nginx deals with network connections is a key configuration for improving performance. HTTP service part: contains a large number of settings related to HTTP service, and can embed multiple servers and location blocks. Core configuration options worker_connections: Define the maximum number of connections that each worker thread can handle, usually set to 1024. multi_accept: Activate the multi-connection reception mode and enhance the ability of concurrent processing. s

      What are the SEO optimization techniques for Debian Apache2? What are the SEO optimization techniques for Debian Apache2? May 28, 2025 pm 05:03 PM

      DebianApache2's SEO optimization skills cover multiple levels. Here are some key methods: Keyword research: Use tools (such as keyword magic tools) to mine the core and auxiliary keywords of the page. High-quality content creation: produce valuable and original content, and the content needs to be conducted in-depth research to ensure smooth language and clear format. Content layout and structure optimization: Use titles and subtitles to guide reading. Write concise and clear paragraphs and sentences. Use the list to display key information. Combining multimedia such as pictures and videos to enhance expression. The blank design improves the readability of text. Technical level SEO improvement: robots.txt file: Specifies the access rights of search engine crawlers. Accelerate web page loading: optimized with the help of caching mechanism and Apache configuration

      Configure PhpStorm and Docker containerized development environment Configure PhpStorm and Docker containerized development environment May 20, 2025 pm 07:54 PM

      Through Docker containerization technology, PHP developers can use PhpStorm to improve development efficiency and environmental consistency. The specific steps include: 1. Create a Dockerfile to define the PHP environment; 2. Configure the Docker connection in PhpStorm; 3. Create a DockerCompose file to define the service; 4. Configure the remote PHP interpreter. The advantages are strong environmental consistency, and the disadvantages include long startup time and complex debugging.

      How to implement automated deployment of Docker on Debian How to implement automated deployment of Docker on Debian May 28, 2025 pm 04:33 PM

      Implementing Docker's automated deployment on Debian system can be done in a variety of ways. Here are the detailed steps guide: 1. Install Docker First, make sure your Debian system remains up to date: sudoaptupdatesudoaptupgrade-y Next, install the necessary software packages to support APT access to the repository via HTTPS: sudoaptinstallapt-transport-httpsca-certificatecurlsoftware-properties-common-y Import the official GPG key of Docker: curl-

      Specific steps to configure the self-start of Nginx service Specific steps to configure the self-start of Nginx service May 16, 2025 pm 10:39 PM

      The steps for starting Nginx configuration are as follows: 1. Create a systemd service file: sudonano/etc/systemd/system/nginx.service, and add relevant configurations. 2. Reload the systemd configuration: sudosystemctldaemon-reload. 3. Enable Nginx to boot up automatically: sudosystemctlenablenginx. Through these steps, Nginx will automatically run when the system is started, ensuring the reliability and user experience of the website or application.

      See all articles