http基础知识

作者: Mx勇 | 来源:发表于2016-11-28 14:25 被阅读31次

    1.Http是什么?

    通俗来讲,他就是计算机通过网络进行通信的规则,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据。目前任何终端(手机,笔记本电脑。。)之间进行任何一种通信都必须按照Http协议进行,否则无法连接。

    四个基于:

    请求与响应:客户端发送请求,服务器端响应数据

    无状态的:协议对于事务处理没有记忆能力,客户端第一次与服务器建立连接发送请求时需要进行一系列的安全认证匹配等,因此增加页面等待时间,当客户端向服务器端发送请求,服务器端响应完毕后,两者断开连接,也不保存连接状态,一刀两断!恩断义绝!从此路人!下一次客户端向同样的服务器发送请求时,由于他们之前已经遗忘了彼此,所以需要重新建立连接。是不是炒鸡不方便!!对!但是是有办法解决的~接着往下看。

    应用层:Http是属于应用层的协议,配合TCP/IP使用。

    TCP/IP:Http使用TCP作为它的支撑运输协议。HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,浏览器(客户机)和服务器进程就可以通过套接字接口访问TCP。

    2.针对Http无状态应该怎么做?

    状态保存的四种方法:

    <1>通过cookies保存状态信息(常用)

    SetCookie是设置客户端的cookie,请求2发出时连同之前的cookie一起发送给服务端,这样服务器通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。

    <2>通过Session保存状态信息:(常用)Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

    <3>通过表单变量保持状态:比如Asp.net就通过一个叫ViewState的Input=“hidden”的框来保持状态,比如:

    这个原理和Cookies大同小异,只是每次请求和响应所附带的信息变成了表单变量。

    <4>通过QueryString保持状态:QueryString通过将信息保存在所请求地址的末尾来向服务器传送信息,通常和表单结合使用,一个典型的QueryString比如:www.xxx.com/xxx.aspx?var1=value&var2=value2

    3. VS:cookie/session

    cookie

    优点:

    1. 极高的扩展性和可用性

    2. 只在cookie中存放不敏感数据,即使被盗也不会有重大损失。

    3. 控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。

    缺点:

    1. Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。

    2. 安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。

    session

    优点:

    1. 如果要在诸多Web页间传递一个变量,那么用Session变量要比通过QueryString传递变量可使问题简化。

    2. 要使WEb站点具有用户化,可以考虑使用Session变量。

    缺点:

    1. Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量!

    2. 当一个用户访问某页面时,每个Session变量的运行环境便自动生成,这些Session变量可在用户离开该页面后仍保留20分钟!如果在Session中置入了较大的对象那就有麻烦了!随着站点访问量的增大,服务器将会因此而无法正常运行!

    3. 过度使用session变量将会导致代码不可读而且不好维护。

    4.基于HTTP的网络请求流程

    例如当你访问baidu.com网址时,我们来看看浏览器和服务器都做了些什么事:

    一、本地域名解析: 浏览器搜索本地缓存。

    1.  Chrome搜索自身的DNS缓存,看自身的缓存有没有baidu.com的IP(有效期为1分钟)

    2.  如果没有找到或者缓存失效,再搜索本机操作系统自身的DNS缓存。

    3.  如果还是没有,浏览器就会读取本地的host文件。

    4.  如果还是没有,浏览器会发起一个DNS的一个系统调用,向本地主控的DNS服务器(一般是你的宽带运营商提供)发起一个域名解析请求

    二、运营商域名解析: 服务器响应。

    以西安邮电大学为例:

    1.  校园宽带(局域网)服务器查看本身缓存,找到对应的条目,如果没有过期,那么就解析成功了,返回响应。

    2.  如果校园宽带没有找到对应的条目或者过期,就会代替浏览器向上一级域网发起一个迭代的DNS解析请求

    3.  校园服务器请求到baidu.com的IP时,就会把结果返回操作系统内核,同时缓存到自己的缓存区(这个缓存有时间限制)

    4.  操作系统内核就会把请求到的IP地址返回给浏览器

    5.  最终浏览器拿到了www.baidu.com对应的IP地址

    三、HTTP“三次握手”: 建立TCP/IP传输连接

    第一次:客户端要求建立联机。客户端发送位码为syn=1,随机产生seq number=1234567的数据包到上述得到的IP地址对应的服务器,服务器由syn=1知道,客户端要求建立联机;

    第二次:服务端确认联机信息。服务器发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包

    第三次:客户端确认联机信息,正确则连接建立成功。

    客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(主机B的seq+1),ack=1,服务端收到后确认seq值与ack=1则连接建立成功。

    完成三次握手,客户端与服务器开始传送数据。

    四、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了

    五、服务器接收到了这个请求之后,根据路径参数,经过后端的一些处理之后,把处理后的结果数据返回给浏览器。如果是百度的搜索首页,就会把完整的HTML页面代码返回给浏览器

    六、浏览器拿到百度的完整HTML代码之后,解析和渲染这个页面。这个过程同样需要请求这个页面里的js,css,图片静态资源,每一次请求都会做上述的所有步骤。

    七、最终,浏览器向用户展现了百度页面。

    5.http的请求方法

    GET          请求指定的页面信息,并返回实体主体。

    POST        向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。

    HEAD        类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

    PUT           从客户端向服务器传送的数据取代指定的文档的内容。

    DELETE    请求服务器删除指定的页面。

    CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    OPTIONS  允许客户端查看服务器的性能。

    TRACE      回显服务器收到的请求,主要用于测试或诊断。

    6.VS:GET/POST

    1. get是从服务器上获取数据,post是向服务器传送数据。

    2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

    3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

    4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

    5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

    建议:

    1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

    2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

    7.HTTP状态码

    1**      服务器收到请求

    2**      成功,操作被成功接收并处理

    3**      需要进一步的操作以完成请求

    4**      客户端错误,请求包含语法错误或无法完成请求

    5**      服务器错误,服务器在处理请求的过程中发生了错误

    8.Http与TCP/IP区别

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

    9.TCP/IP为什么一定要三次握手?两次行不行?

    由三次握手图可得:客户主机向服务主机发送连接请求,服务主机向客户主机授予连接,而客户主机收到服务主机的应答后,便知道了自己这一方发送和接收数据都没有问题,这是两次握手,如果到这个时候停止了,那么服务主机仅仅知道自己接收数据没有问题,由于客户主机再没有向他发送确认,因此他也不知道自己向客户主机发送的授予连接的信息有没有发送成功,只有当客户主机再次向服务器主机发回确认时,服务器主机才知道自己的发送和接收都是ok的。

    相关文章

      网友评论

        本文标题:http基础知识

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