HTTP协议:hypertext transfer protocol译为超文本传输协议,简称HTTP协议。
所有的WWW文件都必须遵守这个标准。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
HTTP工作原理:客户端-服务端架构,客户端通过URL像http服务端发送请求,服务端接收到请求后,向客户端发送响应消息。HTTP默认端口号是80.
HTTP三个特点:
HTTP是无连接的,限制每次连接只处理一个请求,服务器处理完客户端请求,并受到客户端的应答后,断开连接,节省传输时间;
HTTP是媒体独立的,客户端和服务器能处理的数据都可以通过HTTP发送;
HTTP是无状态的,对于处理过的事务没有记忆能力,比如无法记忆用户是否登录,Cookie就是用来解决这个问题的
================================================================================================
HTTP的消息结构:
客户端HTTP请求: 请求行,请求头,空行,请求数据
1、首行----->请求行
1>方法 GET/POST/PUT/DELETE/…
2>URL —>网址/链接
3>版本号 HTTP/1.1 HTTP/2.0 HTTP/3.0
以上三个部分使用空格隔开
2、协议头 header
若干个键值对,每个键值对占一行 每个键之间使用:分割
3、空行
表示header到这里结束
4、协议正文
服务端HTTP响应:状态行,消息报头,空行,响应正文
1、首行
1>版本号
2>状态码 200表示访问成功 下面会列举出常用的状态码
3>状态码描述信息
2、协议头 header 仍然是一组键值对
3、空行 header部分结束标记
4、协议正文 body
响应中的正文格式,比如可以是一html,也可以是css,也可以是js
================================================================================================
状态码
1**:消息服务器已经收到,需要请求者继续操作(101:客户端需要切换协议)
2**:成功
3**:重定向,需要进一步操作完成请求(302:网页被永久转移到其他URL)
4**:客户端错误(404,找不到页面)
5**:服务器错误(505,内部服务器错误)
常见状态码
1>200 ok 表示访问成功
2>302/304 Found 表示重定向------->转移
3>404 NotFound 没找到指定资源
4>403 Forbidden 没有权限
5>502 Bad Gateway 服务器挂了
6>504 Gateway Timeout 服务器响应超时
================================================================================================
常见的header有哪些?
1>Content-Type body的数据格式类型
2>Content-Length 描述了body的数据长度 单位字节
3>Host 描述了主机名 域名 ip地址
4>Referer:相当于链表的前驱节点
================================================================================================
HTTP请求方法:
1.0:GET,POST,HEAD
1.2新增:OPTIONS,PUT,DELETE,TRACE,CONNECT
GET:请求指定的页面信息,并返回实体主体
POST:向定向的资源提交数据进行处理请求(表单,文件),数据被包含在请求体内,可能会导致新的资源的建立和已有资源的修改
HEAD:类似GET的请求,只不过返回响应中,没有具体内容,用于获取报头
OPTIONS:允许客户端查看服务器的性能
PUT:从客户端向服务器传送的数据取代指定的文档的内容
DELETE:请求服务端删除指定的页面
TEACE:回显服务器收到的请求,用于测试或诊断
CONNECT:预留给能够连接改为管道方式的代理服务器
================================================================================================
GET和POST的区别:
Get请求往往把自定制数据放在query_String中
Post请求往往把自定制数据放在body中
get:
请求指定的页面信息,也就是直接写url去访问,会暴露url:
会被缓存,不安全;
把请求头信息和数据信息一次性发送;
对长度有限制
post:
向指定资源提交数据进行处理请求,数据包在请求体内;
参数不会被保留;
先发送header,服务器响应100,在发送data,发两次包