HTTP协议是应用层的协议,是超文本传输协议(以资源为单位)(文本型协议对人类便利,计算机不友好)
其是应用层协议,用户态的程序依赖传输层协议支持
版本分为:1.0 1.1(基于tcp) 2.0 3.0(基于udp)
HTTP协议客户端:浏览器 App应用等
HTTP协议服务器端:web服务器/HTTP服务器
客户端请求资源,服务器端响应资源
首先介绍HTTP协议请求:
HTTP要说明请求什么资源:①请求哪个资源②本次请求的操作③描述请求内容(请求元信息)
④可能携带的资源内容
这时我们就需要一个标准,用来唯一确定资源:URL
唯一资源描述符(URI) 唯一资源定位符(URL)
URL 是一种具体的URI,就是我们常见的网址
URL:描述网络中的所以资源,并且可以给予一个唯一的名称
图如下:
①协议方案名:URL不仅仅给HTTP协议设计,还有其他协议,所以要描述本次请求/获取资源使用哪个资源
② 服务器地址:主机信息(IP/域名)
③服务器端口号:进程信息(端口号port)
④带层次的文件路径:资源路径(描述具体资源)
⑤查询字符串:?....传递额外信息 (以?开头,形式key-value)
⑥片段标识符:通过#...给的片段,找出对应的片段(以#开头)
关于URL中可以省略的是:
①协议方案名,服务器地址可以省略:申请d.html时 其中有个a标签,a标签申请时,d.html用的什么协议,在什么主机,a标签也是一样,这是相对的。
②服务器端口号可以省略:端口是协议默认的端口
HTTP协议:8080 HTTPS协议:433 SSH协议:22 JDBC:Mysql协议 :3306
③查询字符串,片段标识符可以省略
带层次的文件路径不能省略:路径的名称可以删除(如:index.其他 这是可以删除的),其他的不能删除
资源路径分为相对路径(没有/开头的)和绝对路径(有/开头的)如:
<a href="/hello.html"></a>(绝对路径) <a href="hello.html"></a>(相对路径)
HTTP请求:请求行+请求头们(请求的信息)+可以存在的请求体
格式如下:
请求行:请求方法(get/post)空格 请求资源(URL)(大部分情况是路径) 空格 THHP/1.1 \r\n
请求头们:请求头\r\n请请求头\r\n....求头\r\n请求头\r\n\r\n
请求头:Name:Value\r\n
可选请求体:HTTP协议不规定请求体格式
HTTP响应:响应行+响应头们+可能存在的响应体
其他跟请求差不多,就响应行不同
响应行:版本信息+状态码+状态码描述(可以省略)
响应信息:成功/失败,响应本身元信息,资源内容
状态码(响应状态):1xx处理过程中 2xx成功 3xx重定向缓存 4xx 客户出错 5xx 服务器出错
特殊的状态码:202 成功 404 资源路径不对 405请求方式不对 500服务器内部出现问题
请求/响应头里面有什么:
Content-xxx:请求响应体的信息
Content-length:描述请求响应体的长度
tcp是面向字节流的,要把每个请求响应头分割出来
分割方式:
①定长方式:按照一定长度分割
②变长方式:携带长度信息,通过特殊字符分割(遇到\r\n先把请求行分割出来,遇到\r\n\r\n把请求头分割出来,有可能有请求体就是在用Content-length定长分割)
Content-Type:请求响应体的格式:thml(text/thml) ,css(text/css) ,js(text/javascript或者application/javascript), 纯文本(text/plain),jpg图(imag/jpeg imag/png iamg/gif)application/json
JSON:javascript对象语法 (javascript对象的规则子集抽取的一部分)
与javascript不同的是:key必须双引号引起来,字符串必须双引号,值没有函数类型