模拟web服务器
- 理解什么是get和host?
Get:请求指定的页面信息,并返回实体主体。
Host:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
两者的区别:
- GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx? name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
- 分清楚什么是请求,什么是响应,以及组成他们的元素?
请求:客户端发送到服务器端的请求消息,我们称之为请求(request),其实就是一个按照http协议的规则拼接而成的字符串,Request请求消息包含三部分: 请求行 消息报头 请求正文
请求行
格式:
Method Request-URI HTTP-Version CRLFMethod表示请求方法;一般为GET或者POST ;Request-URI是一个统一资源标识符; HTTP-Version表示请求的HTTP协议版本; CRLF表示回车和换行
例如: GET /test.html HTTP/1.1 通过http1.1协议向服务器请求一个test.HTML的资源
消息报头 http header
通过:连接的一些类似键值对的信息
GET /test.html HTTP/1.1 Host: 127.0.0.1:9999 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,en;q=0.8,zh;q=0.5,en-US;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive
请求正文 http body
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的字符串信息
注意:在第二部分header和第三部分body之间有个空行,除非没有请求正文
响应:服务器在接收和解释客户端的请求消息后,服务器会返回给客户端一个HTTP响应消息,我们称之为响应(response)。其实也是一个按照http协议的规则拼接而成的一个字符串
HTTP响应也是由三个部分组成,分别是: 响应状态行、消息报头、响应正文
响应状态行
- HTTP-Version Status-Code Reason-Phrase CRLF
- HTTP/1.1 200 OK
- HTTP-Version表示服务器HTTP协议的版本;
Status-Code表示服务器发回的响应状态代码;
Reason-Phrase表示状态代码的文本描述。
CRLF表示回车和换行消息报头
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头这四大类。
通过响应的消息报头里面的属性 Content-Type 来表示
("png", "image/png;charset=utf-8"); ("pdf", "application/pdf;charset=utf-8"); ("html", "text/html;charset=utf-8"); ("txt", "text/html;charset=utf-8"); "Content-Type: text/html;charset=utf-8\r\n"
响应正文
- 响应正文就是服务器返回的资源的内容
- 如何在Ubuntu上部署项目?
先把项目打成jar包
然后将资源文件和jar包利用远程控制工具部署到虚拟机中
然后在虚拟机中java -jar server.jar打开服务器
就可以在本机中通过ip地址和端口号以及get/host请求获取到资源