• Web


    1. 解析HTTP 协议
    组成一个基本的Web程序需要Web服务器、Web客户端浏览器、HTTP协议以及静态HTML文件。
    其中Web服务器的作用是接受客户端请求,然后向客户端返回一些结果;浏览器的作用是允许用户请求服务器上的某个资源,并且向用户显示请求的结果;HTML用于告诉浏览器怎样向用户显示内容;HTTP是Web上客户端和服务器之间通信所用的协议。
    要真正的理解Web工作原理,必须彻底的理解HTTP协议。
    HTTP是一种超文本传输协议(HyperText Transfer Protocol),是一套计算机在网络中通信的一种规则。在TCP/IP体系结构中,HTTP属于应用层协议,位于TCP/IP 协议的顶层。HTTP是一种无状态的协议,意思是指在Web浏览器(客服端)和Web服务器之间不需要建立持久的连接。整个过程就是当一个客户端向服务器发送一个请求(Request),然后Web服务器返回一个响应(Response),之后连接就关闭了。HTTP遵循请求/响应(Request/Response)模型的,所有的通信都被构造在一套请求和响应模型中。
    HTTP定义的事务处理由下面四部组成:

    1. 客户端和Web服务器建立连接;
    2. 客户端发送HTTP请求;
    3. 服务器接受客户端的HTTP请求,生成HTTP响应回发;
    4. 服务器关闭连接。客户端解析回发响应,回复页面
    2.发送请求信息
    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。HTTP协议将来自于客户端的请求信息封装成HTTP请求,它包括请求行、请求头、消息体、以及分隔请求头和消息体的空行。
    1):请求行是一个ASCII 文本行,由三个标记组成:请求的HTTP方法、请求的URL、HTTP版本,中间用空格分开。
    在HTTP版本1.1中,定义了八种可能的HTTP请求方法:
    GET:用于向服务器检索资源
    POST:用于想服务器发送数据,并要求指定的URL处理
    HEAD:与GET犯法相同,服务器只返回状态行和头标,并不返回请求文档
    PUT:请求服务器保存数据作为指定URL新内容
    DELETE:请求服务器删除URL中命名的资源
    OPTIONS:请求关于服务器支持的请求方法信息
    TRACE:请求Web服务器反馈HTTP请求和其头标
    CONNECT:已文档化但当前为实现的一个方法,预留做隧道处理

    2)请求头
    HTTP协议使用HTTP头来传递请求的元信息

    3 ) 空行
    发送回车符和退行,通知服务器一下不再有请求头

    4) 消息体
    HTTP请求中带有查询字符串时,如果是GET方法,查询字符串或表单数据附加在请求行中,那么消息体中就没有内容;如果是POST方法,查询字符串或表单数据就添加在消息体中。

    3.回送响应信息

    HTTP响应包括:状态行、响应头、消息体以及分割消息体和响应头的空行
    1)状态行:
    100-199:信息(请求收到,继续处理)
    200-299:成功(行为被成功的接受、理解和采纳)
    300-399:重定向(为了完成请求,必须进一步执行的动作)
    400-499:客户端错误(请求包含语法错误或者请求无法实现)
    500-599:服务器端错误(服务器不能实现一种明显无效的请求)

    2)响应头:
    和请求头一样,也是用冒号分割的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值

    3)空白行:
    最后一个响应头之后是一个空行,发送回车符和退行,表明以下不再有响应头

    4)消息体:
    要发送回客户端的HTML文档或其他要显示的内容等。Web服务器把要发送给客户端的文档信息放在消息体中

    Web服务器的缺陷
    只能向客户端提供静态的网页内容
    最早的解决方案:
    CGI,即通用网关接口(Common Gateway Interface)使用CGI,Web服务器可以将客户端的请求传递给一个外部程序,这个外部程序可以执行、创建内容,并且将响应传递给客户端。
    CGI最大的优点是它可以用 Shell 、Perl、 C 、PHP、 Python等编写。但是在使用CGI最为Web服务器的辅助程序时,每次请求一个CGI资源,将在服务器上创建一个新的进程(Process),并且通过标准输入和环境变量将信息传递给该进程。由此可见 每次请求就会打开一个CGI进程,严重消耗了服务器资源。

    Java的解决方案
    java中 Servlet和Web容器被设计用来解决CGI问题。
    Servlet:是一个在Web服务器端或者用用服务器端的程序。主要用于在服务器上产生动态HTML。Servlet是与平台无关的java类,能够编译平台中立的字节码。
    web容器:
    Select类中没有main方法,Servlet受控于另一个java用用程序,这个java程序就称作Web容器,Web容器负责管理和运行Servlet。
    Web容器对Servlet的支持:
    通信支持:利用容器提供的方法,我们能轻松地让Servlet和Web容器对话。
    生命周期管理:容器控制着Servlet的生与死。它会负责加载类、实例化、和初始化Servlet、调用Servlet方法,以及使Servlet实例能够被垃圾回收,有了容器的控制,我们就不多地考虑容器的资源了。
    多线程支持:容器会自动地为它接受的每个Servlet请求创建一个新的java线程。
    JSP支持:容器会自动把JSP翻译成为Servlet代码。
    处理安全性:Java Web应用程序通常需要实现安全性控制,限制用户可以访问的资源。

  • 相关阅读:
    .NET 4 上的REST 框架
    WCF Web API 说再见,继承者ASP.NET Web API
    基于盛大的云数据库系统 MongoIC 构建图片系统
    微软以Apache许可协议开源ASP.NET MVC
    Redis 起步
    HttpClient介绍
    Quartz.NET 2.0正式发布
    CodeFirst Migrations随Entity Framework 4.3一同发布
    Redis 在Centos Linux 上的启动脚本
    Quartz.NET的管理工具
  • 原文地址:https://www.cnblogs.com/z1234/p/5967779.html
Copyright © 2020-2023  润新知