HTTP协议详细讲解(完整版)

HTTP协议

1. HTTP协议的定义

  • HTTP协议(Hypertext Transfer Protocol,超文本传输协议),是一个客户端请求和回应的标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址和端口号之后就可以从服务器上取得所需要的网页信息。
  • 通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。

2. HTTP协议在浏览器中的书写格式

  • 在B/S体系架构中,客户端都统一成了浏览器,要请求服务器端资源需要通过浏览器进行,此时由浏览器将我们给出的请求解析为满足HTTP协议的格式并发出。则我们发出的请求格式需要按照浏览器规定的格式来书写,在浏览器中书写格式如下:

http协议格式.PNG

  • 当浏览器获取到信息以后,按照特定格式解析并发送即可。接收到服务器端给出的响应时,也按照HTTP协议进行解析获取到各个数据,最后按照特定格式展示给用户。

3. HTTP协议的主要特点

1.)支持客户/服务器模式。

2.)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.)HTTP1.1支持持续连接。通过这种连接,就有可能在建立一个TCP连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应。通过把建立和释放TCP连接的开销分摊到多个请求上,则对于每个请求而言,由于TCP而造成的相对开销被大大地降低了。而且,还可以发送流水线请求,也就是说在发送请求1之后的回应到来之前就可以发送请求2,也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。

5.)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

4. HTTP之URL

  • http(超文本传输协议)是一个基于请求与响应模式的、应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
  • HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:
http://host[":"port][abs_path]
  • http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成

5. HTTP请求

  • HTTP请求方式有两种:get和post

  • http请求由三部分组成,分别是:请求行、请求头、请求正文

  • 通过chrome浏览器,F12→Network查看

  • 格式

    • 请求首行(请求行)
    • 请求头信息(请求头)1
    • 请求头信息2
    • 请求空行
    • 请求体
  • 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 刷新,多少秒跳转:content:秒;url=资源路径 -->
<meta http-equiv="refresh" content="3;url=http://www.taobao.com">
</head>
<!-- 
请求报文:GET请求(没有请求体)
	GET /http/index.html?uname=qzp&upwd=123 HTTP/1.1     // 请求行
	Host: localhost:8080                                 // 请求头  User-Agent(标志发送请求的设备信息)  Referer(请求从哪里来)
	Connection: keep-alive
	Pragma: no-cache
	Cache-Control: no-cache
	Upgrade-Insecure-Requests: 1
	User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
	Sec-Fetch-User: ?1
	Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
	Sec-Fetch-Site: same-origin
	Sec-Fetch-Mode: navigate
	Referer: http://localhost:8080/http/index.html
	Accept-Encoding: gzip, deflate, br
	Accept-Language: zh-CN,zh;q=0.9
	
	
	
	
	post请求
	POST http://localhost:8080/http/index.html HTTP/1.1
	Host: localhost:8080
	location: http://www.baidu.com                   // 请求到指定页面
	Connection: keep-alive
	Content-Length: 18
	Pragma: no-cache
	Cache-Control: no-cache
	Origin: http://localhost:8080
	Upgrade-Insecure-Requests: 1
	Content-Type: application/x-www-form-urlencoded
	User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
	Sec-Fetch-User: ?1
	Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
	Sec-Fetch-Site: same-origin
	Sec-Fetch-Mode: navigate
	Referer: http://localhost:8080/http/index.html
	Accept-Encoding: gzip, deflate, br
	Accept-Language: zh-CN,zh;q=0.9
										//请求空行
	uname=lch&upwd=777					//请求体
	
响应报文:
	HTTP/1.1 200 OK                     //响应行
	Server: Apache-Coyote/1.1			//响应头
	Accept-Ranges: bytes
	ETag: W/"1095-1576114602154"
	Last-Modified: Thu, 12 Dec 2019 01:36:42 GMT
	Content-Type: text/html
	Content-Length: 1095
	Date: Thu, 12 Dec 2019 01:44:34 GMT
	
										//响应空行
	<!DOCTYPE html>						//响应体
	<html>
	<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	</head>

		GET /http/index.html?uname=qzp&upwd=123 HTTP/1.1     // 请求行
		Host: localhost:8080                                 // 请求头  User-Agent(标志发送请求的设备信息)  Referer(请求从哪里来)
		Connection: keep-alive
		Pragma: no-cache
		Cache-Control: no-cache
		Upgrade-Insecure-Requests: 1
		User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
		Sec-Fetch-User: ?1
		Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
		Sec-Fetch-Site: same-origin
		Sec-Fetch-Mode: navigate
		Referer: http://localhost:8080/http/index.html
		Accept-Encoding: gzip, deflate, br
		Accept-Language: zh-CN,zh;q=0.9

	<body>
		<form action="#" method="get">
			用户名<input type="text" name="uname"  />
			密码:<input type="text" name="upwd"/>
			<input type="submit" value="登录" />
		</form>
	</body>
	</html>
	
 -->
<body>
	<form action="#" method="post">
		用户名<input type="text" name="uname"  />
		密码:<input type="text" name="upwd"/>
		<input type="submit" value="登录" />
	</form>
</body>
</html>

6. HTTP响应

  • 在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
  • 格式
    • 状态行
    • 响应头1
    • 响应头2
    • 响应空行
    • 响应体

7.消息头

  • HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。
  • 请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成
  • 每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。
i.请求头
  • 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
  • Referer:该请求头指明请求从哪里来
  • 如果是地址栏中输入地址访问的都没有该请求头地址栏输入地址,通过请求可以看到,此时多了一个Referer的请求头,并且后面的值为该请求从哪里发出。百度竞价,只能从百度来的才有效果,否则不算;通常用来做统计工作、防盗链
ii.响应头
  • 响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
  • Location:Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域,常用在更换域名的时候。response.sendRedirect(“http://www.pxcoder.com”);
  • Refresh:自动跳转(单位是秒),可以在页面通过meta标签实现,也可在后台实现。
<metahttp-equiv="refresh"content="3;url=http://www.pxcoder.com">
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QZP51ZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值