HTTP协议研究一(基础协议及请求)

来源:互联网 发布:南京地铁网络问政 编辑:程序博客网 时间:2024/06/07 15:48


  为什么要单独写HTTP协议,看看下面的等价式就明白了

 webservice <==> http + xml

 rest <==>  http + json

 各种API接口 <==> http + json/xml

上面三种常用的网络服务方式,都与HTTP息息相关,那么今天就浅显的说一说HTTP协议,不对的地方,欢迎评论指出。


1. HTTP协议的简单理解

 什么是协议,双方都遵守的一个共同的约定规范,这就是协议。

 HTTP协议就是按照一定的规则向服务器发送数据或者请求数据,服务器按照约定的规则返回数据。


2. HTTP请求响应信息

(1)请求信息包括三个部分

  a. 请求行  b. 请求头  空一行(标志请求头结束)c 请求体

  请求行包括: 请求方式  GET POST HEAD PUT DELETE  TRACE OPTIONS

                        请求资源路径

                        请求协议 HTTP/1.1

  请求头:Host: 主机地址

                Content-type: 请求信息类型 

                Content-length:请求体信息长度

                Content-Encoding:请求体信息的编码

                Accept:指定那些媒体类型是被接受的

                Accept-Charset: 哪些字符集的响应对请求端是可接受的

                Accept-Encoding: 限定服务端返回给客户端的内容编码

                Accept-Language:限定服务端返回给客户端的自然语言

                Authoriation:授权

                If-Match: 验证

                If-Modified-Since: 验证过去一段时间是否修改

                If-None-Match: 验证ETag 

                Referer: 指定请求URI来源地资源URI (防盗链)

                User-Agent:  发起请求的用户代理信息   

                其他请参考文档:HTTP协议 最新RFC文档 中文版  第5节和第14节


   请求体:就是要发送的请求数据了


 (2)响应信息包括三个部分

   a. 响应行 b. 响应头 空行 c. 响应主体

   响应行包括:协议版本:  HTTP/1.1

                         状态码 :   200

                         状态文字: ok

   响应头包括:Age:发送者对响应产生时刻后经过的时间估计

                        Etag:请求对应变量的当前实体标签

                        Location:201 请求建立新资源的位置  3XX 重定向新的URI

                        Proxy-Autenticate:包含在407响应里 由 challenge(授权模式)

                                                        和parameters(应用于请求的URI代理)组成

                        Date:响应日期时间

           Content-Type:响应内容类型

           Transfer-Encoding:传输编码 如分块传输 chunked

           Connection:连接状态 如 keep-alive 保持、close 关闭

                        Server:用于处理请求的服务器响应信息

                        Vary:告诉用户代理选择表现形式的标准

                        WWW-Authenticate:包含在401响应头信息中没有被授权

                       其他请参考文档:HTTP协议 最新RFC文档 中文版  第6节和第14节   

    响应体:就是返回的数据了

 

3. 常用的请求方式

    
请求方式        请求说明GET           一般用于查询类的请求POST一般用于表单提交 类的请求
HEAD
 与GET类似,不同的是,GET返回响应信息体,HEAD则不会返回,常用于检查某个链接是否访问正常,或者某个资源是否存在却不需要加载该资源信息PUT 如果一个方法被执行多次,产生的效果是一样的,使用此方法,否则使用post TRACE 比如使用代理上网 访问 news.qq.com 使用此方法将返回最终的请求内容,然后根据最初的内容进行对比 看是否有人篡改
OPTIONS             返回该URI 下能使用的所有请求方式


4. 常用的状态码


状态码
说明
  1XX 
 接收到消息,继续处理
  2XX
 接收并成功返回处理 
 3XX
  重定向 301 永久重定向  302 临时重定向
  304  缓存重定向(未修改 读缓存Etag 和 Last Modified 配合)如图片 
  第一次请求 在响应头里 Etag 和 Last-Modified  状态为 200
  第二次请求 在请求头里If-None-Match 和 If-Modified-Since  状态为 304
  307 带参数的重定向 比如form提交时跳转到新的URI继续处理数据
 4XX
 客户端错误 比如 403 禁止访问 404 页面未找到 
 5XX
 服务器错误 500 服务器内部错误 代码问题 502 坏网关 503 服务器暂时不可用
 504 超时

5. 基本的请求示例

# telnet  192.168.1.25  80

GET /test HTTP/1.1

Host:www.huihaokeji.cn

Content-Length:24


username=zhangsan&age=23

HTTP/1.1 200 OK

Server: nginx/1.10.1

Date: Thu, 09 Feb 2017 11:41:16 GMT

Content-Type: text/html; charset=UTF-8

Transfer-Encoding: chunked

Connection: keep-alive

X-Powered-By: PHP/5.6.23


zhangsan is 23







1 0
原创粉丝点击