zoukankan      html  css  js  c++  java
  • HTTP基础(整理)

    前一段时间看了有关这个协议的相关文档,对这个协议有了新的理解,这里整理一下。

    http是应用层面向对象的协议。

    它有以下几个特点:

    1、  支持客户服务器模式(这是废话,不支持这个模式怎么工作)

    2、  灵活(传什么都行,传的类型由content-type标记)

    3、  简单、快速(当客户端有求于服务器的时候,只需注明请求方法和路径,方法有:get,post,head。后面在讲请求报文的时候会举例说明。每种不同的方法都意味着客户和服务器连接的不同方式)

    4、  无连接(每次只处理一个请求,收到请求,完成响应,断开连接,下一位……可以节省不少时间)

    5、  无状态(没有记忆效应,后面数据要用到前面数据的话,要从头开始。有利有弊:如果是后面要用前面的数据,传送的数据量要加大不少;但是不是这种情况的话,应答就很快)

    关于请求和应答:

    这是这个协议的具体体现,我们看看它到底是怎样工作的。

    首先客户端发出请求,格式如下:

                      

    请求行

    请求报头

    请求正文

                 

    请求行:

    方法

    URI

    协议版本

    方法这里举例说明:

    get:输入网址,向服务器通过get要资源GET /form.html HTTP/1.1 (CRLF)

    post:请求服务器接受附在请求后面的数据,例如表单POST /reg.jsp HTTP/ (CRLF)

    head:和get相似,主要用于检测是否能访问,以及检查更新

    然后是服务器的响应

    状态行

    响应报头

    响应正文

                              

    状态行:

    http-version

    Status-code

    Reason-Phrase

    也就是:   HTTP/1.1 200 OK(CRLF)

    http协议版本

    响应代码

    响应代码的文本描述

    关于响应代码和文本描述:

    200 OK //正常响应

    400 Bad Request //请求的语法不被服务器接受

    401 Unauthorized //未授权的请求,要和报头域中的其他字段联合使用

    403 Forbidden //服务器接收到请求,但是拒绝服务

    404 Not Found //请求的页面找不到

    500 Internal Server Error //服务器发生故障

    503 Server Unavailable //这一会不行,待会再试试

    下面是两个报头:

    请求报头:(下面是一个个请求报头域组成的请求报头)

    Accept

    Accept-charset

    Accept-encoding

    Accept-language

    Authorization

    Host

    User-agent

    Authorization:接收到401的消息之后,再次发送验证的时候要包含这个域。

    不再一一赘述各种域的功能,我们看一个例子:

    GET /form.html HTTP/1.1 (CRLF)

    Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms

    -excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF) (接受哪些类型的消息)

    Accept-Language:zh-cn (CRLF) (指定一个自然语言,缺省什么都可以)

    Accept-Encoding:gzip,deflate (CRLF) (可接受的内容编码,缺省什么都可以)

    If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)

    If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)

    User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF) (告知自己的操作系统、版本号)

    Host:www.guet.edu.cn (CRLF)(目的主机,端口号)

    Connection:Keep-Alive (CRLF)

    (CRLF)

    响应报头:(同理,一个个的响应报头域)

    Location

    Server

    WWW-Authenticate

    Location:重定向接受者到一个新的位置。

    Server:服务器用来解决请求所用的软件信息Server˖Apache-Coyote/1.1和请求报头的

    User-agent相对应。

    WWW-Authenticate:包含在401 Unauthorized响应信息中。客户接收到401之后,再发送Authorization请求报头域请求验证,得到的响应就包含这个域。

    WWW-Authenticate:Basic realm="Basic Auth Test!"基本验证。

    到此,已经将http相关的报文、各个域的功能简单的介绍完了。关于HTTP的其他补充,有兴趣再整理。

    欢迎大家指正,共同进步(⊙o⊙)。

    参考资料:《HTTP详解》

    方法:get、post、put、delete,对应:查、改、增、删。

    补充:关于get和post的不同点:

    1、get是获取数据的请求,post是提交数据的请求

    2、get方法将表单中的数据放在请求报头里面,不安全;post是把表单数据放在实体数据中,用户看不到,相对安全

      GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?                  name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

    也就是说:get把数据放在URL之后,接一个?,字母数字原样发送,空格是+,中文字符换成加密字符就是%字母什么的。

      POST把提交的数据则放置在是HTTP包的包体中。

    所谓安全又两个意义上的解释1、get不能对服务器上面的数据进行更改,对服务器来说是安全的。2、get把用户名密码全放到请求URL上面,对用户来说是不安全的。

    3、get传输的数据量小,多用于请求获取和查询;post传输的数据量大,多用于更新

  • 相关阅读:
    Python面向对象:继承和多态
    Python面向对象:类、实例与访问限制
    Python正则表达式匹配猫眼电影HTML信息
    Git:从github上克隆、修改和更新项目
    Python:闭包
    JPA-映射-(@ManyToMany)双向多对多
    rownum详解
    java之yield(),sleep(),wait()区别详解
    springmvc<一>一种资源返回多种形式【ContentNegotiatingViewResolver】
    @RequestParam,@PathVariable,@ResponseBody,@RequestBody,@ModelAttribute学习
  • 原文地址:https://www.cnblogs.com/lamian/p/3948833.html
Copyright © 2011-2022 走看看