目录
HTTP协议的概念
HTTP协议又叫做超文本传输协议,它不仅可以传输文本,还可以传输js、css、html等格式的文件,是作为应用层使用最广的一种协议。
HTTP协议的工作过程
当我们在浏览器中输入一个网址时,浏览器会给服务器发送一个HTTP请求,服务器接收到请求以后,经过计算返回一个HTTP响应。
我们可以通过抓包工具 Fiddler 4来抓一下包,我们在抓取数据前先将Fiddler 4中的数据清空
,然后在浏览器中输入www.sogou.com,看一下抓包的结果。
然后找到对应的数据包,选择蓝色的数据包,然后根据提示点击响应的按钮
打开以后观察右侧的数据,上方表示HTTP请求中的数据,下方表示HTTP响应中的数据,为了观察可以用记事本打开。
HTTP协议的格式
HTTP中协议的格式要分为请求格式和响应格式
请求格式
1.首行(里面包括方法 URL Http/版本号)
2.请求头(里面每一行是一个键值对,键和值之间使用冒号加空格来分隔,不同的键值表示不同的含义)
3.空行
4.请求正文(body)
响应格式
1.首行(Http/版本号 状态码 状态码的描述)
2.请求头(里面每一行是一个键值对,键和值之间使用冒号加空格来分隔,不同的键值表示不同的含义)
3.空行
4.响应正文(body)
HTTP协议中的方法
HTTP协议里面的方法主要有以下几个:
GET、POST、PUT、DELETE等
GET表示获取网上的资源;
POST表示给服务器发送一个资源;
PUT表示传输文件;
DELETE表示删除文件;
上面的这些方法本质上没有区别,理论上可以相互替换 ,在HTTP请求中既可以用GET又可以用POST
GET和POST细节上的区别:
- 语义不同:GET一般用于获取数据,POST一般用于提交数据;
- GET的正文部分(body)一般为空,需要传递的数据通过query string传递,POST的body一般不为空,需要传递的数据通过body传递
- GET请求一般是幂等的,而POST不是
URL
URL的概念
URL:统一资源定位符,俗称网址,每一个互联网上的文件都有唯一的一个URL。
URL的格式
根据一个具体的URL来说明URL的格式:
上面各个部分在URL中也是可以省略的,下面主要介绍重要的结构:
- https:协议方案名,常见的有http和https其中http不安全,https安全(后面的博客会详细讲)
- 端口号:端口号是用来指定访问服务器上那个进程的,如果在写URL中不写端口号的话,浏览器会根据协议类型来自动决定使用哪个端口号,在http协议中默认使用80端口,https协议默认使用443端口。
- 查询字符串(query string):?后面 的字符串,它的本质是一个键值对。键值对之间使用&分隔,键和值之间使用=分隔。
- 片段标识:片段标识主要用于页面内跳转。
URL定位到网上资源的步骤
- 先通过服务器地址,定位到一个具体的服务器
- 在通过端口号定位到一个具体的应用程序
- 在通过路径定位到这个应用程序管理的一个具体资源
- 再通过查询字符串对这个具体资源的要求做出进一步的解释
- 最后通过片段标识来确定定位到这个资源的那个部分
HTTP中的报头(header)
这里将请求和响应的header一起讲:
1.Host:表示服务器主机的地址和端口号
2.Content-Length:表示body中的数据长度
3.Content-Type:请求的body中的数据格式,主要有以下几种——
x-www-form-urlencode(表单提交的数据格式) 、multipart/form-data(form表单提交的数据格式,通常提交图片/文件就会遇到这种格式)、application/json(数据为json的数据格式)、text/html(数据为html个格式)
4.Cookie:Cookie是浏览器提供的一种机制,是为了帮助浏览器能够让网页进行持久化保存数据的一种办法。
我们在登录网站的时候,第一次登录时所花的时间比后面几次登录的时间长,出现这样的原因就是应为浏览器他将我们的登陆信息保存在了Cookie中,下回登陆的时候很快就能登入。
我们可以打开浏览器,输入一个具有登陆功能的网址,点击输入框左侧的锁,点击Cookie。可以看到,里面包含了很多Cookie信息。 我们登陆进去,然后用抓包工具抓login包:
下面是清除Cookie之后的情况:
如果再次登陆的话请求header中又会存在gitee-session-n=.......这样的字符串,因为一旦登陆,浏览器就会自动添加Cookie。
请求的正文格式
x-www-form-urlencoded
当上传图片时正文会出现该类型的数据格式;
multipart/form-data
上传文件时正文会出现该类型的数据格式;
application/json
在登陆某些页面时,正文中会出现该类型的数据,向下面这样
响应的正文格式
text/html
text/css
javascript
json
HTTP响应中的状态和状态码
状态码表示访问一个页面的结果,常见的状态码如下:
200 OK
表示访问成功
404 Not Found
表示访问的URL不存在
403 Forbidden
表示禁止访问
405 Method Not Allowed
表示服务器不支持请求中的方法
500 Internal Server Error
表示服务器崩溃
504 Gateway Timeout
请求超时
302 Move temporarily
临时重定向
301 Moved Permanently
永久重定向
总结:
1XX Informational(信息状态码)
2XX Success(成功状态码)
3XX Redirection(重定向状态码)
4XX Client Error(客户端错误状态码)
5XX Server Error(服务器错误状态码)