HTTP协议

1.HTTP协议简介

1.1 网络基础TCP/IP协议族

  1. 网络中的设备要进行通信,必须遵循一些相同的规则,这些规则我们称之为协议。网络中存在这多种协议,如:TCP、IP、HTTP、FTP等。这些协议我们统称为TCP/IP协议族,有时也简称为TCP/IP协议。网络是在TCP/IP基础上运作的。协议中存在各式各样的容。从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示需要理的步骤,等等。
  2. TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分为以下 4 层:
    1. 应用层
      1. 应用层为用户提供常用的应用程序,并实现网络服务的各种功能。
    2. 传输层
      1. 传输层负责组装收到的数据(或者拆分要发送的数据)。
    3. 网络层
      1. 控制数据包的发送和接收。
    4. 数据接口层。
      1. 处理网络连接的硬件部分(路由器、网卡等)。
  3. 把TCP/IP层次化的好处是,如果网络中的信息的传输由一个协议统筹,如果某个地方的设计发生改变则需要修改整个协议,而采用分层结构之后,只需要将需要变动的层换掉即可。
  4. TCP/IP通信示意图:

 

1.2 HTTP协议

  1. HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则
  2. 客户端与服务端通信时传输的内容我们称之为报文。
  3. HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。
  1. 报文

3.1 报文格式

 

3.2 请求报文

3.1.1 报文格式

请求首行;

请求头信息;

空行;

请求体;

 

3.1.2 GET请求

GET /index.html?username=admin HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 65553-10068
Referer: http://127.0.0.1:3000/form.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:3000
DNT: 1
Connection: Keep-Alive

请求报文的结构
	请求首行
		GET /index.html?username=admin HTTP/1.1
		请求方法 请求的路径?查询字符串 协议名/协议版本
						(get请求通过查询字符串将请求参数发送给服务器)
	
	请求头
		- 通过观察发送,请求头实际上是一个一个的名值对结构,有的是一个名字对应一个值,有的是一个名字对应多个值
			请求头中的内容,用来告诉服务器浏览器的一些信息
		Accept: text/html, application/xhtml+xml, */*
			- 浏览器可以接受的数据类型:后边的值都是一个一个的MIME值
				*/* 表示任意类型的文件
		
		Referer: http://127.0.0.1:3000/form.html
			- 请求的来源:1.广告计费   2.防止盗链
		
		Accept-Language: zh-CN,en-US;q=0.5
			- 客户端使用的语言:zh-CN表示中文简体
		
		User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
			- 用户代理、用户的浏览器的信息
		
		Accept-Encoding: gzip, deflate
			- 允许的压缩格式:
		
		Host: 127.0.0.1:3000
			- 主机地址
		
		Connection: Keep-Alive
			- 连接时间:Keep-Alive 表示当前连接是一个长连接


	空行
	请求体
		- get请求没有请求体,所以空行对于get请求没有意义

3.1.3 POST请求

POST /index.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 65553-10094
Referer: http://127.0.0.1:3000/form.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:3000
Content-Length: 14
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache

username=admin


请求首行
	POST /index.html HTTP/1.1
请求头
	Accept: text/html, application/xhtml+xml, */*
	
	Referer: http://127.0.0.1:3000/form.html
	Accept-Language: zh-CN,en-US;q=0.5
	User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
	Content-Type: application/x-www-form-urlencoded
		- 请求体的类型:application/x-www-form-urlencoded 表示请求体中的内容将会被url编码
	
	Accept-Encoding: gzip, deflate
	Host: 127.0.0.1:3000
	Content-Length: 14
		- 请求体的长度
	
	Connection: Keep-Alive
	Cache-Control: no-cache
		- 缓存控制:no-cache不使用缓存

空行
	- 空行用来分隔请求首部和请求体
	
请求体
	username=admin
	- post请求的请求参数都是通过请求体发送的
	
get请求 和 post请求
	1.除了表单的method设置为post时发送的请求,其余的全都是get请求(没有考虑AJAX的情况)
	2.get请求通过url地址发送请求参数,请求参数可以直接在地址栏查看,安全性较差
		post请求通过请求体发送请求参数,请求参数不能直接看见,所以相对安全
	3.url地址的长度现在255个字节,所以使用get请求发送的参数不能太多,
		请求体的大小没有限制,可以发送任意多的内容,使用post请求想发什么就发什么
	4.在开发中,一般情况在提交表单时都应该使用post,而不使用get

 

3.3 响应报文

3.2.1 报文格式

 

响应首行;

响应头信息;

空行;

响应体;

HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Sat, 23 Sep 2017 03:42:06 GMT
ETag: W/"cc-15eacd3f837"
Content-Type: text/html; charset=UTF-8
Content-Length: 204
Date: Sat, 23 Sep 2017 06:11:16 GMT
Connection: keep-alive

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>主页</title>
</head>
<body>
	<h1>这是一个设计非常精良的网页</h1>
	<img src="an.jpg" alt="">
</body>
</html>

响应首行
	HTTP/1.1 200 OK
	协议名/协议版本 响应状态码 响应状态码的描述
		- 常见的响应状态码
			200
				- 200表示响应成功, 2开头的全都表示成功
			302
				- 302表示请求重定向,3开头的全都和重定向相关
                         表示服务器要求浏览器重新再发一个请求,
                         服务器会发送一个响应头Location,它指定了新请求的URL地址;
			404
				- 404表示资源未找到,4开头的全都是客户端的错误
			500
				- 500表示服务器内部错误,5开头的全都是服务器的错
	

响应头
	Accept-Ranges: bytes
		- 允许的单位
	Cache-Control: public, max-age=0
		- 缓存的控制:
	Last-Modified: Sat, 23 Sep 2017 03:42:06 GMT
		- 最后的修改时间
	ETag: W/"cc-15eacd3f837"
		- 网页的标识	
	Content-Type: text/html; charset=UTF-8
		- 响应体的类型:
	
	Content-Length: 204
		- 响应体的大小
	
	Date: Sat, 23 Sep 2017 06:11:16 GMT
		- 响应的时间:
	
	Connection: keep-alive
		- 连接:长连接

空行
	- 空行用来分割响应首部 和 响应体

响应体
	- 响应体就是服务器发送给客户端的主要内容,如果是网页,响应体就是网页的代码
		如果是图片,响应体就是图片的二进制编码

	<!DOCTYPE html>
	<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>主页</title>
	</head>
	<body>
		<h1>这是一个设计非常精良的网页</h1>
		<img src="an.jpg" alt="">
	</body>
	</html>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值