• http 协议


    TCP/IP 五层模型:
    应用层:HTTPFTPSMTPTELNETPOP3
    传输层:TCP传输控制协议UDP用户数据报协议
    网络层:路由器(IP互联网协议)
    数据链路层:网桥、交换机(ARP地址解析协议)
    物理层:网卡、网线、集线器、中继器、调制解调器

    常用缩写:
    HTTP 超文本传输协议 HyperText Transfer Protocol
    HTML 超文本标记语言 HyperText Markup Language
    URL 统一资源定位符 Uniform Resource Locator

    HTTP简介
    HTTP是从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,面向应用层,基于TCP/IP通信协议来传输数据。HTTP协议工作于客户端-服务端架构上。客户端(浏览器)通过URL向服务端(WEB服务器)发送请求

    浏览器中输入URL后,浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页

    往往打开一个网页需要浏览器发送很多次request,过程如下:
    1. 当你在浏览器输入URL http://www.cnblogs.com 的时候,浏览器发送一个Request去获取 http://www.cnblogs.com 的html. 服务器把Response发送回给浏览器.
    2. 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
    3. 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
    4. 等所有的文件都下载成功后。 网页就被显示出来了

    主要特点:
    1、简单,通信速度快;常用方法:get、post、head等
    2、http允许传输任意类型的数据对象,正在传输的类型由content-type加以标记
    3、无连接:每次连接只处理一个请求
    4、无状态:对于事物处理没有记忆能力,各请求间数据没有关联性
    5、支持B/S,C/S

    无连接、无状态

    • 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。

       优点:节省传输时间
       缺点:多个请求需要多次建立连接

    • 无状态:指协议对于事务处理没有记忆能力;同一个客户端的这次请求和上次请求是没有对应关系;服务器中没有保存客户端的状态,对http服务器来说,它并不知道这两个请求来自同一个客户端

       缺点:客户端必须每次带上自己的状态去请求服务器,请求开销大

    短连接和长连接(keep-alive解决多次建立连接问题)
    HTTP不是字面意义上的没有连接,HTTP真正的连接,是通过传输层的TCP协议实现的,所有的操作均在可靠的连接基础之上。
    1、HTTP/0.9:最早发布的1991年0.9版,该时期的HTTP协议十分简单,只支持Get请求,采用短连接的方式,也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
    2、HTTP/1.0:1996年发布,默认使用短连接,提出长连接(也叫持久连接)的概念,但当时仅提供初步的支持。
    3、HTTP/1.1:1999年发布,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

    cookie、session、token(解决无状态问题)

    cookie:
    1. cookie是一门客户端缓存技术
    2. cookie数据由服务器生成,发送给浏览器保存
    3. cookie数据的格式:键值对
    4. cookie数据过期机制:设置expire值
    5. 每一个cookie都会有名称,值,过期时间...。cookie有很多使用场景,在项目中比较常见的有:
      1.登录记住用户名
      2.记录用户浏览记录
      ...
    上面应用中大家最熟悉的应该就是记住用户名这个场景了,以京东网站的登录功能为例,当我们登录了一次京东,后面再去登录页面登录的时候,会发现它会帮你回填之前的用户名,这个场景就是通过cookie技术实现的

    session:
    1. session是一门服务端会话缓存技术。
    2. session由服务器端的web容器创建,保存在服务器端。
    3. session保存数据:键值对形式
    4. session过期:默认30分钟
    5. session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息
    6. session过期:当服务器端的会话过期了,那么当你继续发起请求的时候,因为你从客户端带过去的会话编号还是之前的那个,就会验证不通过,就会提示你会话过期请重新登录。

    token:
    一般app项目都会基于一个token做鉴权。因为此时客户端不是浏览器,因此就没有cookie这一说了。
    当用户登录app时,服务器会响应回来一个token信息(一般都是返回的一串唯一的标识符,比如说uuid或其他)。服务器端会将登录用户跟token(票据)保存一个映射关系,一般保存在redis或者表里面,服务器端响应回来的token会缓存在手机的本地缓存里,后面手机去访问app的其他页面,就会带着这个token去服务器做验证,如果通过这个token能够从redis找到登录用户信息,那么就认为你是已经登录了的用户。
    token失效:一段时间后,服务器端的token失效了,那么就会把此token跟用户的映射关系从redis里删掉,那么后面再来访问的时候,根据你手机请求带来的token就匹配不上登录用户了,服务器就告诉客户端,需要去做重新登录了

    cookie示例

    1. 请求登录接口

     服务器在response头中,设置了cookie

      2. 在浏览器查看cookie

     设置 -》 隐私设置和安全性 -》网站设置 -》cookie和网站数据 -》查看所有cookie和网站数据

     

    浏览器的F12中,application中也可以查看cookie信息

       3. 再次发起请求

     发现不需要重新登录,请求头中携带了cookie信息

    URL详解

    URL:统一资源定位符,用于描述一个网络上的资源,基本格式如下:

    schema://host[:port#]/path/.../[?query-string][#anchor]

    scheme             使用的协议(例如:http, https, ftp)

    host                   服务器的IP地址或者域名

    port                  服务器的默认端口是80可以省略。如果使用了别的端口,必须指明

    path                   访问资源的路径

    query-string       发送给服务器的数据(从“?”开始到“#”为止之间的部分为参数部分,参数可以允许有多个参数,参数与参数之间用“&”作为分隔符)

    anchor              锚,指页面的指定位置。抓包工具中,无法在Http请求中找到井号后面的参数,原因是井号后面的参数是针对浏览器起作用的而不是服务器端。

    例子:

    http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
    
    Schema:                 http
    host:                   www.mywebsite.com
    path:                   /sj/test/test.aspx
    Query String:           name=sviergn&x=true
    Anchor:                 stuff

    HTTP消息的结构

    1. 请求消息

    请求消息包括:请求行(request line)、请求头(header)、空行、请求数据(body)四部分

    注:
    a) 请求方法为get时,请求体body为空
    b) 请求头后面是空行,通知服务器请求头结束

      例子:(fiddler中的raw方式可以看到完整信息)

     

       2. 响应消息

    响应消息包括:状态行、消息报头、空行、响应正文四部

      例子:

     

     状态码 

    Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
    状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.
    HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
    1XX 提示信息 - 表示请求已被成功接收,继续处理
    2XX 成功 - 表示请求已被成功接收,理解,接受
    3XX 重定向 - 要完成请求必须进行更进一步的处理
    4XX 客户端错误 - 请求有语法错误或请求无法实现
    5XX 服务器端错误 - 服务器未能实现合法的请求

    常见状态码:
    200:成功响应。该请求被成功地完成,所请求的资源发送回客户端
    302:重定向,新的URL会在response的Location中返回,浏览器将会自动使用新的URL发出新的Request
    304:Not Modified,代表上次的文档已经被缓存了, 还可以继续使用(如果你不想使用本地缓存可以用Ctrl+F5 强制刷新页面)
    400:Bad Request 客户端请求与语法错误,不能被服务器所理解
    403:Forbidden 服务器收到请求,但是拒绝提供服务
    404:Not Found 请求资源不存在(输错了URL)比如在IE中输入一个错误的URL
    500:Internal Server Error 服务器发生了不可预期的错误
    503:Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    post、get的区别

    Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
    区别:
    1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
    2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
    3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
    4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

  • 相关阅读:
    typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();
    STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据
    GPIO
    JSP和selevt 生命周期详解(JSP的生命周期和select很像,jsp底层就是一个selevt)
    jquery自带的排序方法(js也是)
    GET和POST是HTTP请求的两种基本方法,区别是什么!?
    springboot特性
    restful风格接口类型和优点
    提升必看!!!
    分组函数 partition by 的详解,与order by 区别
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/11906636.html
Copyright © 2020-2023  润新知