CHAPTER 1 A Simple Web Server

来源:互联网 发布:网络视频直播方案 编辑:程序博客网 时间:2024/06/08 13:54
 
  • 一个Web Server也叫作HTTP Server,因为它是基于HTTP协议与客户端(Web Browser)进行交互的
  • 基于Java的Web Server,两个比较重要的类是java.net.Socket和java.net.ServerSocket
  • HTTP协议
  • socket,指的就是网络连接中的终端。利用该终端可以从网络中写数据,也可以从网络中读取数据,注意这里是以字节流(byte stream)的方式发送数据的;要实现这两种操作,需要知道对方的IP地址和端口号
  • 在Java中,创建一个终端对象,这里的Socket代表的是客户端(“Client”):public Socket(java.lang.String host, int port),如创建一个连接到雅虎的终端时:Socket s = new Socket("yahoo.com", 80);
  • 写数据时,先从终端拿到输出流:s.getOutputStream();它会返回一个java.io.OutputStream的对象
  • 读数据时,先从终端拿到输入流:s.getInputStream();它会返回一个java.io.InputStream的对象

     

  • 实现像HTTP服务器或FTP服务器之类的服务器应用,java中是通过ServerSocket类来实现的,该类提供了四种方法来实现该对象的创建,需要我们指定服务端所监听的IP地址和端口号,典型的IP地址为127.0.0.1,即监听本机:

    e.g.:public ServerSocket(int port, int backlog, InetAddress bindingAddress);

    • 在实例化服务器应用时,另一个比较重要的参数是backlog(int),它用来指定服务器端拒绝响应来自客户端的请求之前所能够允许的最大的请求连接队列长度
    • 这里的绑定地址必须是一个java.net.InetAddress累的实例,获取一个该类的对象的简单方法是通过调用它的静态方法:getByName:e.g.:InetAddress.getByName("127.0.0.1");
    • ServerSocket ss = new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));
  • 通过调用accept()方法,可以返回一个来自客户端请求连接的Socket实例
  • 向一个Web Server发送一个HTTP请求:  
    out.println("POST /index.html HTTP/1.1"); // ————>Request lineout.println("Server:localhost:8080");//———————>Request Headerout.println("Connection: close"); //—————————>Request Headerout.println();//———————————————————>Blank line

     

    ===================================================================================================================================================

    HTTP协议

  • 它使用的是可靠的TCP连接,默认端口是80
  • 第一个版本是HTTP/0.9,之后是HTTP/1.0,现在使用的HTTP/1.1
  • 每一次连接,都是由客户端发起HTTP请求之后建立的,服务器是不会主动的联系客户端或者说创建一个回调连接到客户端的;服务器端和客户端任何一端都可以提前终止连接
  • HTTP请求,一个HTTP请求包含三个部分:
    • HTTP请求行(Method-Uniform Resource Identifier<URI>-Protocol Version)
      • e.g: POST /examples/default.jsp HTTP/1.1
    • 请求头(Request Header)
    • 请求体(Entity Body)
  • HTTP/1.1支持7中请求方式:GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE;最常用的是POST和GET
  • URI要以“/”开头,它是相对服务器端当前应用的根目录进行资源位置解析的
  • 注意:在请求头和请求体之间要有一个空行(即一个回车换行符)

       

  • HTTP响应,包含三部分:
    • 响应行(Protocol-Status-Description):
      • e.g: HTTP/1.1 200 OK
    • 响应头(Response Headers)
    • 响应体(Entity body)
  • 在响应头和响应体之间也要包含一个空行
  • 响应体包含的是一些HTML内容;200表示状态码,指请求成功

     

原创粉丝点击