• 【应用层】HTTP


    HTTP协议定义了浏览器怎么向万维网服务器请求万维网文档,以及服务器怎么样把文档传送给浏览器。

    举个例子来说,用户单击鼠标后发生的事件按顺序如下(以访问清华大学为例):

    1. 浏览器分析链接指向页面的URL。
    2. 浏览器向DNS请求解析www.tsinghua.edu.c的IP地址。
    3. DNS解析出该IP地址。
    4. 浏览器与该服务器建立TCP链接(默认port:80)。
    5. 浏览器发出HTTP请求:GET/chn/index.htm(HTTP请求通过TCP套接字,发送请求报文,该请求报文作为TCP三次握手第三个报文数据发送给服务器)。
    6. 服务器通过HTTP响应把文件index.html发送给服务器。
    7. TCP连接释放(释放连接若connection若为close,服务端主动关闭,客户端被动关闭,若为keepalive,则该连接会保持一段事件,该时间内可以继续接收请求)。
    8. 浏览器将文件进行解析,并将Web页面显示给用户(先解析状态行,看状态码是否请求成功,然后解析每一个响应头,告知编码规范,对其进行格式化,有脚本还要加载脚本)。

    HTTP 状态码含义:

    • 200 OK 服务器已经成功处理了请求并提供了请求的网页。
    • 202 Accpted 已经接受请求,但处理尚未完成。
    • 204 No Content 没有新文档,浏览器应该继续显示原来的文档。
    • 206 Partial Content 客户端进行了范围请求。响应报文中由Content-Range指定实体内容的范围。实现断点续传
    • 301 Moved Permanently 永久性重定向。请求的网页已永久移动到新位置。
    • 302(307) Moved Temporatily 临时性重定向。
    • 304 Not Moidfied 未修改。自上次请求后,请求的内容未修改过。
    • 401 Unauthorized 客户试图未经授权访问受密码保护的页面。该应答中会包含一个WWW-Authenticate头,浏览器由此显示login框,填写合适Authorization头以后再次发出请求。
    • 403 Forbidden 服务器拒绝请求。
    • 404 Not Found 服务器不存在客户机所请求的资源。
    • 500 Intern Server Error 服务器遇到一个错误,使其无法为请求提供服务。

    HTTP的请求方法

    • GET 向指定的资源发出显示请求,使用GET方法应该只用于在读取数据。
    • HEAD 与GET方法一样,都是向服务器发出指定资源的请求。只不过HEAD不包含有呈现数据,而仅仅是头部信息(关于该资源的信息)。
    • PUT 向指定资源位置上传最新位置(与POST相比,PUT指定了存放位置,而PSOT由服务器指定)。
    • DELETE  请求服务器删除某一个资源
    • POST 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
    • TRACE 请求服务器回送收到的请求信息,主要用于测试和诊断。
    • OPTIONS 使服务器传回该资源所支持的所有HTTP请求方法。若请求成功,则会在HTTP头中包含一个名为“Allow”的头,值是支持的方法,如“GET,POST”。

    GET和POST的区别:

    • 对资源的影响:GET一般用于获取或者查询资源信息,意味着对同一个URL的多个请求返回的结果一样(幂等),没有修改资源的状态(安全);而POST一般用于更新资源信息,POST既不是安全的也不是幂等的
    • 传递的信息量:采用GET方法时,客户端把发送的数据添加到URL后面(即HTTP协议头中),使用“?”连接,各个变量用“&”连接,但是由于有些浏览器和服务器对URL的长度和字符格式存在限制,所以传递的信息有限;POST则把需要传递的数据放到请求报文的消息体中,HTTP协议对此没有限制,因此可以传递更多信息。
    • 安全性:GET提交的数据,消息以明文出现在URL上,如密码等信息可能被浏览器缓存,从而从历史记录中得到;POST把消息存放在消息体中,安全性高,但是也存在被抓包软件抓取看到内容。

    cookie 和 session :

      HTTP协议是无状态:无状态是指协议对于事务处理没有记忆能力,简单来说,即使第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不知道当前请求是哪个用户。为此,cookie和session的使用为此提供了解决方案。

    cookie:

      以文件的形式存在硬盘中的永久性cookie(设置了一定的时限)和停留在浏览器内存中的临时性cookie,当用户访问网站时,浏览器就会在本地寻找相关cookie。如果该cookie存在,浏览器就会将其与页面请求一起通过报头信息发送到站点。

    session:

      session与cookie的作用有点类似,不同的时cookie存储在本地,而session存储在服务器。当程序需要为某个客户端的请求创建一个session的时候,服务器首先会检查这个客户端的请求里是否包含了一个session标识session-id,如果已经包含一个session-id则为此客户端创建过session,服务器就按照session-id把这个session检索出来,如果不包含,就创建一个新的键值对<session,session-id>,并把session-id返回客户端保存。

      浏览器提供了三种方式来保存ssesion-id:

    • cookie
    • url重写(把session-id附加在url后面,即使用GET)
    • 增加隐藏域(使用POST)

      session什么时候被创建?事实上session并不是在有客户端访问的时候被创建,而是知道某sever端程序调用类似function getSession()方法时才会创建。

    HTTP请求报文结构和响应报文结构

    HTTP请求报文结构如下:

    • 请求行:
    • 请求头:为请求报文添加了一些附加信息,如 Host(接受请求的服务器地址 ip;port 或者 域名 等) / User-Agent / Connection(连接属性,如Keep-Alive) / Accept-Charset / Accpet-Encoding / Accept-Language
    • 空行:请求头的最后一行会有一个空行,表示请求头部结束,接下俩的请求为正文。
    • 请求正文:可选部分,如GET就没有请求正文

    一个报文实体例子如下:

    GET /562f25980001b1b106000338.jpg HTTP/1.1
    Host    img.mukewang.com
    User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
    Accept    image/webp,image/*,*/*;q=0.8
    Referer    http://www.imooc.com/
    Accept-Encoding    gzip, deflate, sdch
    Accept-Language    zh-CN,zh;q=0.8

    HTTP响应报文

    • 状态行:协议版本,状态码等
    • 响应头:与请求头类似,为响应报文添加了一些附加信息。
    • 空行
    • 响应正文

    一个报文实体例子如下:

    HTTP/1.1 200 OK
    Server: nginx
    Date: Mon, 20 Feb 2017 09:13:59 GMT
    Content-Type: text/plain;charset=UTF-8
    Vary: Accept-Encoding
    Cache-Control: no-store
    Pragrma: no-cache
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    Cache-Control: no-cache
    Content-Encoding: gzip
    Transfer-Encoding: chunked
    Proxy-Connection: Keep-alive
    
    {"code":200,"notice":0,"follow":0,"forward":0,"msg":0,"comment":0,"pushMsg":null,"friend":{"snsCount":0,"count":0,"celebrityCount":0},"lastPrivateMsg":null,"event":0,"newProgramCount":0,"createDJRadioCount":0,"newTheme":true}

     HTTPS

    HTTP协议被广泛用于web浏览器和服务器之间传递信息,但是HTTP协议是以明文方式发送内容,为了传输加密内容,需要提供一种加密协议。HTTPS在HTTP协议的基础上加入了SSL协议,从而能够实现内容加密,验证身份,保护数据完整性。

    HTTP和HTTPS的区别:

    1.HTTPS需要至CA申请证书,级别越高越贵。

    2.HTTP是超文本传输协议,信息为明文传输,HTTPS则是在建立了加密信道SSL上的加密传输协议。

    3.HTTP端口为80,HTTPS端口为443

    4.HTTP为无状态连接,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    参考文章:

    http详解

    https://www.cnblogs.com/an-wen/p/11180076.html

    cookie和sessions

    https://www.cnblogs.com/xxtalhr/p/9053906.html

    关于HTTP协议

    https://www.cnblogs.com/ranyonsue/p/5984001.html

    HTTP与HTTPS的区别

    https://www.cnblogs.com/wqhwe/p/5407468.html

  • 相关阅读:
    lpc4357第一个实验,串口(中断)
    移植UCOS-II时堆栈增长方向的疑问
    ARM Cortex-M4_寄存器介绍(-Part5)
    ARM Cortex-M4内核流水线和总线介绍 (-Part4_)
    从ARM 中的 指令对齐 到 bala bala········
    外部Nor Flash的初始化文件名为Prog_Ext_NOR.ini
    LPC4357,NOR FLAHS 仿真初始化文件Dbg_Ext_NOR.ini
    KEIL、uVision、RealView、MDK、KEIL C51之间的关系纠葛(比较区别)
    nand flash 和 nor flash
    c里面取地址和引用的 区别··········
  • 原文地址:https://www.cnblogs.com/guangluwutu/p/12620553.html
Copyright © 2020-2023  润新知