今天想研究下 HTTP协议,网上文档感觉看起来云里雾里的,谁有收藏能不能给咱分享一下?另外我想问一下HTTP 是无状态的,一次只能处理一个请求。也就是 客户端发起通信 服务器端处理 并返回,然后通信结束了。
比如我写了HTTP 服务器, 用户 第一次访问地址 http://localhost:8080/post.html  当用户点击确认表单的时候,服务器端 会收到客户端 发来的FIN 也就客户端发起关闭连接了。。
这是个什么过程? HTTP 长连接具体指的是什么?  谁可以给我点资料 或者给点 书目的推荐??? 或者推荐点名词给我百度一下哈哈 要是不大会的就围观就是了别把咱误导了 

解决方案 »

  1.   

    哈哈,你自己围观吧,其实http协议没那么难 ,rfc2616中文版的看看吧
      

  2.   

    推荐书 计算机网络 AndrewS.Tanenhaum著,潘爱民翻译
    TCP/IP协议是分层设计的,看不懂高层协议,可能就是因为不懂底层协议,接下来就知道自己干嘛了
      

  3.   


    还真不是  TCP/IP 我还真懂
      

  4.   

    推荐书 计算机网络 AndrewS.Tanenhaum著,潘爱民翻译
      

  5.   

    HTTP 是无状态的.
    理解这句话的关键在于“什么是状态”这里说的“状态”是指不同次交互之间的影响
    先让我们看一个“有状态”的协议,比如邮件协议POP,你连上服务器后先进行一次“用户认证”的交互,第二次交互中你“下载邮件”,服务器处理下载邮件的请求时引用你第一次交互中所登录的用户,这个“用户数据”就是状态之一,服务器对同样的“下载邮件”请求,根据前面的状态,给予不同的响应(邮件账户不同)。这就是有状态的协议。而无状态的HTTP,他的响应只和你的请求有关,和你以前进行过什么样的交互无关,也就是说,服务器进行响应时,并不依赖于以前你曾做过的交互,这就叫无状态。我想你这时一定糊涂了,“我们在CSDN上发贴,难道不是依赖于我们先前的登录吗?”,没错,BBS系统是有状态的,很多WEB应用都是有状态的,但这个状态的处理,不是在HTTP层面定义和处理的。
    WEB应用为了利用无状态的HTTP协议,又要保障应用逻辑的有状态,在HTTP协议之上,另外定义了处理“状态”的机制,叫做cokie和session,不多解释,自己去google一下(别用baidu)事实上HTTP协议中只定义了一次交互,即客户机向服务器发出一个消息(叫做“请求”request),服务器向客户机发出一个消息(叫做“响应”response),之后就断开TCP连接了(HTTP 1.0/关于长连接看后面)。
    当你在网页上点一个链接时,是再发起一次新的HTTP交互,而不是基于上次的连接做进一步交互。所以HTTP的访问自然就是无状态的了。甚至当你的网页中嵌入的别的资源(如一个图片),这个资源的访问也是通过一次单独的HTTP协议交互来取得的,与其宿主网页的那次HTTP交互没有关系。关于长连接,这是HTTP 1.1的一个扩展特性。
    因为现代的网页中往往有很多嵌入的资源,如果按HTTP 1.0的定义,每一个资源都连接TCP断开TCP,效率就低了。所以在HTTP 1.1中对此做了扩展,即服务器发送响应后并不断开连接,这个连接可以继续用于新的HTTP交互,最后空闲超时才关闭连接,但,这只是一个提高效率的手段,同一个连接中进行的多次交互,仍然是独立的,无状态的,和新发出的一个连接没有什么不一样,服务器也不能利用“同一个连接”来假定交互的状态。
      

  6.   

    看下tomcat的源码就知道了
    HTTP/1.1中加入了keep-alive属性用于支持长连接
    简单说就是如果http header中connection的值为keep-alive
    那么服务器在处理完本次请求后不会关闭连接
    那么这个连接就可用于下一次的请求
      

  7.   

    大家有人用过java调用extmail的userctl.pl脚本 往extmail中添加用户吗,我自己写了代码执行了 但是不会向extmail中插入数据.我的代码如下
    String comm = "perl /var/www/extsuite/extman/tools/userctl.pl--mod=add -username="+uname +"-password="+pass;
    runLinuxCmd(String cmd) //本类调用public String runLinuxCmd(String cmd) {
    BufferedReader bf = null;
    try {
    Process process = Runtime.getRuntime().exec(cmd);
    bf = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    String resutl="";
    while ((line = bf.readLine()) != null) {
    resutl =resutl+ line.trim()+"\n";
    }
    System.out.println("---------------try result------------------"+resutl);
    return resutl;
    } catch (java.io.IOException e) {
    e.printStackTrace();
    System.out.println("------------error--------------");
    return null;
    } finally {
    if (bf != null) {
    try {
    bf.close();
    bf = null;
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }}单独在shell环境下执行perl命令是没有问题,能够插入数据。 我在网上看到有人讲过把perl命令写进sh脚本就可以了,我也不知道这是为什么按理说java能够调用shell命令也能调用perl脚本命令。非要包装一下的话我也写了一个shell脚本单独运行shell脚本也能添加数据就是java调用又没有添加数据了 我想要的是验证过的结果 大道理就不用讲了直接来真工夫啊 我写的shell脚本代码如下:#!/bin/sh
    perl /var/www/extsuite/extman/tools/userctl.pl--mod=add -username="$1" -password="$2";这个做了两天都没有做好 如果能有满意的结果我会加分的谢谢大家   欢迎大家来这里回帖http://topic.csdn.net/u/20110821/20/ae1e4815-1c81-4c75-88ae-db263128f963.html?61772
      

  8.   

    java.net.URLConnection
    http://www.ietf.org/rfc/rfc2068.txt