HTTP是一种超文本传输协议,HTTP是一个在计算机世界里专门在两点之间传输文字,图片,音频,视频等超文本数据的约定和规范
简单快速,灵活,无连接,无状态
(1) HTTP是无连接的
无连接的含义是限制每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,即断开连接.采用这种方式可以节省传输时间
PS:HTTP/1.1里改成总是默认启用keep-live长连接机制,所以现在的HTTP已经不再是无连接的了
(2) HTTP是媒体独立的
这意味着,只要客户端和服务端知道如何处理数据的内容,任何类型的数据都可以通过HTTP传输,客户端以及服务端指定适合的MIME-type内容类型即可
(3) HTTP是无状态的
HTTP协议是无状态协议,无状态是指协议对于事物处理没有记忆能力,缺少状态,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输的数据量增大,另外,在服务器不需要先前信息时,它的应答就较快.
通过Cookie,Session解决无状态
一个HTTP请求报文由请求行(request line),请求头(header),空行和请求数据4部分组成
包括请求方法字段,URL字段和HTTP协议版本.比如GET /index.html HTTP/1.1。
头部字段是key-value的形式,以键值对的形式组成,每行一对,请求头部通知服务器有关客户端请求的信息,典型的请求头有:
字段含义Accept浏览器可以接受的MIME类型application/json text/plainAccept-Charset浏览器可以接受的字符集 unicode-1-1Accept-Encoding浏览器能够进行解码的数据编码方式,比如gzip, deflate, br. 服务端能够向支持gzip的浏览器返回经gzip编码的HTML页面,许多情形下,可以减少5到10倍的下载时间(性能优化的一个手段)Accept-Language浏览器所希望的语言种类,当服务器能提供一种以上的语言版本时要用到 zh-CN,zh;q=0.9,en;q=0.8Authorization授权信息,通常我们一般会把token信息存入这个字段Content- Length表示请求消息正文的长度.比如我们上传文件的时候,后端经常会通过这个字段判断文件大小,特别是分片上传的时候Content-Type请求的数据格式,用于POST和PUT请求中,比如:Content-Type: application/x-www-form-urlencodedHost客户机通过这个头告诉服务器,想问的主机名.也就是请求的主机名,Host头域指定请求资源的主机和端口号,允许多个域名同处一个IP地址,即虚拟主机If-Modified-Since资源缓存的时间,只有当请求的内容在指定的时间后,又经过修改才返回它,否则返回304状态码(性能优化中协商缓存的一个重要字段)Referer客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链),包含一个URL,表示从哪一个URL出发访问到当前请求的页面的.(通常会做图片处理,比如:当前图片来自哪里,未经允许,不得转载)User-Agent发出请求的浏览器类型,通常我们判断该用户使用的浏览器类型时,非常有用Connection处理完这次请求之后是否断开连接还是继续保持连接.HTTP 1.1默认使用持久连接,也就是keep-alive,利用长连接的优点,当页面包含多个元素时(图片),显著的减少下载所需要的时间. 注意:HTTP 1.1之前是无连接的Cookie携带到服务器的Cookie字段If-None-Match服务器上次返回的资源的唯一标识,一个hash值,比较标记,本地资源未修改,返回304(性能优化中协商缓存的一个重要字段)Range表示只请求实体的一个或者多个子范围.通常我们做断电续传的时候,会用到.断点续传也就是从文件已经下载的地方开始继续下载它的作用是通过一个空行,告诉服务器请求头部到此为止
若方法是GET,则此项为空,没有数据
若方法是POST,则通常来说此处放置的就是要提交的数据
比如要使用POST方法提交一个表单,其中有user字段中数据为admin, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
响应报文由状态行,响应头,空行,响应正文组成
包含HTTP协议的版本,状态码,以及描述(作为数字状态码的补充,是更详细的解释文字,帮助人理解原因)
最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
用于请求访问已经被URI识别的资源,可以通过URL传参给服务器
用于传输信息给服务器,主要功能与get方法类似,但一般推荐使用POST方式
传输文件,报文主体中包含文件内容,保存到对于URI位置。
获得报文首部,与get方法类似,只是不返回报文主体,一般用于验证URI是否有效
删除文件,与PUT方法类似,删除对应URI位置的文件
查询相应URI支持的HTTP方法
(1) GET请求在URL中传输是有长度限制的,大小2kb,而POST没有
(2) GET比POST更不安全,因为参数直接暴露在URL上,不能传递敏感信息
(3) GET 参数通过URL传递,POST放在Request body中
(4) GET请求参数会被完成保留在浏览器历史记录里,POST中的参数不会被保留
(5) GET请求只能进行URL编码,而POST支持多种编码格式
(6) GET请求会被浏览器主动缓存,而POST不会
(7) GET在浏览器回退时,没有影响,但是POST会再次提交请求
HTTP状态码的英文为HTTP Status Code。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
指示信息:表示请求已经接收,继续处理
成功:表示请求已经被成功接收,理解,接收
重定向:表示要完成请求,必须进一步操作
客户端错误:请求有语法错误或请求无法实现
服务端错误:服务器未能实现合法的请求
