一. HTTP简介
1. 定义:
(1) HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于
定义WEB浏览器与WEB服务器之间交换数据的过程。
(2) 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议是对
浏览器客户端和服务器端之间数据传输的格式规范。
2. 图解:
注意:一个请求一定会有一个响应,而且只有一个响应。
3. 查看http协议的工具:
(1) 使用火狐的firebug插件(右键-->firebug-->网络);
(2) 使用谷歌的"审查元素";
(3) 使用系统自带的telnet工具(远程访问工具);
① telnet IP地址 端口,比如telnet localhost 8080可以用来访问tomcat服务器;
② 此时输入命令,命令行界面是不会显示输入的内容的,这时候我们按住ctrl+],然后回车,这就可以看到回
显;
③ 输入请求内容;
④ 回车,即可看到服务器响应信息。
注意:如果当我们在命令行输入telnet命令,提示"telnet"不是内部或外部命令,也不是可运行的程序,那是因为
系统默认是关闭远程访问的,我们需要手动开启,手动开启telnet方法如下:控制面板--->程序--->程序和功能-
-->启用或关闭windows功能--->Telnet客户端前打上对勾。
4. http协议内容:
(1) 请求(浏览器--->服务器)
(2) 响应(服务器--->浏览器)
5. HTTP协议1.0和HTTP协议1.1的区别:
HTTP协议版本有两种,分别是:HTTP 1.0和HTTP 1.1,它们的主要区别如下:
(1) 在HTTP 1.0协议中,当浏览器客户端与服务端建立连接之后,只能发送一次请求,一次请求之后就会关闭连
接,也就是说只能获得一个web资源。
(2) 在HTTP 1.1协议中,当浏览器客户端与服务端建立连接之后,可以在一次连接中发送多次请求,也就是说在
一个连接上可以获取多个web资源。(基本都使用1.1版本)
二. HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求,一个完整的
HTTP请求包含如下内容:一个请求行、若干请求头、以及实体内容。其中的一些请求头(消息头)和实体内容都是
可选的,请求头和实体内容之间要用空行隔开。
1. 请求行
请求行用于描述客户端的请求方式、请求的资源名称、以及使用的HTTP协议版本号。如下:
GET /zw_http/RequestDemo1 HTTP/1.1(从右往左看)
(1) HTTP协议版本使用1.1版本。
(2) 请求资源:
① URL(统一资源定位符):只能定位互联网资源,是URI的子集。如:
http://localhost:8989/zw_http/index.html。
② URI(统一资源标记符):可以用于标记任何资源。可以是本地文件系统资源,局域网的资源,也可以是互联网
的资源。
(3) 请求方式:
常见的请求方式有:GET,POST,HEAD,TRACE,PUT,CONNECT,DELETE。
常用的请求方式有:GET,POST。
2. 注意:GET和POST的区别:
(1) GET方式提交:
① 地址栏(URI)会跟上参数数据,以?开头,多个参数之间以&分割,其实是跟在了请求头URI的后面。比如:
GET /zw_http/RequestDemo1?name=eric&password=123456 HTTP/1.1
② GET方式提交参数数据有限制,不超过1KB。
③ GET方式不适合提交敏感数据,比如密码,因为会暴露。
④ 注意:浏览器直接访问的请求,默认提交方式是GET方式。
(2) POST方式提交:
① 参数不会跟在URI的后面,而是跟在请求的实体内容中。没有?开头,多个参数之间以&分割。比如:
② POST提交的参数数据容量没有限制。
③ POST方式可以提交敏感数据。
注意:只有POST方式提交才会有实体内容,并且要有参数,也就是说必须是有参数的POST方式提交才会有实体
内容。并且doGet方法是拿不到POST提交的数据的。
3. 请求头
(1) 常见请求头:
(2) Accept请求头是浏览器发送给服务器的,把这个请求发过去之后,服务器拿到这个请求就会知道应该返回什
么类型的数据给服务器,要不然浏览器可能会读不懂。
(3) 每一个请求都必须有Host请求头,代表这次要访问的地址。
4. 实体内容:
只有POST提交的参数会放到实体内容中去。
三. HTTP响应
一个HTTP响应代表服务器向客户端回送的数据,它包括:一个状态行、若干响应头、以及实体内容。其中的一些
响应头(消息头)和实体内容都是可选的,响应头和实体内容之间要用空行隔开。
1. 响应行
响应行用于描述服务器对请求的处理结果。
(1) HTTP协议版本。
(2) 状态码:用于表示服务器对请求的处理结果(状态),它是一个三位的十进制数。状态码分为五类:
常见的状态码如下:
① 200:表示请求处理完成并完美返回。
② 302:表示请求需要进一步细化。
③ 404:表示客户访问的资源找不到。
④ 500:表示服务器的资源发生错误。(服务器内部错误)
(3) 状态描述。
2. 响应头
响应头用于描述服务器的基本信息以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理
等一会儿它回送的数据。
(1) 常见的响应头:
3. 实体内容:
代表服务器向客户端回送的数据。