• HTTP


            HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议;默认端口是80。

    特点:

    1. 简单快速客户向服务器请求服务时,只需传送请求方法路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    2. 灵活TTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    3. HTTP 0.9和1.0使用非持续连接,限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
    4. 无状态HTTP协议是无状态协议无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    HTTP请求响应的过程:

    1. 在浏览器地址栏中输入url;
    2. 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则在发送http请求前,会进行DNS域名解析操作;
    3. 浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手;
    4. 握手成功后,浏览器向服务器发送http请求,请求数据包,服务端处理收到的请求,将数据返回至浏览器。
    5. 浏览器收到HTTP响应,读取页面内容,浏览器渲染解析html
    6. 断开连接

    DNS域名解析的过程:

    1. 查询浏览器缓存中是否解析过该域名的IP,如果有,解析结束;否则
    2. 则会在操作系统的hosts文件中查找是否有该域名对应的IP,如果有,解析结束,否则
    3. 请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
    4. 如果LDNS仍然没有命中,则会采用迭代查询的方式,查询到根服务器,根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,如.com .cn .org等),此时LDNS再发送请求给上一步返回的gTLD,接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器, Name Server根据映射关系表找到目标ip。
    5. 地址最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

    从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

    HTTP之请求报文

          包含四部分:

    1. 请求行     用来说明请求类型,要访问的资源以及所使用的HTTP版本。
    2. 请求头部    紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等。
    3. 空行    请求头部后面的空行是必须的即使第四部分的请求数据为空,也必须有空行。
    4. 请求数据   请求数据也叫主体,可以添加任意的其他数据。

    HTTP之响应报文

            包含四部分:

    1. 状态行    由HTTP协议版本号, 状态码, 状态消息 三部分组成;
    2. 消息报头    用来说明客户端要使用的一些附加信息
    3. 空行   消息报头后面的空行是必须的
    4. 响应正文    服务器返回给客户端的文本信息。(空行后面的html部分为响应正文。)

    HTTP状态码

    状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

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

    HTTP请求方法

            HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

    GET         请求指定的页面信息,并返回实体主体。
    HEAD        类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST        向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT         从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE      请求服务器删除指定的页面。
    CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS     允许客户端查看服务器的性能。
    TRACE       回显服务器收到的请求,主要用于测试或诊断。

    GET与POST的区别:

    • GET在浏览器回退时是无害的,而POST会再次提交请求。
    • GET产生的URL地址可以被Bookmark,而POST不可以。
    • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    • GET请求只能进行url编码,而POST支持多种编码方式。
    • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    • GET请求在URL中传送的参数是有长度限制的,而POST么有。
    • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
    • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    • GET参数通过URL传递,POST放在Request body中。

    其他相关区别

    1. 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
    2. GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的。由于GET请求一般是用于资源信息的获取而非修改,所以GET意味着所谓的安全。换言之,GET请求一般不会产生副作用,它仅仅是获取资源信息,就像数据库查询一样,不会改变数据,不会影响资源的状态。所以,GET请求不一般会改变服务器状态。幂等意味着对于同一个URL的多个请求应该返回同样的结果。GET方法的报文主体没有任何语义。
    3. POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。
    4. GET是通过URL方式请求,可以直接看到,明文传输。POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的。

    HTTPS

           HTTP是以安全为目标的HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。

  • 相关阅读:
    JBoss目录结构说明
    Velocity简介
    如何把文件上传到另外一台服务器
    控制GridView列显示
    CheckBoxList取值及勾选上
    Email发送中不允许使用邮箱名称原因
    关于URL重写的一点心得
    修改数据库所有者
    验证CheckBoxList至少要有一项选中
    SQL中字符串处理(分割及反分割)
  • 原文地址:https://www.cnblogs.com/128-cdy/p/13645019.html
Copyright © 2020-2023  润新知