zoukankan      html  css  js  c++  java
  • 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应用程序通常需要实现安全性控制,限制用户可以访问的资源。

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/z1234/p/5967779.html
Copyright © 2011-2022 走看看