Http请求头和响应头
说明:HTTP 请求报文由3部分组成(请求行+请求头+请求体)
解析上图
-
1是请求方法,常用的有增(post)删(delete)改(put)查(get)
-
2是请求对应的URL地址,他和报文头的Host属性,组合起来是一个完整的请求URL
-
3是协议名称和协议版本号
-
4是报文头,有若干个属性,形式为key:val,服务端据此获取客户端信息
-
5是报文体,它将一个页面表单中的组件值通过param1=val1&parma=2的键值对形式编码成一个格式化串,它承载多个请求参数的数据,不但报文头可以传递请求参数,URL也可以通过/chapter15/user.html? param1=value1¶m2=value2”的方式传递数值
-
自行理解:报文行和报文头就是好比一个人的名字,报文体就好比叫完人名对这个人说的内容,通过url请求叫那个人的名字,也可以带上内容去叫那个人的名字,看那个人,也就是那个服务会响应什么信息给你.
常见的http状态码
-
200 OK 表示成功
-
303 重定向,把你重定向到其他页面
-
304 资源并未修改,可以直接使用本地的缓存
-
404 找不到页面(页面被删除或其他)
-
500 服务端错误
开始模拟tomcat web server服务
说明:通过上面的学习认识到http传输协议的书写格式,开始模拟
package com.jt.net;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**本类用于模拟Tomcat Web Server服务对象工作原理*/
public class Tomcat {
/*main方法是一个主线程,用来运行webServer*/
public static void main(String[] args) throws IOException {
/*ServerSocket是java中服务端对象,括号内写服务器的端口(我们的端口是设置到配置文件中),
* 并监听端口9999*/
ServerSocket server=new ServerSocket(9999);
/*tomcat服务器启动成功提示*/
System.out.println("server start ok");
/*添加无限循环*/
while(true){
/*server.accept()这个方法是一个阻塞方法,等待客户端连接
* 在接收到请求localhost:9999的时候才会执行下一步
* 当没有请求的时候这个方法就会放弃cpu给别的线程使用*/
Socket client = server.accept();
/*当有请求发送来的时候会打印客户端对象socket*/
System.out.println("client="+client);
/*使用流对象中的输出流对象,后端向客户端发送hello信息*/
OutputStream out = client.getOutputStream();
/*浏览器接收后端输出的数据需要遵循http协议,因此需要根据http协议传输数据
* \r表示回车,把光标移动到左边,\n表示换行,在下一行开始输入*/
String data="HTTP/1.1 200 OK \n\r"+//响应行
"Content-Type: text/html;charset=UTF-8 \n\r"+//响应头
"\n\r"+//空行(格式需要,分开消息头和消息体)
"hello";//响应体
/*使用输出流方法响应请求*/
out.write(data.getBytes());
/*清空输出流缓冲区*/
out.flush();
}
}
}