1、什么是通信协议?
计算机A和计算机B之间在传送数据之前,制定好的一种数据传送格式。
发送数据的时候采用特定的格式发送,接收方提前知道数据的格式,可以快速的准确的从该数据包中解析出有价值的数据。
2、Browser和Server之间通信的时候,采用的通信协议是HTTP协议,目前常用版本号是:HTTP1.1协议。
3、HTTP协议被称为超文本传输协议。W3C制定的。浏览器和服务器之间传送数据的时候,必须遵守它们制定的格式。
4、HTTP协议底层协议是:TCP/IP协议。
5、HTTP协议包括:
请求协议:从浏览器发送数据到服务器端。(Browser --> Server)
响应协议:从服务器端发送数据到浏览器客户端。(Server ---> Browser)
6、可以安装httpwatch工具对HTTP协议进行监测。
7、关于HTTP协议之请求协议:
7.1、请求协议包括:get方式、post方式等
7.2、无论是get还是post,请求协议包括4部分:
* 请求行
* 请求报头
* 空白行
* 请求体
HTTP 头部解释
7.3、请求协议之:GET请求方式,详情:
GET /prj-servlet-008/user/login?username=admin&password=123 HTTP/1.1 请求行
Accept: text/html, application/xhtml+xml, */* 请求报头
Referer: http://localhost:8080/prj-servlet-008/ 请求报头
Accept-Language: zh-CN 请求报头
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) 请求报头
UA-CPU: AMD64 请求报头
Accept-Encoding: gzip, deflate 请求报头
Host: localhost:8080 请求报头
Connection: Keep-Alive 请求报头
空白行
请求体
注意:
1、请求行由三部分组成:请求方式+URI+协议版本号
2、get请求在请求行上发送数据,格式:uri?name=value&name=value...最终提交的数据显示在浏览器的地址栏上
7.4、请求协议之:POST请求方式,详情:
POST /prj-servlet-008/user/login HTTP/1.1 请求行
Accept: text/html, application/xhtml+xml, */* 请求报头
Referer: http://localhost:8080/prj-servlet-008/ 请求报头
Accept-Language: zh-CN 请求报头
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) 请求报头
Content-Type: application/x-www-form-urlencoded 请求报头
UA-CPU: AMD64 请求报头
Accept-Encoding: gzip, deflate 请求报头
Host: localhost:8080 请求报头
Content-Length: 27 请求报头
Connection: Keep-Alive 请求报头
Cache-Control: no-cache 请求报头
空白行
username=admin&password=112233 请求体
注意:
1、请求行由三部分组成:请求方式+URI+协议版本号
2、post请求在请求体中发送数据,格式:name=value&name=value...最终提交的数据不会显示在浏览器的地址栏上
8、关于HTTP协议之响应协议:
8.1、响应协议包括四部分:
* 状态行
* 响应报头
* 空白行
* 响应体
8.2、响应协议的详细内容:
HTTP/1.1 200 OK 状态行
Server: Apache-Coyote/1.1 响应报头
Content-Type: text/html;charset=UTF-8 响应报头
Content-Length: 96 响应报头
Date: Mon, 23 May 2016 02:21:25 GMT 响应报头
空白行
<html> 响应体
<head> ....
<title>login success</title>
</head>
<body>
login success
</body>
</html>
8.3、关于状态行:
* 状态行包括三部分:协议版本号 + HTTP状态码 + 状态描述信息
* HTTP状态码是W3C规定的,属于HTTP协议的一部分。
* 常见的HTTP状态码:
200 - 响应成功,正常结束
404 - 资源未找到,路径错误
500 - 服务器内部错误,例如服务器端的代码出现异常
405 - ?????
.......
8.4、关于响应报头:
* 服务器版本信息
* 响应的内容类型以及字符编码方式
* 响应内容长度,以字节为单位
* 响应时间
9、关于GET请求和POST请求
9.1、什么样的请求是GET请求,什么样的请求是POST请求呢?
* 只有一种情况是POST请求,当使用form表单,并且form表单的method属性手动设置为 method="post"才是post请求其它任何一种请求都是基于GET方式。
* 超链接、在浏览器地址栏上直接输入URL回车、表单提交时没有设置method、表单提交时method设置为method="get" 等都属于GET请求方式。
<html>
<head>
<title>用户登录</title>
<meta charset="UTF-8">
</head>
<body>
GET请求方式:
<form action="/servletDemo/login">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
GET请求方式:
<form action="/servletDemo/login" method="get">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
POST请求方式:
<form action="/servletDemo/login" method="post">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
9.2、实际上HTTP协议中请求方式不止是GET和POST,还有其它的方式,例如:put、delete......(这些不常用)
9.3、GET请求和POST请求的区别?
- GET请求在请求行上发送数据,数据最终显示在浏览器地址栏上
- POST请求在请求体中发送数据,数据不会显示到浏览器地址栏上
- GET请求只能提交普通的字符串
- POST请求由于在请求中提交数据,所以不仅可以提交普通的字符串,而且还可以提交二进制数据(图片、声音、视频等...)
- GET请求由于在浏览器地址栏上显示,所以GET请求提交的数据量有限制。
- POST请求提交数据量没有上限【理论上是这样的】
- GET请求最终的结果会放到浏览器的缓存当中(cache)
* get请求大部分都是为了读取服务器端的资源,这个资源是有价值的,放到缓存当中。
- POST请求最终的结果不会放到浏览器的缓存当中(no-cache)
* post请求大部分都是为了修改服务器端的某个资源,由于每一次修改的结果可能不同,所以最终的结果也没有必要让浏览器缓存起来。
9.4、GET请求和POST请求怎么选择使用?
- 提交的数据当中有敏感信息使用POST
- 提交的数据是大数据量采用POST
- 提交的数据不是普通的字符串采用POST
- 修改服务器端资源采用POST
- 其它都是用GET方式提交
注:相对来说,GET情况比POST情况要多一些。
希望对你有帮助,祝你有一个好心情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充!