http协议是在应用层上的一个协议,用浏览器打开一个网址,大多使基于http协议来传输的。
1.我们需要认识啥是URL
- 在我们中俗称的网址就是一个URL,我们https://www.baidu.com/,这个https就是网站所使用的协议。www.baidu.com就是域名,和ip地址等价,而这里面一般是隐含着一个端口号。
- https://www.baidu.com/s 最后面的s相当于在服务器上获取/s这样的文件,并且显示在浏览器上。是访问服务器上具体的资源(path),URL中对应的path不同的时候,所获取的页面也是不同的。
- URL中的ip地址来去欸的那个一个服务器,URL中的服务器端口来确定这个主机上有那些进程,URL中的path来确定这个进程中所管理的那个资源
- 但是https://www.baidu.com/
scl=3
&tn=baidutop10
&fr=top1000
&wd=%E5%8C%97%E4%BA%AC%E7%8E%B0%E6%
我们其中随便点开一个网址是这样的,其实这个就是查询字符串,每一个网站上的查询字符串是不同的,用&来将这些键值对分割开来,键和值用=分割开来,但我们是无法从这些键值对了解到我们所要搜索的的具体内容,但是我们所要搜索的东西在运行的时候就会转义成这种键值对。这是基于unlencode来进行转义的,把URL中的包含的特殊符号进行了转义,转义成功了%+十六进制数字的形式,但是URL中包含了一些特殊用途的符号(/ & ? #…),这些特殊符号是无法转移的。urldecode是unlencode的逆向操作,具体如何操作我们不去深究。 - URL并不是http专用的,可以搭配很多种协议来使用
大家可以用抓包工具去抓几个包试试看看http协议是啥样子,然后再看这个格式。
2 http请求格式
-
首行,
a)有一个方法GET
b)URL
c)http协议的版本号 -
协议头(header)
有若干的个键值对,键和值之间使用“: ”(冒号+空格)来分割,可以是用户自定义的,但大部分是http中已有的,并且具有特定含义。 -
空行
header的结束标志 -
正文(body)
可能是空(GET),也可能是非空(POST)
3 http响应
-
首行
a)版本号
b)状态码
c)状态的码的描述信息 -
协议头(header)
-
空行
-
正文(boday)
响应的正文中最常见的数据格式为html。
4 http方法
get和post的区别就是
get一般把数据放入到URL中,而post把数据放入正文body中。
5.状态码(一般大概分为五种)
- 1XX 信息状态码,接受的请求正在处理
- 2XX 成功状态码,请求正常处理完毕
- 3XX重定向状态码,需要进行附加操作来完成请求,相当于打电话的“呼叫转移”
- 4XX客户端错误状态码,服务器无法处理请求,这举个非常常见的例子404 Not Found。
- 5XX服务器错误状态码,服务器处理请求出错