美文网首页
超文本传输协议HTTP

超文本传输协议HTTP

作者: Cubery | 来源:发表于2019-12-08 23:15 被阅读0次

     超文本传输协议HTTP是一个请求响应模式的无连接无状态的应用层协议,基于TCP连接。HTTP协议目前处于多个版本共存的状态,HTTP1.0、HTTP1.1和HTTP2.0。HTTP1.1主要是在1.0版本的基础上增加了一个长连接(keep-alive)特性,是目前使用最广泛的版本。

    特点

     HTTP协议的主要特点如下:

    • 支持C/S模式:客户端浏览器通过URL向服务端Web服务器发送请求,服务端解析处理之后返回响应给客户端。
    • 简单快速:请求只需要给出请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,通信很快。
    • 灵活:HTTP允许传输任意类型的数据对象,正在传输的数据类型由Content-Type加以标记。
    • 无连接:限制每次连接只处理一个请求,服务器处理完客户端的请求并收到客户端的应答之后即断开连接,采用这种方式可以节省传输时间。从HTTP1.1开始,默认使用了长连接,即服务器需要等待一段时间后才断开连接,以保证连接特性,优化效率,但这个优化属于HTTP协议之外的内容。
    • 无状态:协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要之前的信息,则必须被重传。

    HTTP请求结构

    HTTP请求格式.jpg

    HTTP响应结构

    HTTP响应格式.png

    请求/响应的步骤

    • 客户端连接到Web服务器
    • 发送HTTP请求
    • 服务器接收请求并返回HTTP响应
    • 释放TCP连接
    • 客户端浏览器解析HTML内容

    响应状态码

    • 1xx:指示信息,表示请求已接收,继续处理
    • 2xx:成功,表示请求已被成功接收、理解、接受
    • 3xx:重定向,要完成请求必须进行更进一步的操作
    • 4xx:客户端错误,请求有语法错误或请求无法实现
    • 5xx:服务端错误,服务器未能实现合法的请求
    状态码 信息 解释
    200 OK 正常返回信息
    400 Bad Request 客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
    403 Forbidden 服务收到请求,但是拒绝提供服务
    404 Not Found 请求资源不存在
    500 Internal Server Error 服务器发生不可预期的错误
    503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    GET请求和POST请求的区别

    • HTTP报文层面:GET请求信息放在URL,POST放在报文体中(安全性区别不大,URL有长度限制)
    • 数据库层面:GET符合幂等性(一次操作和多次操作结果一样)和安全性(对数据库的操作没有改变数据库中的数据),POST不符合。
    • 其他层面:GET请求可以被缓存、被存储,而POST不行。

     从HTTP标准来说,以上区别是存在的,但是从报文的角度来说,GET请求和POST请求没有本质区别,只要服务器支持,参数怎么传都无所谓。

    1. GET参数的写法并不固定。
    2. POST方法几乎不比GET安全多少(明文传输)。
    3. HTTP本身没有限制URL的长度,是浏览器和服务器基于性能和安全考虑限制的。
    4. POST报文不一定会发送两个TCP报文,这是部分浏览器和框架的行为。

    Cookie和Session的区别

     HTTP是无状态的,Cookie和Session让HTTP具备了状态。

    Cookie

     Cookie是由服务器发送给客户端的特殊信息,以文本的形式存放在客户端。例如,客户端向一个支持Cookie的服务器发送用户名和密码后,服务器在响应的同时,会把这些信息放在Response header(Set-Cookie)中返回给客户端,客户端会把这些信息存放在统一的位置。当客户端再次请求时,会在Request header(Cookie)中把Cookie回发。服务器接收到后,会解析Cookie生成与客户端相对应的内容。

    Session

     Session是服务器端的一种机制,在服务器上保存的信息(类似于hash的结构)。服务器解析客户端的请求中是否包含session id,如果存在session id,说明服务器以前已经为客户端创建过session,把这个session检索出来使用,如果检索不到,就新建一个session。如果客户端请求不包含session id,则为此客户端新建一个session,并生成一个对应的session id,在响应中会发给客户端进行保存。
     Session可以通过Cookie实现,即通过Cookie保存JSESSIONID。也可以通过URL回写来实现,服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,客户端点击任何一个链接都可以把JSESSIONID会发给服务器,但如果不是点击的而是输入的URL,Session是匹配不到的。

    区别

    • 存放位置
    • Session相对更安全
    • 考虑到服务器性能开销,应使用Cookie

    HTTPS

     HTTPS在HTTP协议和TCP协议之间增加了一个SSL(安全套接字层)或TLS(安全传输层),从而提供了保证交换数据隐私和数据完整性,以及网站服务器身份认证的功能。

    SSL

     Security Sockets Layer,安全套接字层

    • 为网络通信提供安全及数据完整性的一种安全协议
    • 是操作系统对外的API,SSL3.0以后更名为TLS
    • 采用身份验证和数据加密保证网络通信的安全和数据的完整性

    加密的方式

    • 对称加密,性能较高,安全性较低
    • 非对称加密,性能较低,安全性较高,能加密的长度有限
    • 哈希算法(摘要算法),将任意长度的信息转化为固定长度的值,算法不可逆
    • 数字签名:证明某个消息或者文件是某人发出/认同的
    数字签名过程.png

    HTTPS数据传输流程

     HTTPS采用了证书和加密结合的方式。


    HTTPS数据传输过程.png

    HTTP和HTTPS的区别

    • HTTPS需要到CA申请证书,HTTP不需要
    • HTTPS密文传输,HTTP明文传输
    • 连接方式不同,HTTPS默认采用443端口,HTTP使用80端口
    • HTTPS = HTTP + 认证 + 加密 + 完整性保护,较HTTP安全(SSL是有状态的)

    HTTPS真的很安全吗

    • 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险;
    • 可以使用HSTS (HTTP Strict Transport Security)优化。

    Socket

     本地进程可以用进程号PID唯一标识,网络进行需要IP + 协议 + 端口号来唯一标识。Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口。Socket通信流程如下:


    socket通信流程.jpg

    相关文章

      网友评论

          本文标题:超文本传输协议HTTP

          本文链接:https://www.haomeiwen.com/subject/seumgctx.html