使用Java socket 实现 HTTP 协议
来源:互联网 发布:linux服务器更换硬盘 编辑:程序博客网 时间:2024/05/21 09:02
突然发现 CSDN 可以使用MarkDown编辑器了,真是一种进步啊!不过貌似出来的太晚了,呵呵。
这篇文章我们讲一下如何使用 简单地Java socket 来实现部分的 HTTP协议。
1. 要实现HTTP协议必须要了解 HTTP协议
HTTP协议是超文本传输协议(Hypertext Transfer Protocol),在OSI七层模型之中属于应用层协议。
在传输层由TCP/IP协议负责消息的传输,HTTP协议并不用操心消息是如何发送的,那么HTTP协议重要的部分就是协议的内容了。
所以我们需要了解HTTP协议的内容,在程序中实现这些内容即可。
我们这里采用 HTTP/1.0。
2. 目标:我们简单地实现GET方法,在Ubuntu上跑自己的HTTP服务,采用chrome浏览器进行访问。
3. 程序(Process)要做的内容是十分简单地
> The client opens a connection(客户端建立连接,此时服务器也在等待连接)
> The client sends a request (GET, HEAD, or POST) (客户端发起请求,告诉服务器要做的内容)
> The client waits for a response (客户端等待服务器的相应)
> The server processes the request (服务器处理客户端的请求,也就是三个方法)
> The server sends a response (服务器发送自己的结果,也就是所谓的响应)
> The connection is closed (关闭连接)
可以看到在一个连接之后,就已经关闭了连接,所以 HTTP/1.0是一个无状态的协议。
4. 一些规定。
使用HTML格式进行编码的时候,编码规则有些不同: 比如字母表字符和0~9是同样的,空格" "被转换成一个加号 "+"。"." '," "-" "*" "_"是一样的。所有其他的字符都是不安全的并且会转化成 one or more bytes using some encoding scheme. Then each byte is represented by the 3-character string "%xy",其中"xy"是表示这个byte 的两个八进制数字。
比如:"The string ü@foo-bar" 会别转化成 "The+String+%C3%BC%40foo-bar",其中"ü"用%C3%BC表示,“@”用%40表示。
在Java中我们采用URLEncoder 和 URLDecoder来进行编码和解码。
5. 我们需要用一种格式来表示 资源。
比如我们想要得到服务器上的资源,客户端应该发送什么内容呢? 客户端应该了解服务器上的资源在哪里,然后请求这个资源,或者客户端知道服务器上的服务器在哪里,然后请求这个服务。
那么应该如何表示这个资源 或者 服务呢?
HTTP URIs:(Uniform Resource Identifier)
格式如下:http://Host[:Port]/Path[?QueryString]
其中QueryString包含了 由"&"分隔的 "name=value"这样的键值对。比如:name1=value1&name2=value2[&...]
6. 协议格式
GET(方法) without Headers (a.k.a., Simple_Request)
GET URI HTTP/1.0 CRLF
CRLF
HEAD(方法:
HEAD URI HTTP/1.0 CRLF
CRLF
现在我们只需要按照这个格式进行传输就可以了。
其实最重要的就是协议的格式,比如当我们需要访问我们本地的HTTP server的时候,chrom传递的GET方法是什么格式?
我们需要解析这个格式,然后返回相应的内容 (如何返回内容?就是把所有的东西:format,data组装成一个 String,然后将这个string 写入到连接中,返回即可。)
然后chrome就可以显示相应的内容了。
看上去十分简单? 那么HTTP和分布式的内容有什么关系呢? 它的优点在哪里?
当我写完程序之后,下次分析。
https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_http-server-example_java.php
这个连接中的内容就是如何采用Java实现一个简单地HTTPServer。(但是不是采用Socket,我们需要采用Socket)。
- 使用Java socket 实现 HTTP 协议
- socket实现http协议
- 通过一个Socket例子理解Http协议(实战Java Web服务器--使用HTTP协议和JAVA类实现)
- java实现Http协议
- Java 实现HTTP协议
- 直接用socket实现HTTP协议
- 直接用socket实现HTTP协议
- HTTP协议与PHP Socket实现
- Android与Java 服务器使用Socket协议实现Json数据传输
- java使用socket实现http简单get请求
- JAVA使用Socket实现的简易HTTP服务器
- java socket实现http请求
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- 使用WinInet实现http协议
- Http协议格式——socket实现http文件上传
- 使用socket套接字通过http协议实现文档下载功能
- java实现HTTP协议数据压缩
- myeclipse tomcat 7.0 启动报错 java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
- VectorDrawable – 第四章
- xcode常用插件
- iOS音频播放 (五):AudioQueue
- sublime packagecontrol 插件的安装
- 使用Java socket 实现 HTTP 协议
- LuaInterface简介
- 提升磁盘IO性能的几个技巧
- [LeetCode] 029. Divide Two Integers (Medium) (C++/Python)
- C++几个常用类型转换
- iOS音频播放 (六):简单的音频播放器实现
- 敏捷开发 Scrum 总结
- ie8 不支持 position:fixed 的简单解决办法
- 如何才能下载资源