教你快速了解HTTP协议
HTTP 简介
1.什么是 HTTP 协议
什么是 HTTP:
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。用于定义客端浏览器和服务器之间交换数据的过程。
为什么学习 HTTP?
- HTTP 协议是 Web 开发的基础。每一个请求和响应是 Web 开发的最基本的操作。
- *学习 Web 开发不好好学习 HTTP 协议,将会“打拳不练功,到老一场空”,你花在犯迷糊上的时间比你沉下心来学习 HTTP 的时间肯定会多很多。
- 学习 HTTP 协议才能在开发中更好的发现问题和解决问题。
2.HTTP 的作用和特点
作用:
*可以使浏览器和服务器之间更高效的传输数据。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
特点:
基于 请求-响应 模型,先有请求后有响应,如下图:
3.HTTP 协议的组成
HTTP 请求协议包括:请求行、请求头、请求体
HTTP 响应协议包括:响应行、响应头、响应体
HTTP 请求与响应
HTTP 请求
什么是 HTTP 请求:
客户端连上服务器后,向服务器请求某个 Web 资源,称之为客户端向服务器发送一个 HTTP 请求。
*请求包括了一个请求行、若干请求头、以及请求体内容,请求头和请求体内容之间要用空行隔开。
例如:
POST /post.html HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 36
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0
Content-Type:: application/x-www-form-urlencodeed
Accept: */*
Referer: http://localhost:8080/post.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN, zh; q=0.9
Cookie: Idea-cf2f3ff1-49de9213-2312-353b-ab35c-fsa23g3faf1; JSESSTONID=14BSDFA35Q2DASDF152ASDDQ
name=%E5%B0%8F%E6%98%8E&passWord=456
1.什么是请求行?
请求行里包含了 HTTP 的请求方式、请求资源名称、HTTP 版本。
例如:POST /post.html HTTP/1.1
请求行格式:请求方式 资源路径 协议/版本
HTTP 请求方式:
请求行中的 POST 称之为请求方式,常见的请求方式有:POST、GET、DELETE、PUT
1)Get 请求:向服务器的特定资源发出查询请求,一般用于查询数据和资源的请求中。
- *get 请求查询的参数可以在浏览器的地址栏中显示
- *请求的数据会附加在 URL 之后,以 ? 分割 URL 和传输数据,多个参数用 & 连接
- *没有请求体
*例如:GET /get.html?name=xiaohong&passWord=123456 HTTP/1.1
2)POST 请求:向服务器提交数据,一般用在客户端将本地数据或者资源提交给服务器,例如注册用户,将用户信息提交给服务器。
- POST 请求会把请求的数据放置在 HTTP 请求体中。
*例如:POST /post.html HTTP/1.1 数据
数据 name=xiaohong&passWord=123456 放在请求体中,而不会放到 URL 中
3)DELETE 请求:一般用于删除数据的时候。
4)PUT 请求:一般用于更新数据的时候。
使用场景:
- GET请求通常用于查询操作(比如点击某个商品,某个链接)
- POST请求通常用于提交数据操作(比如用户登录、注册)
区别:
- 在 HTTP 规范中, 没有对 URL 的长度和传输的数据大小进行限制。但是在实际开发过程中,对于 GET 请求,特定的浏览器和服务器对 URL 的长度有限制。因此,在使用 GET 请求时,传输数据会受到 URL 长度的限制。(太长不易于识别,而且也会影响性能)
- 对于 POST 请求, 由于不是 URL 传值,理论上传输数据长度是不受限制的。(所以 POST 请求可以用于一些数据较大的场景,而 GET 请求是不可以的)
2.什么是请求头?
请求头用于描述客户端请求哪台主机,以及客户端的一些环境信息等。请求头以键值对(key=value) 方式传递数据。
例如:
Host: 1ocalhost:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent :Chrome/58.0.3029.110 Safari/537. 36
Content-Type: application/x7r form-ur lencoded
Accept: text/html, application/ xhtml +xm1, application/ xml;q=0.9 , in iret P. */*;q=0.8
Referer: http://1ocalhost :8080/post. html
Accept -Encoding: gzip, deflate, br
Accept-Language: zh-CN, zh;q=0.8, en;q=0.6
Cookie: Idea-cf2f8ff1=49d3921e-2812-464b-b68b-6c54c9t 5cbl7,
JSESSIONID-8990466BFC3DCC6778D2A03630270A7D
3.什么是请求体?
请求体代表着浏览器在 POST 请求方式中传递给服务器的参数,请求体中的每一个数据都是使用键值对(key=value) 形式,多个值用 & 连接,注:服务器在接收到请求体后需要单独解析。
例如:(用户登录时传入一个 name 和 passWord)
name=test&passWord=123456 (登录数据提交后需要后台服务器单独解析这些数据,HTTP 是不会对他做出解析的)
HTTP 响应
什么是 HTTP 响应:
一个 HTTP 响应代表服务器向客户端回送的数据, 它包括:一个响应行、若干响应头、以及响应体,其中的一些响应头和响应体的内容都是可选的,响应头和响应体内容之间要用空行隔开。
例如:
HTTP/1.1 200
Accept -Ranges: bytes
ETag: W/"413-1495617981796"
Last-Modified: Wed, 24 May 2017 09:26:21 GMT
Content -Type: text/html
Content: -Length: 413
Date: Wed, 24 May 2017 09:29:37 GMT
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h2>........HTTP post........</h2>
<form action="#" method="post">
<p>..........; <input type="text" name="name"></p>
<p>..........; <input type="text" name="name"></p>
<input type="submit" value="........." />
</form>
</center>
</body>
</html>
1.什么是响应行?
响应行里包含了 HTTP 协议的版本,以及用于描述服务器对请求的处理结果。
例如:HTTP/1.1 200 OK
格式:协议/版本 状态码 状态码描述
状态码:服务器和浏览器用于确定状态的固定数字号码
- 200:请求成功
- 302:请求重定向
- 404:请求资源不存在,通常是访问路径写错了,或者服务器删除了该资源
- 500:服务器内部发生错误(和我们没有关系)
2.什么是响应头?
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理 等一会儿它回送的数据。
例如:
Server: Microsoft- IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private
3.什么是响应体?
响应体代表服务器向客户端浏览器回送的正文。
例如:(将 html 作为一个响应体返回给浏览器,浏览器直接解析然后显示)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h2>........HTTP post........</h2>
<form action="#" method="post">
<p>..........; <input type="text" name="name"></p>
<p>..........; <input type="text" name="name"></p>
<input type="submit" value="........." />
</form>
</center>
</body>
</html>
哟!神秘传送门 快来探索吧...