Http协议相关

一、什么是HTTP协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP协议采用了请求/响应模型。

1、主要特点

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  • 支持B/S及C/S模式。B/S结构(Browser/Server)

2、HTTP网络协议栈:


TCP协议是传输控制协议,其特点:

  • 无差错的数据传输
  • 按序传输(数据总是会按照发送的顺序到达)
  • 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)


二、HTTP请求报文与响应报文格式

    通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息,下面看下消息的报文格式。

1、请求报文包含三部分:

  • 请求行:包含请求方法、URL、HTTP版本信息
  • 请求首部字段:以 "字段名:值" 这个格式定义
  • 请求内容实体

2、响应报文包含三部分:

  • 状态行:包含HTTP版本、状态码、状态码的原因短语
  • 响应首部字段:以 "字段名:值" 这个格式定义
  • 响应内容实体


3、GET请求体详情:

GET /Example03/ HTTP/1.1  
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*  
Accept-Language: en-US,zh-CN;q=0.5  
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)  
Accept-Encoding: gzip, deflate  
Host: localhost:8080  
Connection: Keep-Alive  
Cookie: JSESSIONID=9E0C4BDEAFD1EB2B1060D69C3B96F72D  

(1)请求首行:GET  /Example03/  HTTP/1.1
    GET :指的是请求方式。
    /Example03 :指的是请求地址,即URL。
    HTTP/1.1 :指的是协议及版本号。

(2)请求头信息:格式 "字段名:值" 

  • Accept :告诉服务器当前浏览器支持的MIME类型。
  • Accept-Language :告诉服务器当前浏览器支持的语言环境。
  • User-Agent :表示当前浏览器的类型和OS的类型,其中MSIE 8.0表示是ie浏览器,版本是8.0等。
  • Accept-Encoding :当前浏览器支持的数据压缩格式,有时候服务器给浏览器发送的东西很大,这时候服务器就要考虑当数据被压缩后,浏览器能不能给解压出来,那么这个请求头就是浏览器告诉服务器它能够解压的格式。
  • Host :浏览器请求的主机名和端口号,在这里它请求的主机是localhost,虽然后面没有显示端口号,但是你要知道这个端口号是80,它是http协议默认的端口号。
  • Connection :连接的方式,Keep-Alive表示的意思是连接一会。
  • Cookie :这是一个与cookie相关的请求头。

(3)请求信息中的空行,处于请求头和请求正文之间。

(4)以上请求信息中没有请求正文,是因为该请求方式是GET请求,而GET方式的请求信息中是没有请求正文的。


4、POST请求体

POST /Example04/index.jsp HTTP/1.1  
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*  
Referer: http://localhost:8080/Example04/form.html  
Accept-Language: en-US,zh-CN;q=0.5  
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)  
Content-Type: application/x-www-form-urlencoded  
Accept-Encoding: gzip, deflate  
Host: localhost:8080  
Content-Length: 30  
Connection: Keep-Alive  
Cache-Control: no-cache  
   
username=zhangsan&password=123  
  • Referer:当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。
  • Content-Type:正文类型,这里已form表单形式POST请求。
  • Cache-Control:请求和响应遵循的缓存机制。
  • 请求头和请求数据之间保持一个空行。


三、GET方法与POST方法的区别

    1、GET重点在从服务器上获取资源,POST重点在向服务器发送数据;

    2、GET传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII,可能会出现乱码。

    POST传输数据通过Http的post机制,将字段与对应值封存在请求实体<request-body>中发送给服务器,在URL中是不可见的;

    因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

3、首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。

    GET:特定浏览器和服务器对URL长度有限制,因此对于GET提交时,传输数据就会受到URL长度的限制。

    Post可以传输大量数据,所以上传文件时只能用Post方式;理论上数据不受限,但实际各个WEB服务器会规定对post提交数据大小进行限制。


四、请求响应状态码

  • 1xx:指示信息–表示请求已接收,继续处理。
  • 2xx:成功–表示请求已被成功接收、理解、接受。
  • 3xx:重定向–要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误–请求有语法错误或请求无法实现。
  • 5xx:服务器端错误–服务器未能实现合法的请求。



猜你喜欢

转载自blog.csdn.net/white_wt/article/details/80265185