Web基础下
1- HTTP协议
1.1
什么是协议?
就是通信双方建立的一种规则。
1.2
什么HTTP协议?
a. HTTP协议(HyperText Transfer Protocal)超文本传输协议。如何在浏览器和服务器之间传输超文本(HTML)的协议。
b. HTTP协议规定了Web的基本运行过程,以及浏览器和服务器之间通信细节。
1.3
HTTP协议特点
a. HTTP协议无状态的,无连接的协议。
b.HTTP协议采用客户端/服务器通信模式。服务器也叫Web服务器或HTTP服务器;客户端叫HTTP客户端(浏览器)。
c.HTTP版本号: HTTP1.0, HTTP1.1,HTTP2.0
HTTP1.0和HTTP1.1之间的区别?
1.0:一次请求得到所有内容。
1.1:如果请求的HTML文档中含有img, embed标签时,在第一次请求结束后,还会向服务器端请求图片,音频视频等文件。详细见(https://www.cnblogs.com/andashu/p/6441271.html)
d.HTTP客户端向服务器端发送信息,叫请求(request);服务器端向客户端返回信息,叫响应(response)
e.HTTP客户端和服务器端可以分别用不同的语言编写。并且可以运行在不同的平台上。只需要请求和响应格式符合HTTP协议的规
范,
双方就能够交流。
总之:HTTP协议规定了HTTP请求的数据内容格式和HTTP响应的数据内容格式。只要符合HTTP规定
的数据格式,客户端和浏览器端就能够通信。
1.4
HTTP请求格式
HTTP协议规定,HTTP请求由三部分组成
请求首行 请求头信息 请求正文内容 |
客户端(不仅仅指浏览器)发送给服务器的内容必须按照这个格式,否则Web服务器无法解析
案例:自己编写一个服务器,使用浏览器访问
public class MyTomcat {
public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket server = new ServerSocket(9999);
Socket s = server.accept();
InputStream is = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
}
}
请求首行:请求方式 URI HTTP版本号 例如:GET / HTTP/1.1
请求方法:GET, POST。 (HEAD, PUT, DELETE)
请求方法:GET, POST。 (HEAD, PUT, DELETE)
GET:将HTML表单内容放在URI之后?name=value&name=value ;
请求正文一般无数据。
POST:可以发送大量的数据。HTML表单数据在请求正文中。
URI: 标识访问的资源路径。以/开头,/可以理解为服务器发布web应用的根目录
HTTP版本号:一般都是1.1
请求头信息:GET请求头信息
Host: localhost:9999
访问的主机的地址和端口号
Connection: keep-alive 浏览器和服务器之间连接模式,默认keep-alive为3000ms。将连接保存一会
Cache-Control: max-age=0 表示缓存
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8告诉服务器,浏览器能够接受的MIME信息类型。 */*所有
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36告诉服务器浏览器自己所在操作系统的相关信息。
Accept-Encoding: gzip,deflate,sdch 告诉服务器,浏览器支持的压缩格式。服务器会根据此对返回信息进行压缩。
Accept-Language: zh-CN,zh;q=0.8 告诉服务器,客户端操作系统是中文,tomcat根据此设置,自动选择相对应的语言网页,发送给浏览器。Accept-Charset:GB2312, utf-8 告诉服务器,浏览器支持的编码 If-Modified-Since:Web, 01, 2016 06:11:22 GMT 此请求的头信息,与相应的last-modified配对使用。 Cookie: JSEESIONID=xxxxxxxxxxx :浏览器第一次请求服务器时,服务器会为浏览器分配一个cookie,下次浏览器再去访问服务器,带上cookie。服务器就认识浏览器。 |
POST /hello.jsp HTTP1.1 Referer: http:www.baidu.com 参考。告诉服务器,此次请求从哪个页面转来的。如果直接在地址栏输入,没有referer头信息。 统计搜索平台的广告效果;防止链接盗用 Content-Type: application/x-www-form-urlencoded//MIME类型,form标记enctype值默认。表单数据采用name=value形式表示,对表单数据使用url编码。表单自动进行URL编码,而超链接传值则不会自动编码(必须手动编码) Content-length:15 //POST请求中,请求正文的长度。 ... name=helloworld |
空行:HTTP协议规定,请求头和正文之间必须以空行(\r\n)分割。表示的意思请求头已结束。
请求正文:
get请求一般没有请求正文(有空行);Post方式请求正文,就是表单信息。
1.5 HTTP响应格式:
HTTP协议规定,HTTP响应也有三部分组成
|
Tomcat将浏览器请求的内容发送给浏览器。浏览器按照该样式解析并显示
响应首行: HTTP协议版本号 状态码 描述信息(对状态码的解释)
HTTP/1.1 200 OK
常见的状态码表示的含义:
200 请求成功 浏览器会把响应体内容显示
404 请求资源未找到,说明客户端请求了不存在的资源
500 请求的资源找到了,但是服务器内部出现错误。
302 重定向,表示服务器要求浏览器重新发一个请求,服务器告诉浏览器
新请求的URL。新的URL以一个location的响应头,告诉浏览器。
304 根据响应的last-modified与请求的if-modified-since
响应头信息
Server: xxxx //服务器的版本信息 Accept-Ranges:bytes //告诉浏览器服务器支持断点续传 Last-Modified:xxx Content-Type: text/html //告诉浏览器发送的MIME类型 Content-Length:100 //请求正文的长度 Date: 时间 //响应的时间 以下三个响应头表示服务器告诉浏览器不要缓存。 Expires=0或-1 Cache-Control:no-cache Pragma:no-cache |
响应正文
HTML文档内容是最常见的响应正文。
1.6 HTTPS(了解)
HTTPS HyperText Transfer Protocal over Secure Socket Layer.使用SSL进行信息
交换。简单说HTTPS就是安全的HTTP。
对称加密:
加密和解密使用同样的密钥。
对称加密的私钥进行非对称加密,再传送。
A B
A用户有一个对称加密的秘钥(100)。先访问B,B将非对称的公钥发送给A,A通过公
钥将
对称加密的密钥(100)进行加密,再传给B,B通过私钥对发过来的信息解密,得到
对称加密的密钥。
非对称加密:RSA
使用一对密钥(公钥和私钥),私钥只能有一方保管,不能外泄。公钥可以发送诶任何
请求的人。使用公钥加密,使用私钥解密。
HTTPS和HTTP区别?
1- HTTPS协议需要到CA申请证书,一般收费。
2- HTTP信息传输是明文,HTTPS具有安全性的SSL加密传输协议。
3- HTTP和HTTPS使用完全不同的连接方式和端口号。HTTP端口80, HTTPS是443。
4- HTTP连接简单,无状态,高效。HTTPS是SSL+HTTP协议构建的可进行加密传输,身
份认证的网络协议,安全,但性能低
2- Web应用
2.1 静态应用和动态应用
静态应用:web发展初期,信息仅仅以文本,图片,声音等形式展现。浏览器
只 能 访 问Web服务器中的静态信息。
只 能 访 问Web服务器中的静态信息。
动态应用:Web服务器增加了动态执行特定程序的代码,这些代码用于根据用户请
求 动态生成HTML文档。这些特定代码就是Servlet(完全用Java语言编写的程
求 动态生成HTML文档。这些特定代码就是Servlet(完全用Java语言编写的程
序)/JSP(嵌入了程序代码的HTML文档)。
什么是动态应用:Web服务器可以为访问同一资源的不同客户单定制的显示信息。
案例:如何动态生成HTML。
客户端:浏览器
2.2 Web应用定义
Servlet规范中对Web应用定义: Web应用由一组Servlet/JSP,HTML文件,相关Java类,还
有其他资源构成。Web应用可以在各个符合Servlet规范的容器中运行。
2.3 Web应用目录结构
Web应用的目录结构是要符合Servlet规范。
web目录结构分析:
1- hello: Web应用的根目录,所有的JSP,HTML文档都存放在此目录(实际开发,jsp一般放在WEB-INF目录下)。
2- WEB-INF:存放Web应用的配置文件web.xml。该目录必须大写,且
浏览器无法访问该目录中的资源,安全。
3- src: 开发hello应用阶段,开发人员编写代码的目录。该目录中存放的都是Java类源文件。Web产品正式发布,一般都不会将Java源文件公开。在真正使用的时候,使用的.class文件(一般在WEB-INF\clsses目录下)。
4- WEB-INF/web.xml: web应用程序的部署描述符文件。由开发人员编写,供Servlet容器访问。Servlet容器在加载和启动Web应用会读取该文件的信息,从中获得关于当前Web应用的信息。
5- WEB-INF/classes:存放的都是src包中源文件编译后的.class文件。
6- lib: 存放当前Web应用所需要的各种jar包。jdbc jar
也就是说,以后自己编写Web应用时,应当符合以上Web应用的目录结构。