http协议

一个网络中,传输数据需要面临三个问题:1、客户端如何知道所求内容的位置?2、当客户端知道所求内容的位置后,如何获取所求内容?3、所求内容以何种形式组织以便被客户端所识别?

1:统一资源定位符(URLs);2:超文本传输协议( HTTP);3:超文本标记语言(HTML)

http的网络层次:在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议做为TCP/IP模型中应用层的协议也不例外。应用层(HTTP)、传输层(TCP)、网络层(IP)、网际接口层

HTTP是基于传输层的TCP协议,而TCP是一个端到端的面向连接的协议,所谓的端到端可以理解为进程到进程之间的通信。所以HTTP在开始传输之前,首先需要建立TCP协议,而TCP连接的过程中客户端和服务器需要所谓的“三次握手”,握手完了建立TCP连接,此时HTTP可以进行传输,HTTP传输完成之间并不断开TCP连接,在HTTP1.1中(通过Connection头设置),这是默认行为。比如 访问我的博客,获取的不仅仅是1个HTML而已,而是浏览器对HTML的解析过程,如果发现需要获取的内容,会再次发起HTTP请求去服务器获取,这些HTTP请求,只依靠一个TCP连接就够了,这就是所谓的持久连接,也就是所谓的一次HTTP请求完成。

所谓的HTTP请求,就是WEB客户端向Web服务器发送信息,信息由三部分组成:1、请求行,2、HTTP头,3、内容。请求行:请求方法,请求网址,http版本;http头:1、请求头(response header),普通头(general header),实体头(entity header)(get请求不包含内容实体,因此也无实体头),内容只在post请求中存在,因为GET请求并不包含任何实体。内容只在POST请求中存在,因为GET请求并不包含任何实体。

get与post方法区别:get不存在内容,虽然可以通过QueryString向服务器发信息,这违背了get本意。QuerySting中的信息在HTTP看来仅仅是获取内容的一个参数而已。

HTTP响应:当Web服务器收到HTTP请求后,会根据请求信息做出处理,相应返回一个HTTP响应,HTTP响应在结构上类似于HTTP请求,也由1、状态行;2、HTTP头;3、返回内容组成。状态行:HTTP版本,响应状态码,状态码的描述(OK);HTTP头:响应头(response header),普通头(general header),实体头(entity header);返回内容:HTTP请求所请求的内容,内容可能是HTML也可能是图片。

浏览器如何正确对接受到的信息进行处理?

通过媒体类型确定,更具体来说对应Content-Type这个HTTP头,媒体类型格式为:大类/小类,比如 text/html,image/jpeg,8个大类媒体类型,分别是application、audio、image、message、model、multipart、text、video。

HTTP头,不是严格要求的,浏览器按某些标准(如浏览器自身标准,W3C标准)去解释这个头,它主要分为4大类。通用头、实体头、请求头、响应头。通用头 可以包含在HTTP请求、响应中,主要描述HTTP协议本身,比如描述HTTP是否持久连接的Connection头,HTTP发送日期的Date头,描述HTTP所在TCP连接时间的Keep-Alive头,用于缓存控制的Cache-Control头等;实体头 可以包含在HTTP POST方法请求中,也可出现在HTTP响应中,主要描述HTTP信息的头,Content-Type和Content-length都是描述实体的类型和大小的头都属于实体头。其它还有用于描述实体的Content-Language,Content-MD5,Content-Encoding以及控制实体缓存的Expires和Last-Modifies头等;请求头 由客户端发往服务端以便帮助服务端更好满足客户端请求的头,只在HTTP请求中,比如告诉服务器只接收某种响应内容的Accept头,发送Cookies的Cookie头,显示请求主机域的HOST头,用于缓存的If-Match,If-Match-Since,If-None-Match头,用于只取HTTP响应信息中部分信息的Range头,用于附属HTML相关请求引用的Referer头等。

状态保持:HTTP协议是无状态的,对于接受HTTP请求的服务器来说,并不知道每一次请求来自同一个客户端还是不同客户端,每一次请求对于服务器来说都是一样的,因此需要一些额外手段使得服务器在接收某个请求知道这个请求来自某个客户端

1、HTTP协议通过Cookie(request header)来保持状态;2、通过表单变量name值(如)在url后面?查询参数来保持连接;3、通过QueryString保持状态,在url后面?查询参数来保持连接。

你可能感兴趣的:(http协议)