• Linux网络——HTTP


    HTTP是什么

    HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务端请求和应答的标准,用于从服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效、使网络传输减少。

    URL

    URL:Uniform Resource Locator,统一资源定位符,就是我们俗称的 "网址" ,用来唯一地确定一个网络资源。

    HTTP的特点

    ● 灵活可扩展:http非常灵活,在报文中没有做过多的限制,只要按照其规则,可以自己定义字段,在传输过程中也不仅仅限于txt文本格式,也可以传输图片,视频,压缩包等等任意数据。

    ● 可靠性:http是基于tcp/ip传输的,因为tcp/ip是一个可靠的传输协议,所以是一个可靠的传输。

    ● 请求-应答:http是一个使用请求-应答通信模式,一发,一收,有去有来的协议。

    ● 无状态:是一个无状态协议,服务器对之前的信息不做任何记录,可以减轻服务器的负担,让服务器分配出更多的cpu和内存来对外提供服务。

    ● 比较万能:http是一个万能的应用层协议,不在意性能http可以传输任何东西,没有太多局限性,不像其它协议只局限在一小部分。例如FTP只能传输文件、SMTP只能发送邮件、SSH只能远程登陆等。

    HTTP报头

    HTTP请求

    ● 首行:方法 url 版本。

    ● Header:请求的属性,冒号分隔的键值对;每组属性之间用 \n 分隔,遇到空行表示Header结束。

    ● 空行:用来分隔请求报头和请求正文。

    ● Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个 Content-Length属性来标识Body的长度。

    HTTP响应

    ● 首行:版本号 状态码 状态码解释。

    ● Header:响应的属性,冒号分隔的键值对;每组属性之间用 \n 分隔,遇到空行表示Header结束。

    ● 空行:用来分隔响应报头和响应正文。

    ● Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html网页,那么html页面内容就是在Body中。

    HTTP请求方法

    POST、DELETE、GET、PUT类似于对服务器资源的增、删、查、改。

    ● POST:/url 创建

    ● DELETE:/url/xxx 删除

    ● GET:/url/xxx 查看

    ● PUT:/url/xxx 更新

    GET 与 POST

    概念:

    1.GET方法叫做,获取,是最常用的方法,默认一般获取所有的网页,都是GET方法,但是如果要通过GET方法提交参数,是通过URL进行参数拼接,从而提交给server端。

    2.POST方法叫做:推送,是提交参数比较常用的方法,通过POST方法提交参数,一般是通过正文部分提交的。

    区别:

    1.参数提交的位置不同,POST方法比较私密(私密 != 安全),不会回显到浏览器的url输入框。GET方法不私密,会将重要的信息回显到url的输入框中,增加了被盗取的风险。

    2.GET是通过url传参的,而url是有大小限制的,和具体浏览器有关。而POST方法是由正文部分传参的,一般没有大小限制。

    3.GET请求会被浏览器主动缓存,GET请求参数也会被完整保留在浏览器历史记录里,而POST中的参数不会。

    4.GET是幂等的,POST不是

    如何选择:

    1.获取资源时使用GET,如果要提交参数,不敏感,数量非常少,也可以使用GET。

    2.否则就是用POST方法。

    POST 与 PUT

    区别:

    1.使用PUT时,必须明确要操作的对象,如果对象不存在,则创建对象;如果对象存在,则全部替换目标对象。

    2.同样POST既可以创建对象,也可以修改对象。但用POST创建对象时,之前并不知道要操作的对象,由HTTP服务器为新创建的对象生成一个唯一的URI;使用POST修改已存在的对象时,一般只是修改目标对象的部分内容。

    PUT是幂等的,意味着相同的PUT请求不管执行多少次,结果都是一样的。但POST则不是,就类似与"x = 1"这句话是幂等的,无论执行多少次,变量x的值始终都是 1;但"x++"就不是幂等的,因为每执行一次,变量x的值都不一样。

    HTTP Header属性

    请求

    Accept:指定客户端能够接收的内容类型。

    User-Agent:声名用户的操作系统和浏览器版本信息,也就是发出请求的用户信息。

    Content-Type:数据类型。

    Content-Length:Body的长度。

    Referer:当前页面是从哪个页面跳转过来的。

    Host:客户端告诉服务器,所请求的资源是在哪个主机的哪个端口上。

    Cookie:用于在在客户端存储少量信息,通常用于实现会话的功能。

    Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。

    响应

    Content-Type:数据类型。

    Content-Length:Body的长度。

    Location:搭配3xx状态码使用,告诉客户端接下来要去哪里访问。

    Set-Cookie:设置Http Cookie,告诉客户端服务器需要的信息。

    状态码

    1xx:信息状态码,接收到请求正在处理

    2xx:成功状态码,请求正常处理完毕

    200:从客户端发出的请求被服务器正常处理。

    3xx:重定向状态码,需要进行附加操作来完成请求

    301:永久重定向,表明目标资源被永久的移动到了一个新的 URI,任何未来对这个资源的引用都应该使用新的 URI。

    302:临时重定向,表明目标资源临时移动到了另一个 URI 上。 客户端之后的请求中,还应该使用原本的 URI。

    307:临时重定向,与302的作用相同,区别是,302在重定向后的请求会把POST方法改为GET方法,而307不会。

    4xx:客户端错误状态码,服务器无法处理请求

    403:服务器收到请求但拒绝提供服务,原因有很多,如:权限不足、IP被拉如黑名单等。

    404:客户端请求的资源不存在。

    5xx:服务器错误状态码,服务器处理请求出错

    503:服务器暂时处于过载或者停机维护中,现在无法处理请求。

  • 相关阅读:
    dbeaver连接MySQL数据库及错误Connection refusedconnect处理
    labuladong刷题——第一章(2) 反转单链表 (递归)
    建立链表和对它的相关操作(C++实现)
    互联网摸鱼日报(2022-11-24)
    【BOOST C++ 5 】通信(05 windows相关的对象 )
    ONP: Error #15: Initializing libiomp5md.dll【报错系列】
    ZZULIOJ:1135: 算菜价
    JAVAEE初阶 操作系统
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter21-sed 进阶
    Dart 3.5 更新详解
  • 原文地址:https://blog.csdn.net/weixin_60954394/article/details/126756383