• HTTP协议——web之困


               

    1. 什么是HTTP协议

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则

    超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器

    http协议永远都是客户端发起请求,服务器响应,这样就限制了使用http协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

    http协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。为了解决这个问题, Web程序引入了Cookie机制来维护状态

    2、工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。包括TCP三次握手)

    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    3HTTPTCP/IP协议栈中的位置

    HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:

     

    4代理服务器就是网络信息的中转站,有什么功能呢?

    (1). 提高访问速度, 大多数的代理服务器都有缓存功能。

    (2). 突破限制, 也就是翻墙了

    (3). 隐藏身份。

    5HTTP基本语法

    1HTTP/0.9协议完全没有为客户端和服务器提供任何额外的元数据交换空间。

    它的客户端请求仅有一行,以GET开头,后面跟着URL路径和查询字符串,然后以一个CRLF换行符结束

    一个HTTP/0.9请求样例如下:

    Get /fuzzy_bunnies.txt

     

    Http/0.9的处理有一堆严重缺陷

    没法根据浏览器里用户的首选语言或支付的文档类型等进行交互处理

    当找不到请求的文件需要被重定向到新的位置,或返回的内容不是HTML格式的文件时,在HTTP/0.9协议里服务器也没法通知到客户端。

    因为传输的URL信息里只包括了路径和请求行,所以不能做到在一台服务器上用一个IP地址支持多个不同主机名的网站——有别于域名,IP地址可是比较珍贵的资源。

    2HTTP/1.0HTTP/1.1

    请求的第一行包含具体的版本信息,后面则跟着零到多条以“名称:值”格式组成的数据行(也称头域,header,每行为一个头域

    常见的有:User-Agent(浏览器版本信息)Host(URL主机名称)Accpet(支持的MIME文件类型)等

    6HTTP请求类型

    1GET:查,获取信息

    2POST:改,将客户端提交的信息传递给服务器端

    3PUT:增,用来向服务器特定目标URL上传文件

    4DELETE:删

    5headoptions raceconnect

     

    7、服务器的相应代码

    200~299(成功 — 表示请求已被成功接收,理解,接收)

    200 OK

    300~399  重定向和其他状态信息

    304 not modified(没有变化)

    400~499  客户端错误,请求有语法错误或请求无法实现

    400 Bad Request 客户端请求与语法错误,不能被服务器所理解

    401   unauthorized(未授权)

    403 Forbidden 服务器收到请求,但是拒绝提供服务

    404 Not Found

    500~599 服务端错误,服务器未能实现合法的请求

    500 Internal Server Error 服务器发生了不可预期的错误

    503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    8HTTP的几个重要概念

    客户机:Client

    一个为发送请求目的而建立连接的应用程序。

    用户代理:UserAgent

    初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。

    服务器:Server

    一个接受连接并对请求返回信息的应用程序。

    源服务器:Originserver

    是一个给定资源可以在其上驻留或被创建的服务器。

    代理:Proxy

    一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。

    代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。

    网关:Gateway

    一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。

    网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。

    通道:Tunnel

    是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。

    代理服务器和网关有什么区别?

    用最简单的话来说:  

    代理服务器就你通过它来上网的服务器,可以帮你连接到Internet上。

    网关就是你要访问另一个网络时,首先需要访问的网络节点。比喻你有两个不同的内网,在A网中要访问B网,则首先需要访问网关,由它那里路由转发。

    所以,代理服务器可以说是一个网关,但网关并不一定是代理服务器。

  • 相关阅读:
    我从Linux走来,选择了Windows
    静态路由(三路由)
    设置跨交换机VLAN
    服务器只能被动接受
    理解 atime,ctime,mtime (下)
    理解 atime,ctime,mtime (上)
    visualvm连接服务器jvm进行监控
    mysql 日期函数格式
    关于springmvc跨域
    Javassist初体验
  • 原文地址:https://www.cnblogs.com/mmmaolj/p/5863770.html
Copyright © 2020-2023  润新知