Http协议的请求和响应
Http: 超文本传输协议(HyperText Transfer Protocol)
Http协议的组成: 由Http请求和http响应组成
Http组成的三部分: 请求行, 请求头, 请求体
请求行
请求方式: POST, GET
请求的资源: /DemoEE/form.html
协议版本: HTTP/1.1(一般都是)
HTTP/1.0, 发送请求, 创建一个连接, 获得一个web资源, 连接结束
HTTP/1.1, 发送请求, 创建一次连接, 获得多个web资源, 保持连接
请求头
请求头是客户端发送给服务器的信息, 使用键值对表示key, value
if-Modified-Since: 浏览器通知服务器, 本地缓存的最后变更时间, 与另一个响应头Last-Modified共同控制浏览器页面的缓存
cookie: 与会话有关技术, 用于存放浏览器缓存的cookie信息
User-Agent: 浏览器通知服务器, 客户端, 浏览器, 操作系统的相关信息
Accept: 浏览器可支持的MIME(媒体类型Multipurpose Internet Mail Extensions)类型, 文件描述的一种方式 text/html html文件, text/css css文件 text/javascript js文件
请求体
请求方式是post时, 请求体有请求的参数 username=zs&password=123
请求方式是get, 请求参数不会出现在请求体后, 会拼接在URL后面
get和post的区别:
Get方法的特点: 请求的数据会附在URL中, 以?分割URL和传输数据, 多个参数用&连接
除此之外, Get仅用于信息获取, 有安全性和幂等性
安全性: 指的是非修改信息, get请求不会产生副作用, 仅用于获取信息资源, 不会影响资源状态
幂等性: 指无论调用这个URL多少次, 数据都不会变
get的url具有长度限制
get只产生一个TCP数据包
post方法特点: 根据Http规范, post可能修改服务器上的资源请求, 例如我们在点赞时, 就是在提交post请求
post请求信息放在请求数据中, 所以请求信息没有长度限制
post方法会产生两个TCP数据包, 浏览器会把请求头发给服务器, 待服务器响应100 continue后, 浏览器在发送请求数据, 服务器响应200 ok, 看起来get请求的传输比post块, 实际上在网络良好的情况下可以忽略不计
GET 和 POST 的区别: 本质没有区别, get和post都是HTTP请求协议的请求方法, 而http又是TCP/IP协议的通信协议之一, 所以都是TCP连接
**区分: ** 在http协议中, 会对这些不同的请求设置不同的类别管理, 例如单独获取资源的请求为GET, 修改服务器资源的请求为POST. 服务器对它们的请求报文格式作出要求
HTTP1.0, 1.1, 2.0的版本区别
- HTTP/1.0
HTTP/1.0规定浏览器与服务器只保持短暂的连接, 连接无法复用, 每个TCP连接只能发送一个请求, 浏览器的每次请求都需要与服务器建立一个TCP连接, 服务器完成请求处理后立刻断开TCP连接, 服务器不跟踪每个客户也不记录过去的请求.
- HTTP1.1
引入了持久连接, TCP连接默认不关闭, 可以被多个请求复用
引入了管道机制, 通一个TCP连接里面, 客户端可以发送多个请求
服务端是顺序执行的, 效率还有提升空间
HTTP2.0
2.0重点解决通信效率问题, HTTP2.0采用了多路复用技术, 在一个连接里面, 浏览器和服务端都可以同时发送多个请求和回应, 不用按照顺序一一对应, 这样做是使用了二进制分帧, 即HTTP2.0会将所有传输的信息分割为更小的消息和帧, 对它们采用二进制格式编码
多路复用的优化: Header压缩, 服务端推送
Header压缩: Http请求和响应是由请求行, 请求头 请求体组成, 一般对于请求体是会进行gzip压缩的, 但是请求行,请求头是没有进行压缩的, 以纯文本进行传输, 所以http2.0提出对请求头, 请求行压缩
常用状态码:
100 继续发送请求
200 请求完成 ok
301 资源重定向 Move Permanently 会导致浏览器将书签重新保存
302 临时重定向 Found 浏览器书签保存的url不变
304 客户端发送附带条件的请求, 但为满足服务器的条件,
400 客户端错误
401 无权限访问
403 forbidden
404 资源不存在
500 Internal Server Error 服务器错误
502 网关错误