在W3Schools 页面上,我发现 HTTP 请求的工作方式如下:
- 客户端(浏览器)向 Web 发送 HTTP 请求
- Web 服务器接收请求,并运行应用程序来处理它
- 服务器向浏览器返回一个 HTTP 响应(输出)
- 客户端(浏览器)接收响应。
在同一页面上,我发现XMLHttpRequest的工作方式如下:
- 浏览器创建一个 XMLHttpRequest 对象并将其发送到服务器
- 服务器处理请求,创建响应并将数据发送回浏览器
- 浏览器使用 JavaScript 处理返回的数据并更新页面内容。
以上两个过程在我看来几乎相同。但是,如果服务器在远程域上运行,则后者违反了同源策略 (SOP)。Stack Overflow 上关于 open() 方法中的 URL 的这个问题说
由于我们只能向我们自己的 Web 服务器发送请求,我假设我们不必在 URL 中重写网站名称。
将相同的逻辑应用于第一种情况(HTTP 请求)意味着如果网页不在我自己的计算机上,我将无法打开它。幸运的是,情况并非如此。
那么,为什么显示远程网页的 HTTP 请求不违反 SOP?这里的关键点/区别是什么?
我认为这是关于第二个进程(XMLHttpRequest)是从脚本启动的,而第一个进程是由用户触发的。但是,当我单击网页上的超链接时,不是从脚本发送的 HTTP 请求吗?Web 服务器如何区分来自脚本的请求和来自用户的请求?