HTTP(HyperText Transfer Protocol)协议即超文本传输协议,有以下几点作用:
一 ,用于客户端与服务端之间的通信:
请求访问资源的一端称为客户端,提供资源相应的一端称为服务端。就仅一条通信线路而言,服务端与客户端是确认的,而HTTP协议可以明确区分哪一端是客户端哪一端是服务端。
二,通过请求和响应的交换达成通信:
请求必由客户端发出,然后服务端做出响应,所以在通信过程中客户端永远是主动方。
请求报文首部
GET / HTTP/1.1
#方法及HTTP协议版本
Host: 127.0.0.1
#被访问的URL完整的主机名称
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101Firefox/56.0
#提供浏览器或者与其它生成请求有关的客户软件的有关信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
#告知服务器代理能够处理的媒体类型及相对优先级,q为优先级权重
Referer:xxxxxxxxxxxxxxxxxxxxxxxxx
#用于表示发出请求的原始URL
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
#告知服务器代理能够处理的语言集与优先级,q为优先级权重
Accept-Encoding: gzip, deflate
#告知服务器代理能够处理的内容编码及优先级,可一次性指定多种编码
Cookie: csrftoken=tv6WTfrvvdFtYNX0wzQCDmm5caxwl8KWDpM8YQewqKTqhXneQNTqhWE4ebtvpEgg; sessionid=ac4wqssoyvhr02f3ewiumcoog881eusp; LanguageMenu_lpmru=zh-CHS
#Cookie消息头用于提交服务器向客户发布的参数
Connection: keep-alive
Upgrade-Insecure-Requests: 1
响应报文首部(为了方便 将所有可能出现的要点放在一个报文,现实中可能并非如此)
HTTP/1.1 200 OK
Date: Tue, 12 Jul 2016 21:36:12 GMT
Server:xxxxxxxxxx
#指明所使用的web服务器软件及版本 有时候还会出现安装模块 操作系统的信息
Set-Cookie:tracking = xxxxxxxxxx
#告知浏览器为当前页面设计cookie
Pragma:no-ache
#告知浏览器不要将响应保存在缓存中
Content-Length: 563
Content-Type: text/html
<html>
<body>
Hello http!
</body>
</html>
响应报文的状态码:
2XX 成功
200:OK
表示从客户端发来的服务在服务端被正常处理了。
204:No Content
表示请求处理成功,但是没有资源可以返回,即响应报文中不包含实体的主体部分,也不允许返回任何实体的主体。换一句话说,当返回204状态码时候,浏览器显示的页面不发生更新
206:Partial Content
表示对客户端进行了范围请求,即对某一部分资源的请求,且服务器正常执行这部分的GET请求,响应报文中包含Content-Range指定范围的实体内容。
3XX 重定向
301: Moved Permanently
永久性重定向,表示请求的资源已经永久分配到了新的URL
302:Found
临时性重定向,表示请求的资源已经临时分配到了新的URL,希望用户本次能使用新的URL访问 但是将来可能还会有改变
303:See Other
表示请求的资源对应着另一个URI,应该使用GET方式定向获取该资源,与302不同的是,303明确指定需使用GET方式获取资源
以上三个状态码返回时,几乎所有的浏览器都会将POST改为GET并删除请求报文内的主体,之后再次发送请求。尽管301 302明确禁止将POST改成GET,但实际上大家都是这么做的
304:Not Modified
表示请求的资源已找到,但是请求不符合条件,不回应任何响应的主体部分。虽然也在3XX中,但是304与重定向没有任何的关系
307:Temporary Redirect
临时重定向,和302区别不大,因为上面已经说过302标准大家并不遵守
4XX 客户端错误
400:Bad Request
表示请求报文中存在语法错误 需修改请求后再次发送。浏览器会像处理200OK一样对待400
401:Unauthorized
表示发送的请求需要通过HTTP的验证,如果之前已经进行过一次请求,则表示用户认证失败。
403:Forbidden
表示请求资源的访问被服务器拒绝了,而且服务端没必要给出理由
404:Not Found
表示服务器上无法找到请求的资源,也可以用于服务器拒绝请求并不想说明理由时使用
5XX 服务器错误
500 Internal Server Error
表示服务器在执行请求的时候发生错误,也可能是web应用的bug或者临时故障。
503 Service Unavailable
表示服务器超负载或者停机维修,无法处理请求
三,HTTP是不保存状态的协议:
HTTP协议作为一种无状态协议自身并不保存通信状态。所以无论是请求还是回应都不会被HTTP协议保存下来。但是为了满足一些特定需求,比如跳转后保留用户登录状态,引入了cookie。
四,请求URI定位资源:
因URI的特定功能,在互联网上的任意位置上的资源都可以访问到。
五,告知服务器意图的HTTP方法:
HTTP/1.1
1:GET:请求访问已被URI识别的资源
2:POST:传输实体主体
3:PUT:传输文件 但是如果不加限制可能造成任意文件上传 所以多不应用这一方法
4: HEAD:和GET方法一样,但是不返回报文主体
5:DELETE:删除指定资源, 和PUT方法一样不安全
6:OPTIONS:查询针对请求URI指定资源时支持的方法(比如返回的是POST GET HEAD OPTIONS,那么这个URI指定的资源就支持这4种方法)
7: TRACE:让服务端将客户端之前发出去的请求通信回环给客户端。客户端可以通过这种方法查看自己发送的请求是怎样被加工的。但是正因如此也容易引发跨站追踪攻击,因此不会被用到。
8:CONNECT:要求用隧道协议连接代理
参考书籍《图解HTTP》、《黑客攻防技术宝典(web实战篇)》