协议_http协议

目录

1.http协议的特点

2.常见的http请求方式

get请求与post请求的区别

什么时候使用post请求,什么时候使用put请求

检测跨域-options请求

3.http请求报文

[1] 请求行

[2] 请求头

Accept

Accept-Encoding

Accept-Language

Authorization

Connection

Host

scheme

methods

path

If-None-Match

If-Modified-Since

空行

[3]请求体

4.http响应报文

[1]响应行

[2]响应头

[3]空行

[4]响应体

 5.常见状态码

6.从输入url到页面加载完成发生了什么?


http协议即超文本传输协议,是处于应用层的、半双工通信协议。

1.http协议的特点

[1]http协议是无状态的协议:http协议对于事物处理没有记忆能力。当我们发送http请求到服务端时,服务端会根据我们的请求返回相应的数据信息给我们,但是并不会对本次请求进行记录->若是下一次请求,需要上一次请求的信息,则它必须重传,这可能导致每次传送的数据量变大,造成应答时间过长。

[2]http协议是无连接的协议:在每次发送请求都会建立一个连接,当本次请求结束之后就会将连接断开(每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,即断开连接)。

[3]http协议是一个相对安全的协议:因为http协议是基于TCP协议进行数据传输的,因此可以保证数据的完整性,不会发生丢包、串包现象。

[4]http协议是一个灵活的协议:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

[5]http协议是一个简单快速的协议:http协议非常简单,在客户端向服务器发送请求时,只需要携带请求方法与url;使得HTTP服务器的程序规模小,因而通信速度很快.

[6]支持客户/服务器模式

2.常见的http请求方式

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT

  • GET: 通常用于请求服务器发送某些资源;
  • HEAD:类似与GET,只不过返回的响应体中没有具体内容,只有报文头,用于获取报文头;
    • 比如说我们当我们检查某些数据资源是否还存在时,可以发送head请求->因为我们不需要资源,只需状态码就可以确定资源是否存在;
  • POST: 发送数据给服务器;
  • PUT: 用于新增资源或者使用请求中的有效负载替换目标资源的表现形式
  • DELETE: 用于删除指定的资源
  • PATCH: 用于对资源进行部分修改
  • OPTIONS: 用于获取目的资源所支持的通信选项
    • 可用来验证是否跨域
  • CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
  • TRACE: 回显服务器收到的请求,主要用于测试或诊断

get请求与post请求的区别

在了解get请求与post请求区别的前提,我们需要知道get请求与post请求传递参数的原理:

  • get请求:
    • 浏览器发送:参数是在url路经中进行拼接,是在请求行中
    • 服务器接收:切割url,得到参数;
  • post请求
    • 浏览器发送:
      • 将传递的参数(数据)切割为一个一个的数据包(数据包的数量与带宽和数据大小有关);
      • 在发送的时候,并不是一起发过去的,而是以数据包为单位进行发送的;
      • 此时会发生丢包的现象(低概率)
      • 当所有数据包发送完毕,会发送一个标识,标识所有数据包发送完毕
    • 服务端接收:
      • 在接收时,利用 累加器思想 ;
      • 存在data事件,执行时机:每次接收一个数据包就会执行一次;
      • 存在end事件,执行时机:当所有数据包接收完毕,会执行一次;

由原理我们可以看出get与post请求的区别

  • [1]位置不同
    • get请求的参数是在请求行中;
    • post请求的参数是在请求体中;
  • [2]大小不同
    • get请求的参数,拼接在路经中,有大小限制,--一般在1M左右
    • post请求的参数,在请求体中,不存在大小限制
  • [3]速度(效率)不同
    • get请求的参数,请求速度快;
    • post请求的参数,请求速度慢;
  • [4]安全性不同
    • get请求的参数,不安全(拼接在路径中)
    • post请求的参数,安全(传输过程中为二进制)
  • [5]使用场景不同
    • get请求用于在服务器获取数据;
    • post请求用于向服务器发送数据;

使用场景

  • 安全性问题用post(eg:登录注册)
  • 参数具有文件的使用post
  • 其余一般优先使用get

什么时候使用post请求,什么时候使用put请求

  • 若是接口需要是幂等的,就是用put请求,若是接口不需要幂等的就使用post请求;
    • eg:比如添加一条相同的数据
      • 若是需要覆盖上面的一条,返回相同的结果,那么就使用put;
      • 若是需要插入两条相同的数据,使用post;

检测跨域-options请求

通过跨域资源共享这篇文章,我们可以总结以下几点:

[1]CORS

  • 跨源资源共享 (CORS)是一种基于 HTTP 头的机制,该机制允许服务器标识 除了本身origin以外还有哪些origin可以访问加载自己的资源(告诉浏览器) 。
  • 对可能对服务器数据产生副作用的 HTTP 请求方法(特别是GET以外的 HTTP 请求,或者搭配某些MIME类型的POST请求),浏览器必须首先使用OPTIONS方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证.
    • [1]简单请求不会发起预检测请求;
    • [2]复杂请求在发送请求之前会先发送一个预检测请求,只有确认允许之后才会发送真实请求;

[2]预检测请求options

  • 特点
    • [1]请求不会携带数据,没有请求体;
    • [2]响应没有响应体;
    • [3]请求不会对服务器资源产生影响
  • 过程
    • [1]发送预检测
      • Origin: https://foo.example  // 请求的域名
        Access-Control-Request-Method: POST // 告诉服务器真实请求的请求方法
        Access-Control-Request-Headers: X-PINGOTHER, Content-Type // 告诉服务器真实请求添加的请求头字段
    • [2]得到响应
      • Access-Control-Allow-Origin: https://foo.example // 请求允许的域名(若是为*表示所有域名都允许向该服务器发送资源)
        Access-Control-Allow-Methods: POST, GET, OPTIONS // 允许发送的请求方法
        Access-Control-Allow-Headers: X-PINGOTHER, Content-Type // 允许携带的请求头参数
        Access-Control-Max-Age: 86400 // 该资源的有效时间-(强制缓存)

3.http请求报文

http请求报文由三部分组成--> 请求行、请求头、请求体;

[1] 请求行

如上图所示为请求行,包括

  • 请求方式
  • 请求url
  • 请求协议名与版本号 

[2] 请求头

请求头允许客户端传递关于自身的信息和希望的响应形式;

Accept

Accept就是告诉服务端客户端可以接收哪些类型的文件数据;

  • */* 表示可以接收任意类型的数据

Accept-Encoding

Accept-Encoding就是告诉服务器客户端可以接收哪些类型的编码方式;

Accept-Language

Accept-Language就是告诉服务器客户端可以接收那种语言;

Authorization

授权信息:jwt--token信息(手动添加)

Connection

Connection指的是http的连接类型。

  • connection:keep-alive;表示是长连接;
  • connection:close;表示是短链接

  Cookie:cookie信息(自动添加)

Host

域名以及端口号

scheme

scheme:http/https;协议

methods

methods:get/put/post;请求方式

path

path:请求路径

If-None-Match

If-None-Match:(http1.1版本协商缓存Etag标记)

If-Modified-Since

If-Modified-Since:(http1.0版本协商缓存时间)

空行

它的作用是通过一个空行,告诉服务器请求头部到此为止

[3]请求体

  • get请求没有请求体;
  • post请求将请求数据添加在请求体中;

4.http响应报文

[1]响应行

如上图所示为响应行,包括

  • 响应协议名与版本号 
  • 状态码
  • 状态码文本描述

[2]响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据;

  • Allow:服务器支持哪些方法(get/post等)
  • Content-Encoding;文档的编码方式
  • Content-length;文档内容长度;
  • Cache-Contol:(http1.1设置强制缓存的)控制控制页面的缓存与否
                    no-cache;浏览器和缓存服务器都不应该缓存页面信息
                    max-age>0;强制缓存直接从游览器缓存中 提取 
                    max-age<=0;向server 发送http 请求确认 ,该资源是否有修改 (没有修改返回200,修改过返回304)
  • expires:(http1.0版本设置强制缓存的)
  • Etag:(http1.1版本设置协商缓存的)
  • Last-Modified;文档最后改动的时间(http1.0版本设置协商缓存的);
  • Set-Cookie:设置和页面关联的Cookie。
  • Access-Control-Allow-Origin:cros设置允许跨域标志
  • 响应体:响应的消息体
    • 如果是纯数据就是返回纯数据
    • 如果请求的是HTML页面,那么返回的就是HTML代码
    • 如果是JS就是JS代码

[3]空行

表示以下不再有响应头

[4]响应体

服务端返回的数据

 5.常见状态码

浏览器-http常见的状态码_乖女子@@@的博客-CSDN博客

6.从输入url到页面加载完成发生了什么?

  • [1]通过 DNS域名解析 找到访问服务器对应的ip地址;
  • [2]知道服务器地址后,通过 TCP三次握手 TCP三次握手建立服务器与客户端的连接;
  • [3]建立起服务器与客户端的连接后,浏览器向服务器发送HTTP请求;
  • [4]服务器接收到请求后,根据请求返回数据响应;
  • [5]客户端接收数据并根据数据进行页面渲染;
  • [6]通过TCP四次挥手TCP四次挥手断开连接;
  • [7]浏览器解析数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值