网络协议基础09--HTTP

定义

HTTP协议即超文本传输协议,Hyper Text Transfer Protocal,是一种用于分布式、协作式、和超媒体信息系统的应用层协议,是万维网的数据通信基础。HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

版本

HTTP/0.9——只支持GET请求方法获取文本数据,不支持请求头、响应头,无法向服务器传递太多信息 1991

HTTP/1.0——支持POST、GET等请求方式,支持请求头、响应头,支持更多数据类型,但是每发一次请求都要与服务器建立一个TCP连接 1996

HTTP/1.1(最经典,最广泛)——采用持久连接(Keep-alive),多个请求可以共用一个TCP请求 1997

HTTP/2.0 2015

HTTP/3.0 2018

标准

由RFC记录(Request for Comments 请求意见稿)

RFC规定用ABNF语言描述HTTP报文(请求报文和响应报文)格式

报文格式

HTTP-message=start-line

                           *(header-filed CRLF)

                           CRLF

                           [message-body]

        详细说明:

                start-line=request-line/status-line

                如果是请求报文,就是请求行即request-line

                request-line=method SP request-target SP HTTP-version CRLF

                如: GET /hello/ HTTP/1.1

                如果是响应报文,就是响应行即status-line

                status-line=HTTP-version SP status-code SP reason-phrase CRLF

                如:HTTP/1.1 200 OK

                header-field=filed-name ":" OWS filed-value OWS

                message-body=*OCTET

        URL的编码:一旦出现了一些特殊字符(如中文、空格),需要转义编码

请求方法

        GET、POST、HEAD、OPTIONS、CONNECT、TRACE、PUT、DELETE、PATCH

        ①GET:常用于读取操作,参数直接拼接在URL后面(所以无法传递太多数据)

        ②POST:常用于增加、删除、修改操作,参数可以放到请求体和URL后

        ③HEAD:只返回响应头和响应行(用于判断要下载的文件大小,节约带宽资源)

        ④OPTIONS:用来得知服务器支持的请求方法

        ⑤CONNECT:用来建隧道

        ⑥TRACE:用来回显发出的请求信息

        ⑦PUT:通来对已存在的资源进行覆盖(用的较少)

        ⑧DELETE:删除指定资源(用的较少)

        ⑨PATCH:修改部分资源(用的较少)

请求头字段

        User-Agent:浏览器的身份标识符

        Host:服务器的域名、端口号

        Date:请求的日期和时间

        Referer:有哪个页面跳转到当前页面

        Content-Type:请求体的类型——post请求才有

        Content-Length:请求体长度——post请求才有

        Accept:能够接受的响应类型(文档、图片)

        Accept-Charset:能够接受的字符集

        Accept-Encoding:能够接受的编码方式

        Accept-Language:能够接受的语言

        Range:用在多线程断点下载

        Origin:发起一个针对跨域资源共享的请求

        Cookie:与响应头里的Set-Cookie对应

        Connection:浏览器想要优先使用的连接类型(长链接or短连接)

        Cache-Control:指定缓存机制

响应头字段

        Date:发出响应的日期和时间

        Last-Modified:所请求的东西的最后修改日期

        Server:服务器的名字

        Expires:指定一个时间,超过这个时间就代表响应已过期

        Content-Type:响应体的类型

        Content-Encoding:编码类型

        Content-Length:响应体长度

        Content-Disposition:下载并建议文件名头部

        Accept-Ranges:服务器支持哪些种类的部分内容范围

        Content-Range:这部分是属于完整消息的哪一部分

        Access-Control-Allow-Origin:指定哪些网站可以跨域共享资源

        Location:重定向

        Set-Cookie:返回给客户端一个Cookie

        Connection:针对这个连接所预期的选项

        Cache-Control:是否可以缓存这个对象

状态码

        分为5类——100~199信息响应200~299成功响应300~399重定向400~499客户端错误500~599服务器错误

        100 Continue:开发人员可以设定,C可以先只发送URL+请求头,如果合法就允许C继续发送请求体,不合法就直接拒绝

        200 OK:请求成功

        302 Found:请求的资源暂时被重定向到了Location里的值

        304 Not Modified:客户端的缓存里有

        400 Bad Request:语法无效(报文格式错误)或者开发人员设置当参数缺失时返回

        403 Forbidden:拒绝访问(客户端没有权限

        404 Not Found:无法找到请求的资源

        405 Method Not Allowed:服务器禁止使用当前的请求方式

        406 Not Acceptable:服务器无法提供客户端所要求的Accept-charest或Accept-Language

        500 Internal Server Error:服务器崩了

        501 Not Implemented:请求的方法不被服务器支持,服务器没有能力处理

        502 Bad Gateway:网关或代理服务器从上游服务器接收到的响应是无效的

        503 Service Unavailable:服务器已超载或者是停机维护

请求体的编码类型

  •         application/x-www-form-urlencoded(默认值)

                name=123&age=456

  •         multipart/form-data(文件上传时必须使用的编码方式)

代理服务器

        处于中间,本身不产生内容,面向下游的客户端是服务器,面向上游的服务器是客户端。

  •  正向代理:代理的对象是客户端

             作用:隐藏客户端、绕过防火墙(突破访问限制)、Internet访问控制、数据过滤      

  •  反向代理:代理的对象是服务器

             作用:负载均衡、隐藏服务器身份、安全防护

       抓包工具的原理:在客户端启动了正向代理服务。

CDN(内容分发网络)

        定义:CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。CDN由CDN运营商部署。

缓存(Cache)

通常会缓存的情况是:GET请求+静态资源

Pragma(响应头):类似于Cache-Control(已淘汰)

Cache-Control(响应头):设置缓存策略

  • no-storage:不缓存数据到本地(一般如果数据经常变化的话会这样设置)
  • public:允许用户、代理服务器缓存数据到本地
  • private:只允许用户缓存到本地
  • max-age:缓存的有效时间(缓存多久不过期),单位是秒
  • no-cache:发请求问服务器缓存是否有变化,再来决定如何使用缓存

Expires(响应头):缓存的过期时间

优先级:Pragma>Cache-Control>Expires

Last-Modified(响应头):资源最后一次修改时间

ETag(响应头):资源的唯一标识(由资源计算出来的摘要值) 

Last-Modified只能精确到秒,而且如果只是时间变了而内容没变,会导致数据重复传输,ETag改善了这两个缺陷    

优先级:ETag>Last-Modified  

If-None-Match(请求头):与上一次响应头中的ETag对比,不匹配就返回新资源,匹配就返回304

If-Modified-Match(请求头):与上一次响应头里的Last-Modified对比,不匹配就返回新资源,匹配就返回304

跨域资源共享

        是解决Ajax跨域请求的常用方法,浏览器的同源策略规定了,默认情况下Ajax请求只能发给同源的URL(协议、域名、端口相同)。

        img、script、link、iframe、video、等标签不受同源策略的约束。

        受同源策略的影响,默认情况下,Ajax请求只能发送给同源的URL,而现在绝大部分都是前后端分离的,解决方法就是在服务器设置一个响应头(Access-Control-Allow-Origin),告诉浏览器,允许某个域能够跨域访问我的资源。

会话跟踪

请求头里的Cookie字段和响应头里的Set-Cookie字段相对应

Cookie:服务器在响应头返回Set-Cookie交给客户端去存储,客户端存储到本地磁盘(硬盘)

Session:在服务端存储一些数据,存储到服务器的内存中

 如果小李发起登录请求,一旦请求成功,服务器会为小李这时所用的浏览器创建一个session,session的id为666,里面存放了用户的id和密码,并且服务器还会通过响应头返回给浏览器set-cookie字段,里面包括了JESSION=666,path=/xx,doman=localhost:8080,浏览器拿到该字段后,在本地存为cookie:JESSION=666,path=/xx,doman=localhost:8080,等浏览器下次请求某个东西,发现请求的路径对的上path和doman,就会自动在请求头里带上cookie

        

        

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值