关于HTTP协议和GET、POST请求
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部分:
* 请求⾏
* 请求报头
* 空⽩⾏
* 请求体
7.3、请求协议之:GET请求⽅式,详情:
GET /prj-servlet-008/user/login?username=admin&password=123 HTTP/1.1                    请求⾏
Accept: text/html, application/xhtml+xml, */*                                            请求报头
Referer: 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&最终提交的数据显⽰在浏览器的地址栏上    7.4、请求协议之:POST请求⽅式,详情:
POST /prj-servlet-008/user/login HTTP/1.1                                                请求⾏
Accept: text/html, application/xhtml+xml, */*                                            请求报头
Referer: 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&最终提交的数据不会显⽰在浏览器的地址栏上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>                                                        ....
html中提交表单用什么属性
<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、(这些不常⽤)
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情况要多⼀些。
希望对你有帮助,祝你有⼀个好⼼情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。