http协议:模拟浏览器、服务器

来源:互联网 发布:图灵机原理 知乎 编辑:程序博客网 时间:2024/06/01 20:25

浏览器(可以访问真正的服务器)::

package com.demo.tcp;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;//建立客户端,发送和浏览器相同的信息即可,服务器为本地Tomcatpublic class TzBrowser09 {public static void main(String[] args) {try {//建立客户端Socket s = new Socket("127.0.0.1", 8080);//发送http消息PrintWriter pw = new PrintWriter(s.getOutputStream() , true);pw.println("GET /it/1.html HTTP/1.1");//请求行必须发,Tomcat webapps下有it文件夹,内有1.htmlpw.println("Accept-Language: zh-CN");pw.println("Host: 127.0.0.1:8080");pw.println("Connection: close");//http1.1,需要手动断开,http1.0不需要pw.println();//空行//接收Tomcat反馈信息,简单演示,实际开发不适应InputStream is = s.getInputStream();byte [] buf = new byte[1024];int len = is.read(buf);System.out.println(new String(buf,0,len));}  catch (IOException e) {e.printStackTrace();}}}
服务器(可以通过真正的浏览器):

package com.demo.tcp;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/* * 1.服务器介绍: * 技术:Socket(端点、端口,参加网络编程之前博文) *   IO技术 *   多线程技术 *  * ————>客户端和服务端通过http协议通讯; *  * 2.Http协议: * 简介:应用层协议,负责定义超文本(超出文本范畴)规范 * 内容: * 通过自定义服务端打印信息即可了解见[2-1] *  * 结果:(Http协议请求消息头) * 第一部分,请求行 :请求方式  /Web资源路径 Http协议/版本 * GET /  HTTP/1.1    第二部分,请求属性信息(键值对,键不能修改)Host: 127.0.0.1:9090Upgrade-Insecure-Requests: 1Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,* /*;q=0.8本浏览器支持文件* /*表示其它也支持(直接下载)Accept-Encoding: gzip, deflate, sdch封装形式:为了提高访问速率,可以采用压缩机制,此内容告诉服务器压缩网页的格式Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4第三部分,请求体:自定义信息(http协议规定,请求属性信息和请求体信息必须有一个空行): *  *  * * 3.Http版本(现在只有1.0和1.1):见图片 *  * 例子:现在客户端访问服务器的1.html,1.html中有4.jpg * http1.0:建立连接——>请求1.html网页——>服务器返回1.html——>连接断开——>发现1.html中有4.jpg *   再次建立连接——>请求4.jpg——>服务器返回4.jpg——>连接断开 *  * http1.1:建立连接——>请求1.html网页——>服务器返回1.html——>发现1.html中有4.jpg *   ——>请求4.jpg——>服务器返回4.jpg ——>连接断开 *  * http1.0:一次连接,一次请求;当页面资源过多,访问极慢(因为建立连接需要的时间很长) * http1.1:一次连接,多次请求; *  * ——>每请求一个资源发送一次请求(打开图片多的网页时间慢:请求的次数多) *  * 4.模拟浏览器,见TzBrowser09.java: * 引入:通过2得知浏览器发送数据的格式,如果我们发送同样的数据,就可以模拟浏览器了 *   *  * */public class TzServer09 {public static void main(String[] args) {getHttp();//[2-1]}private static void getHttp() {try {ServerSocket ss = new ServerSocket(9090);Socket s = ss.accept();System.out.println("connected");InputStream is = s.getInputStream();byte[]buf = new byte[1024];int len = 0;while((len = is.read(buf)) != -1){System.out.println(new String(buf , 0 , len));}PrintWriter pw = new PrintWriter(s.getOutputStream() , true);//反馈信息pw.println("hello");s.close();ss.close();} catch (IOException e) {e.printStackTrace();}}}



0 0
原创粉丝点击