首页 文章

客户端和服务器端编程有什么区别?

提问于
浏览
416

我有这个代码:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

为什么这不会在我的文本文件中写入“bar”,但警告“42”?


注意:此问题的早期版本明确是关于服务器上的PHP和客户端上的JavaScript . 当一个语言在客户端上运行而另一个在服务器上运行时,问题和解决方案的基本性质是相同的 . 当你看到有关特定语言的答案时,请考虑到这一点 .

5 回答

  • 399

    在Web应用程序中,每个任务都以请求和响应的方式执行 .

    客户端编程使用带有Java脚本的html代码及其框架,库在Internet Explorer,Mozilla,chrome浏览器中执行 . 在Java场景中,服务器端编程servlet在Tomcat,web-logic,j boss,WebSphere severs中执行

  • 22

    您的Javascript将在客户端上执行,而不是在服务器上执行 . 这意味着 foo 未在服务器端进行评估,因此无法将其值写入服务器上的文件 .

    考虑这个过程的最好方法是,一旦浏览器解释它,就像生成只生成可执行代码一样 . 只在服务器上评估 <?php 标记之间的位置 .

    顺便说一句,养成在HTML或Javascript中嵌入随机PHP逻辑片段的习惯会导致严重错综复杂的代码 . 我说的是痛苦的经历 .

  • 2

    我将尝试以简单的方式解释它 .

    客户端是用户在浏览器上看到/看到的代码 .

    客户端编程包括HTML(HTML,HTML5,DHTML),CSS(CSS,CSS3)和JavaScript(JavaScript,ES5,ES6,ES7,TypeScript,JQuery,ReactJs,AngularJs,BackboneJs或任何其他JavaScript前端框架) .

    客户端编程侧重于“页面将如何显示”及其在浏览器上的行为 .

    • HTML就是我们所看到的 .

    • CSS决定其设计(颜色,浮动图像,填充等) .

    • JavaScript监控页面信息 . 所有API调用和通过DOM维护数据都是通过JavaScript完成的 .

    服务器端编程包括向客户端提供数据的代码 . 用户永远无法看到服务器端 .

    服务器端编程涉及编程语言(Java,PHP,.Net,C#,C,C,NodeJS等),数据库(SQL,Oracle,MySql,PostgreySql,No-Sql,MongoDB等),第三方API(休息,肥皂) ), 商业逻辑 .

    服务器端编程侧重于“如何为客户端提供数据” .

    • 服务器端语言负责不同数据源之间的通信,如数据库,第三方API,文件系统,区块链等 . 这些语言为客户端维护某些API以进行交互 .

    • 数据库负责存储信息 .

    • 业务逻辑定义"how to use data and what to do with data" .

    客户端请求数据或存储数据的请求,从服务器端通过服务器端提供的API . 此请求和数据响应通过遵循REST API,SOAP API等HTTP / FTP协议来完成 .

  • 140

    您的代码分为两个完全独立的部分,即服务器端和客户端 .

    |
                   ---------->
                  HTTP request
                        |
    +--------------+    |    +--------------+
    |              |    |    |              |
    |    browser   |    |    |  web  server |
    | (JavaScript) |    |    |  (PHP etc.)  |
    |              |    |    |              |
    +--------------+    |    +--------------+
                        |
      client side       |      server side
                        |
                   <----------
              HTML, CSS, JavaScript
                        |
    

    双方通过HTTP请求和响应进行通信 . PHP在服务器上执行并输出一些HTML和JavaScript代码,这些代码作为响应发送到解释HTML并执行JavaScript的客户端 . 一旦PHP完成输出响应,脚本就会结束,在新的HTTP请求进入之前,服务器上什么都不会发生 .

    示例代码执行如下:

    <script type="text/javascript">
        var foo = 'bar';
        <?php
            file_put_contents('foo.txt', ' + foo + ');
        ?>
    
        var baz = <?php echo 42; ?>;
        alert(baz);
    </script>
    

    第1步,PHP执行 <?php ?> 标签之间的所有代码 . 结果如下:

    <script type="text/javascript">
        var foo = 'bar';
    
        var baz = 42;
        alert(baz);
    </script>
    

    file_put_contents 调用没有产生任何结果,只是将" + foo + "写入文件中 . <?php echo 42; ?> 调用产生了输出"42",它现在位于该代码的位置 .

    生成的HTML / JavaScript代码现在发送到客户端,在那里进行评估 . alert 调用有效,而 foo 变量不在任何地方使用 .

    All PHP code is executed on the server before the client even starts executing any of the JavaScript. There's no PHP code left in the response that JavaScript could interact with.

    要调用某些PHP代码,客户端必须向服务器发送新的HTTP请求 . 这可以使用以下三种方法之一进行:

    • 一个链接,导致浏览器加载新页面 .

    • 表单提交,将数据提交到服务器并加载新页面 .

    • 一个AJAX请求,这是一种向服务器发出常规HTTP请求的Javascript技术(如1.和2.将),但不离开当前页面 .

    Here's a question outlining these method in greater detail

    您还可以使用JavaScript使浏览器使用 window.location 打开新页面或提交表单,模拟可能性1.和2 .

  • -1

    要确定PHP代码在JavaScript代码中不起作用的原因,我们需要了解 client sideserver side 语言及其工作原理 .

    服务器端语言(PHP等):它们从数据库中检索记录,维护stateless HTTP connection上的状态,并执行许多需要安全性的事情 . 它们驻留在服务器上,这些程序永远不会有它们的来源暴露给用户的代码

    图像attr

    因此,您可以轻松地看到服务器端语言处理HTTP请求并处理它,并且@deceze表示PHP在服务器上执行并输出一些HTML和JavaScript代码,这些代码作为响应发送到解释HTML的客户端和JavaScript被执行 .

    另一方面,客户端语言(如JavaScript)驻留在浏览器上并在浏览器上运行,而客户端脚本通常是指Web上的计算机程序类,由用户的Web浏览器在客户端执行,而不是服务器端 .

    JavaScript对用户可见,并且可以轻松修改,因此对于安全性问题,我们不能依赖JavaScript .

    因此,当您在服务器上发出HTTP请求时服务器首先仔细读取PHP文件以查看是否有任何需要执行的任务并将响应发送到客户端并再次发送@deceze说*一旦PHP完成输出响应,脚本结束,在新的HTTP请求进入之前,服务器上不会发生任何事情 . *

    图像源

    那么现在如果我需要调用PHP,我该怎么办?这取决于您需要如何操作:通过重新加载页面或使用AJAX调用 .

    • 您可以通过重新加载页面并发送HTTP请求来完成

    • 您可以使用JavaScript进行AJAX调用,这不需要重新加载页面

    Good Read:

相关问题