网络--http(第一天--第二部分学习)

网络

  1. http

1.1http请求报文 和 http响应报文

  a) http请求报文

HTTP请求报文由请求行(request line)请求头部(header)空行和请求数据4个部分组成

请求行:(get/post方法,url中的path路径,http版本)

请求头部(header)关键字/值对组成,每行一对,关键字和值用英文冒号

请求数据 :body

        b)http响应报文

http响应报文由状态行,响应头部,空行,响应数据组成

  1. 状态码(status code):描述了响应的状态,可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可以用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码 HttpServiletResponse.SC_OK.
  2. HTTP头部(HTTP header):他们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者指定用户来给用户安全的传输实体内容的编码格式。如何在servlet中检索HTTP的头部看这里
  3. 空行
  4. 主体(body):它包含了响应的内容。他可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中的紧跟在头部后面的数据字节组成的。
  1. HTTP请求方法
  1. OPTIONS

返回服务器针对特点资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

  1. HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回,这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

  1. GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作,例如爱web application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

  1. POST

向指定资源提交数据进行处理请求。数据被包含在请求体中。POST请求可能会导致新的资源的建立和已有的资源的修改。Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

  1. PUT

向指定资源位置上传其最新内容

  1. DELETE

请求服务器删除Request-URL 所标识的资源

  1. TRACE

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

  1. CONNECT

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

  1. http的请求过程

以下是HTTP请求/响应的步骤:

  1. 客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn

  1. 发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行,请求头部,空行和请求数据4部分组成

  1. 服务器接收请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部,空行和响应数据4部分组成 。

  1. 释放连接TCP连接

若Connect模式为close,服务器主动关闭TCP连接,客户端被动关闭连接。释放TCP连接;若connection模式为keepalive,则该链接会保持一段时间,在改时间内,可以继续接受请求;

  1. 客户端浏览器解析HTML内容

客户浏览器首先解析状态行,查看表名请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口显示

 

  1. http协议,ajax;协议的划分

6.htpp请求流程    http长连接设置 短链接

http 怎么记住状态

http是无状态的怎么来

  1. Get和Post的区别

GET被轻质服务器支持

浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据

GET请求发送数据更小

GET请求是不安全的

GET请求是幂等的

POST请求不能被缓存

POST请求相对GET请求是 安全的

 

在一下情况,请使用POST请求:

  1. 无法使用缓存文件(更新服务器上的文件或数据库)
  2. 向服务器发送大量数据(POST没有数据量限制)
  3. 发送包含未知字符的用户输入时,POST比GET更稳定也更可靠
  4. Post比get安全性更高

 

幂等:从定义上看,HTTP方法的幂等性是指:一次和多次请求某一个资源应该具有同样的副作用。

Post并不是幂等的。

 

5.http状态码

2xx (成功)

表示成功处理了请求的状态代码

3xx(重定向)

表示要完成请求,需要进一步操作,通常,这些状态码用来重定向。

4xx(请求错误)

这些状态码表示请求可能出错,妨碍了服务器的处理

5xx(服务器错误)

这些状态代码表示服务器在尝试处理请求时发生内部错误,这些错误可能是服务器本身的错误,而不是请求出错。

6.http长连接 短连接 HTTP协议是无状态

无状态:http协议是无状态的,值得是协议对于事务处理没有记忆能力。服务器不知道客户端是什么状态,也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保吃TCP连接,更不能代表HTTP使用的是UDO协议(无连接)

 

短连接:在HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器,每进行一次HTTP操作,就建立一次连接,任务结束就终端连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,没遇到这样个Web资源,浏览器就会出重新建立一个HTTP会话。

 

长连接:而从HTTP/1.1,默认使用长连接,用以保持连接特性。使用长连接HTTP协议,会在响应头加入这行代码

Connection:keep-alive

在使用长连接的情况下, 当一个网页打开完成后, 客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭, 客户端再次访问这个服务器时, 会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接, 它有一个保持时间, 可以在不同的服务器软件(如 Apache)中设定这个时间。 实现长连接需要客户端和服务端都支持长连接。HTTP 协议的长连接和短连接, 实质上是 TCP 协议的长连接和短连接。

什么时候用长连接,短连接

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况,每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,在操作的话,name处理速度会降低很多,所以每个操作完后都不断开,此处理时直接发送数据包就OK,不用建立TCP连接,例如 数据库的链接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket创建也是对资源的浪费

         而像WEB网站的http服务一般都用短连接,因为产连接对于服务器端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知,所以并发量大,但每个用户无需频繁操作情况下需用短连接就可以了。

7.http1.1和http1.0的区别

1.http1.0需要keep-alive参数来告知服务器要建立一个长连接,而http1.1默认支持长连接

2.HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器, 则返回 100, 否则返回 401。 客户端如果接受到 100, 才开始把请求 body 发送到服务器。 这样当服务器返回 401 的时候, 客户端就可以不用发送请求 body 了, 节约了带宽。

3.host 域 http1.0 没有 host 域, http1.1 才支持这个参数。

4.带宽优化及网络连接的使用, HTTP1.0 中, 存在一些浪费带宽的现象, 例如客户端只是需要某个对象的一部分, 而服务器却将整个对象送过来了, 并且不支持断点续传功能, HTTP1.1 则在请求头引入了 range头域, 它允许只请求资源的某个部分, 即返回码是 206(Partial Content) , 这样就方便了开发者自由的选择以便于充分利用带宽和连接。

 

7.转发与重定向的区别

       一句话,转发是服务器行为,重定向是客户端行为。为什么这么说呢,这需要看两个动作的工作流程

       转发过程: 客户浏览器发送 http 请求----》 web 服务器接受此请求--》 调用内部的一个方法在容器内部完成请求处理和转发动作----》 将目标资源发送给客户; 在这里, 转发的路径必须是同一个 web 容器下的 url, 其不能转向到其他的 web 路径上去, 中间传递的是自己的容器内的 request。 在客户浏览器路径栏显示的仍然是其第一次访问的路径, 也就是说客户是感觉不到服务器做了转发的。 转发行为是浏览器只做了一次访问请求。

 

重定向过程: 客户浏览器发送 http 请求----》 web 服务器接受后发送 302 状态码响应及对应新的location 给客户浏览器--》 客户浏览器发现是 302 响应, 则自动再发送一个新的 http 请求, 请求url 是新的 location 地址----》 服务器根据此请求寻找资源并发送给客户。 在这里 location 可以重定向到任意 URL, 既然是浏览器重新发出了请求, 则就没有什么 request 传递的概念了。在客户浏览器路径栏显示的是其重定向的路径, 客户可以观察到地址的变化的。 重定向行为是浏览器做了至少两次的访问请求的。

发布了0 篇原创文章 · 获赞 4 · 访问量 571

猜你喜欢

转载自blog.csdn.net/mark2965/article/details/88953152
今日推荐