码迷,mamicode.com
首页 > Web开发 > 详细

Web Service:HTTP协议

时间:2015-10-04 06:45:15      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:http协议

一、http协议基本概念

 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

1.套接字

(1)套接字的定义

  套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。

(2)套接字的分类

  常用的TCP/IP协议的3种套接字类型如下:

  ①流套接字(SOCK_STREAM):

  流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

  ②数据报套接字(SOCK_DGRAM):

  数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。

  ③原始套接字(SOCK_RAW):

  原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。

2.http协议版本

  超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。

  0.9已过时,只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。

  HTTP/1.0这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。

  HTTP/1.1当前版本,持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。  

  spdy:加速浏览器获取资源速度。

  HTTP/2.0:整合spdy协议的优势。

3.MIME

  MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

  nase64:将二进制数据编码成文本发送,并能够让接受方还原回原来的格式。

二、http报文格式与请求方法

1.http方法:

  安全的方法:GET、HEAD

  POST、PUT、DELETE、OPTIONS、TRACE

  扩展方法:LOCK、MKCOL、COPY、MOVE

    GET:请求获取一个资源,需要服务器发送

    HEAD:跟GET相似,但其不需要服务发送资源而仅传回响应首部

    POST:支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)

    PUT:与GET相反,向服务写入文档;发布系统

    DELETE:请求删除URL指向的资源

    OPTIONS:探测服务器端对某资源所支持的请求方法

    TRACE:追踪请求资源要经过的防火墙、代理或网关等

2.http报文格式

  HTTP事务:一次请求以与其对应的响应。

(1)HTTP请求报文格式:

  <method><request-url><version>  #<获得的方法><请求的资源><http协议版本>

  <headers>                #<http协议首部>


  <entity-body>             #<报文主体>

(2)http响应报文格式:

  <version><status><reason-phrase> #<http版本><状态码><原因短语>

  <headers>                #<响应报文首部>


  <entity-body>             #<报文主体>

(3)http协议首部:

  分三类:通用首部、请求首部和响应首部。

(4)http响应报文代码

  1XX:信息性状态码

  2XX:成功状态码

  3XX:重定向状态码

    301:Moved Permanebtly 永久重定向,在响应报文中使用首部“Location:           URL”指定资源现在所在的位置

    302:Found 临时重定向,在响应报文中使用首部“Location:URL”指定临时资源         位置

    304:Not Modified,条件式请求中使用

  4XX:客户端的错误

    403:Forbidden,请求被服务器拒绝

    404:Not Found,服务器无法找到请求的URL

    405:Method Not Allowed,不允许使用此方法请求响应的URL

  5XX:服务器类的错误

    500:Internal Server Error,服务器内部错误

    502:Bad Gateway:代理服务器从上游收到一条伪响应

    503:Service Unavailable,服务器此时无法提供服务,但将来可能可用

(5)http首部

  分为五类:通用首部、请求首部、响应首部、实体首部和扩展首部。 

  ①通用首部:

    Connection:定义C/S之间关于请求/响应的有关选项

      对于http/1.0,Connection keep-alibe

      Via:显示了报文经过的中间节点

      Cache-Control:缓存指示

  ②请求首部:

    Cilent-IP:请求端IP

    Host:请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机

    Referer:指明了请求当前资源的原始资源的URL

    User-Agent:用户代理,使用什么工具发出的请求

    Accept首部:用户标明客户自己更倾向于支持使用的能力

    Accept:指明服务器能发送的媒体类型

    Accept-Charset:支持使用的字符集

    Accept-Encoding:支持使用的编码方式

    Accept-Language:支持使用语言

  ③条件请求首部:

    Expect:期望的行为

    If-Modified-Since:是否在指定的时间以来修改过此资源

    If-None-Match

    跟安全相关的请求首部:

      Authorication:客户端提交给服务端的认证数据,如账号和密码

      Cookie:客户端发送给服务器端身份标识

      Cookie2

  ④响应首部:

    Age:响应持续的时间

    Server:向客户端标明服务器程序名称和版本

  ⑤协商首部:

    Accept-Ranges:对当前资源来讲,服务器所能够接受的范围类型

    Vary:首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端

    跟安全相关的响应首部

      Set-Cookie:服务器端在某客户端第一次请求时发给的令牌

      Set-Cookie2:

      WWW-Authenication:质询,即要求客户端提供账号和密码

  ⑥实体首部:

    Location:资源的新位置

    Allow:允许对此资源使用的请求方法

    内容首部:

      Contern-Encoding

      Contern-Language

      Contern-Length

      Contern-type

      Contern-Range

      Contern-Location

  ⑦缓存首部:

    ETag:实体标签

    Expires:过期标签

    Last-Modified:上一次的修改时间

Web Service:HTTP协议

标签:http协议

原文地址:http://zhaibo.blog.51cto.com/8252246/1700068

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!