http协议详解

本文详细介绍了HTTP协议的基本概念,包括其作为客户端和服务器间通信格式的本质,常见的HTTP请求方法(GET、POST等)以及HTTP状态码的分类和常见用途。还探讨了HTTP请求报文和响应报文的结构,URL、URI的差异以及URL编码的重要性。同时,讲解了Cookie的工作原理及其在HTTP请求中的应用。
摘要由CSDN通过智能技术生成
1. HTTP协议简介
HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法(请求返回)。
HTTP协议是互联网上常用的通信协议之一。它有很多的应用,但最流行的就是用于Web浏览器和Web服务器之间的通信,即WWW应用或称Web应用。
WWW,全称World Wide Web,常称为Web,中文译为“万维网”。它是目前互联网上最受用户欢迎的信息服务形式。HTTP协议的WWW服务应用的默认端口为80(端口的概念),另外的一个加密的WWW服务应用https的默认端口为443,主要用于网银,支付等和钱相关的业务。
1.1HTTP的本质:
  • 就是客户端和服务端约定好的一种通信格式
2.常见的HTTP请求方法
HTTP方法作用描述
GET客户端请求指定资源信息,服务器返回指定资源
POST只请求响应报文中的HTTP首部
HEAD将客户端的数据提交到服务器,例:注册表单
PUT从客户端向服务器传送的数据取代指定的文档内容
DELETE请求服务器删除Request-URI所标识的资源
MOVE请求服务器将制定的页面移至另一个网络地址
3.HTTP1.1状态码
状态码范围作用描述
100-199用于指定客户端相应的某些动作
200-299用于表示请求成功
300-399用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息
400-499用于指出客户端的错误
500-599用于指出服务器端的错误
3.1常见的状态码
状态代码描述说明
200-OK服务器成功返回网页,这是成功的http请求
301-Moved Permanently永久跳转,所有请求的网页将永久跳转到被设定的新的位置(如:从baidu.com跳转到www.baidu.com)
305请求不合理 需要重定向
403-Forbidden禁止访问,这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求。
404-Not Found服务器找不到客户端请求的指定页面,及访问的资源不存在
500-Internal Server Error内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。(例如SElinux开启,而又没有为http设置规则许可,客户端访问就是500)
502-Bad Gateway坏的网关,一般是代理服务器请求后端服务时,一般为反向代理服务器下面的节点出问题导致
503-Service Unavailable服务当前不可用,可能因为服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点
504-Gateway Timeout网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求
4.请求报文结构(request报文)
报文格式报文信息
请求行①. 请求的方法(get方法没有请求主体内容 post方法会有请求主体信息)
②. 请求的数据信息(默认请求index.html首页文件)url
③. 请求http协议版本 tcp协议分为长连接(http1.1)和短连接(http1.0)
请求头部客户端有关信息说明
空行空白内容
请求报文主体get方法没有请求主体内容 post方法会有请求主体信息
GET /link?url=OoOTXao6rSi4_yPAkNeEQrvYv9zPXN9ATJnTJ3ShvJzGL3Yrq4rZYTZAEkXEfEf3ZM7tajW0BtMPpipS3_QjYq&wd=&eqid=ff4abf970005a5c3000000065fab9991 HTTP/1.1		-- http请求行(GET请求方法;url;http的版本信息)
Host: www.baidu.com							  -- 服务器的主机的地址(ip地址或域名)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.2; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)									 -- 客户端[浏览器]的信息(及信息有浏览器的内核信息;客户端的系统;浏览器版本)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8		-- 浏览器可以解析的文件
Accept-Language: zh-cn,zh;q=0.5				  -- 浏览器支持的语言
Accept-Encoding: gzip,deflate				  -- 浏览器支持的网页压缩方式(压缩的好处-->提高访问效率,节省资源)
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7	  -- 浏览器支持的字符编码方式
Keep-Alive: 115								  -- 保持长时间的连接
Proxy-Connection: keep-alive				  -- 浏览器支持可以和服务器保持长时间的连接
Cookie: BIDUPSID=B8A30D681C14672F74571FF78C2214A5;			--Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。
Referer:									  -- 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。方便统计
HTTP请求,Cookie的使用过程
1、server通过HTTP Response中的"Set-Cookie: header"把cookie发送给client
2、client把cookie通过HTTP Request 中的“Cookie: header”发送给server
3、每次HTTP请求,Cookie都会被发送。
http请求发送cookies的条件:
1、本地已经缓存有cookies
2、根据请求的URL来匹配cookies的domain、path属性,如果都符合才会发送。
举个例子:访问www.baidu.com时,就不发送www.qq.com的cookies.
找到游览器cookie存储位置
1.首先打开浏览器右上角菜单图标
2.然后点击更多工具和开发者工具
3.之后点击Application
4.之后点击Cookies
5.之后选择网址
6.最后就可以看到该网址下所有cookie的缓存路径了

在这里插入图片描述

5.响应报文结构(response)
报文格式报文信息
起始行①. HTTP协议版本信息
②. 响应的状态码信息(请求成功状态码 200)
③. 响应状态码说明信息
响应头部服务端有关信息说明
空行空白内容
响应报文主体一般为html css js 等等代码信息
HTTP/1.1 200 OK					-- http起始行(http的版本信息;状态码;响应状态码说明信息)
Bdpagetype: 3					-- 页面类型
Connection: keep-alive			-- 服务器支持时间长连接
Content-Type: text/html			-- 服务器返回的页面类型
Date: Wed, 11 Nov 2020 07:58:59 GMT		-- request包到服务器的时间
Server: BWS/1.1					--	服务类型和版本。
Set-Cookie: BDSVRTM=0; path=/		-- 告诉浏览器为当前页面设置cookie
Traceid: 1605081539038918196211760295201589528764	-- 跟踪请求全流程日志
Vary: Accept-Encoding:客户端支持的编码格式-- 告知下游的代理服务器,应当如何对以后的请求协议头进行匹配
X-Ua-Compatible: IE=Edge,chrome=1		-- 解决ie不兼容的问题
Content-Length: 655				-- 响应体的长度
								-- 空行
<!DOCTYPE html><html><head><meta charset="UTF-8"....	-- 响应体		
查看请求报文与响应报文详细结构信息方法:(2种方法)
1. curl -v www.baidu.com   --- 利用curl命令进行网站访问
 	-v    --- 详细显示请求报文结构和响应报文结构信息
2. wget --debug www.baidu.com
6.http资源—URL

URL,全称Uniform Resource Location,中文翻译为统一资源定位符,也被称为网页地址(网址)。如同在网络上的门牌,它是因特网上标准的资源唯一地址。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户端和服务器程序上。

6.1URI
URI,全称Uniform Resource Identifier,中文翻译为统一资源标识符,是一个用于标识某一互联网资源名称的字符串。就是--互联网上每个可用的数据资源,如HTML,图片,视频等皆通过统一资源标识符进行定位。
6.2URL和uri的区别
例:channel.jd.com/women.html

    channel.jd.com / women.html    
		 url部分         uri部分
URL编码:为什么要对URL进行编码?
1:能够隐藏GET方式的URL的变量。
2:因为我们在GET里面的参数中有些中文或者其它操作字符。为了让它支持我们这个协议。排除它的一些特殊字符比如这个&取地址符。我们参数值里面也有取地址符、本身URL里面也有&这个取地址符这种情况下回出现问题。因为程序没有办法去识别这里面谁是取地址符,谁是参数&。这种情况下就需要
6.3URL编码
“name1=va&lu=e1”。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了奇异。
如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码 :

 URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。
 通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。
 又如,Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。
url编码的安全性:Url编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值