构建高性能的 HTTP 服务器 (一)--初涉Java HTTP 服务器
来源:互联网 发布:珂润洗发水 知乎 编辑:程序博客网 时间:2024/05/17 05:53
简介:
Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。
一:浏览器的请求头
下面是Firefox浏览器,GET请求的数据头:
GET / HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
/r/n
在没个换行后面都有一个"\r\n",在最后一行的下面还有还有一个"\r\n"
POST请求的数据头:
略
二:HTTP服务器响应数据的头
自定义服务器,的基本的响应的数据头
HTTP/1.1 200 OK
Content-Type:text/html
Content-Length:6
/r/n
在没个换行后面都有一个"\r\n",在最后一行的下面还有还有一个"\r\n"
其中上面的Content-Length参数是必不可少的,其指定的是HTTP响应的正文的长度,在浏览器上面,就会根据这个参数,知道这个HTTP数据流的结束点。(在编写HTTP的代理服务器的上面,一定要注意这点。)
三、Java代码实现一个简单的HTTP服务器。
public class MyServer {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew MyServer().startHttp();}private void startHttp() {// TODO Auto-generated method stubtry {ServerSocket serverSocket = new ServerSocket(8080);//初始化一个线程池ExecutorService executorService = Executors.newFixedThreadPool(8);System.out.println("打开服务!");Socket socket;while (true) {socket = serverSocket.accept();executorService.execute(new Handler(socket));}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}class Handler implements Runnable {Socket socket;public Handler(Socket socket) {// TODO Auto-generated constructor stubthis.socket = socket;}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("端口号" + socket.getPort());try {InputStream inputStream = socket.getInputStream();OutputStream outputStream = socket.getOutputStream();//读取浏览器的头中包含的数据byte buffer[] = new byte[inputStream.available()];int i = -1;inputStream.read(buffer);String readHead = new String(buffer);System.out.println("请求的浏览器的数据:\n" + readHead + "\n________\n");String string = "Hello!";//设置响应数据的头String split = "\r\n";StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("HTTP/1.1 200 OK\r\n");stringBuffer.append("Content-Type:text/html" + split);stringBuffer.append("Content-Length:" + string.length() + split);stringBuffer.append("\r\n");stringBuffer.append(string);System.out.println("响应的数据"+stringBuffer.toString());outputStream.write(stringBuffer.toString().getBytes());outputStream.flush();outputStream.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
四:效果图
浏览器:
服务器控制台:
参考:
POST的讨论 http://bbs.csdn.net/topics/310107460
WEB 服务器定义 http://baike.baidu.com/view/460250.htm
- 构建高性能的 HTTP 服务器 (一)--初涉Java HTTP 服务器
- 构建高性能的 HTTP 服务器 (二)--NIO 模式的HTTP服务器
- Nginx高性能http服务器的安装
- 高性能 HTTP服务器 qHttpd
- 高性能HTTP服务器 Apache
- 高性能HTTP服务器 Apache
- 高性能 HTTP服务器 qHttpd
- java HttpServer构建http服务器
- java HttpServer构建http服务器
- java HttpServer构建http服务器
- java HttpServer构建http服务器
- 高性能web开发 - HTTP服务器篇
- 高性能WEB开发 - HTTP服务器篇
- 高性能WEB开发 - HTTP服务器篇
- 高性能WEB开发之HTTP服务器
- 高性能WEB开发 - HTTP服务器篇
- Nginx 高性能的 HTTP 和 反向代理 服务器
- 搭建cdn的高性能HTTP加速器Varnish服务器
- queer as folk 之 Michael & Brain
- Concrete Mathematics - Recurrent Problems - Warmups - (4)
- Rails 4.0正式发布
- cygwin常用命令大全
- Pull error. No value for key branch.master.merge found in configuration
- 构建高性能的 HTTP 服务器 (一)--初涉Java HTTP 服务器
- linux下vi命令大全
- linux中查看指定进程socket连接数的指令
- 快速排序的非递归实现代码
- shaderlab 关键字
- apache host 泛域名解析
- flash与游戏笔记:滚动数字
- 趣文:程序员的进化史
- 从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类与空数组