1. 讲讲你对http的理解。

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议,是一个客户端和服务器端请求和应答的标准。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。

用户打开浏览器,在地址栏输入URL、按下回车,到页面输出内容,这一系列的过程都在遵循HTTP协议。

2. http协议包含哪些内容?

HTTP是一个应用层协议,由请求和响应构成。这两种类型的消息由一个起始行、消息报头、请求正文组成。

请求消息包括以下四个部分:
请求行(request line)、请求头部(header)、空行和请求数据。

第一部分:请求行,即第1行。用来说明请求类型,要访问的资源以及所使用的HTTP版本。
GET说明请求类型为GET,/a.html为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。
第二部分:请求头部,紧接着请求行之后的部分(图中第2-10行),用来说明服务器要使用的附加信息。
Host:指出请求的目的地。
User-Agent:服务器端和客户端脚本都能访问它,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
第三部分:空行,请求头部后面的空行是必须的,即使第四部分的请求数据为空,也必须有空行。
第四部分:请求数据也叫主体,可以添加任意的其他数据。这个例子的请求数据为空。

响应消息也由四个部分组成:
状态行、消息报头、空行和响应正文。

第一部分:状态行,即第1行。由HTTP协议版本号、状态码、状态消息三部分组成。
HTTP/1.1表明HTTP版本为1.1版本,状态码为304,状态消息为Not Modified。
第二部分:消息报头,图中第2-5行。用来说明客户端要使用的一些附加信息。
第三部分:空行,消息报头后面的空行是必须的。
第四部分:响应正文,服务器返回给客户端的文本信息。

3. 一次http请求,具体的流程是什么?

客户端发送一个请求(Request)给服务器,服务器在接收到这个请求后将生成一个响应(Response)返回给客户端。一次HTTP操作称为一个事务,其工作过程可分为四步:

1)单击某个超链接,客户端与服务器建立连接,HTTP协议开始工作。
2)建立连接后,客户端发送一个请求给服务器。
3)服务器接到请求后,给予相应的响应信息。
4)客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户端与服务器断开连接。

4. http有哪些方法?

GET:请求获取Request-URI所标识的资源。
POST:在Request-URI所标识的资源后附加新的数据。
HEAD:请求获取由Request-URI所标识的资源的响应消息报头。
PUT:请求服务器存储一个资源,并用Request-URI作为其标识。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。
CONNECT:保留将来使用。
OPTIONS:请求查询服务器的性能,或查询与资源相关的选项和需求。

5. post和get的区别&post为什么比get安全?

1)GET是从服务器上获取数据,
POST则是向指定的资源提交要被处理的数据。
注:不论是GET还是POST,都可以向服务器传送数据,只不过传送数据的位置不同;都可以从服务器上获取数据。只不过GET的主要任务是获得数据,但在获得数据之前也可以向服务器提交一些数据;POST的主要任务是提交数据,但在提交数据之后服务器也会向用户端返回一些显示用的数据。

2)GET请求数据按照查询字符串(名称/值对)方式,放置在HTTP请求协议头(headers)中,也就是URL之后,
POST提交的数据则放在实体的主体(request-body)中,按照查询字符串(名称/值对)相对应的方式,传递到所指向URL。

3)GET限制数据集的值必须为ASCII字符,GET提交的数据会以variable=value的形式附加在url之后,以?来分隔URL和数据,以&来分隔参数;如果数据是英文或数字,原样发送,如果数据是中文或其他字符,则进行base64编码,
POST没有数据类型的限制,允许二进制数据。

4)GET方式提交的数据最多只能是1024字节,
POST支持较大数据传输。
注:这里的限制指的是整个URL长度,而不是参数值数据长度。HTTP协议对GET和POST都没有对URL长度进行限制,这个限制是特定的浏览器及服务器出于安全、稳定性等方面的考虑,给URL长度进行了限制。

5)在From提交的时候,如果不指定Method,则默认为GET请求。

6)POST比GET相对安全
GET所发送的数据是URL的一部分,数据在地址栏上可见。但是如果通过第三方工具比如抓包工具,也能看到POST方式传送的数据,因此POST方式也不是绝对的安全,只是比GET相对安全些。

在语义上(RESTFUL视角),
GET的是获取指定URL上的资源,是读操作。不论对某个资源GET多少次,资源的状态是不会改变的,在这个意义上,我们说GET是安全的(不是被密码学或者数据保护意义上的安全)。因为GET是安全的,所以GET返回的内容可以被浏览器,Cache服务器缓存起来。
POST是可能修改变服务器上的资源的请求,资源的状态可能会发生变化,所以POST是不安全的,每次提交的POST,都会被认为这个操作会修改资源的状态。于是,浏览器在你按下F5(刷新)的时候跳出确认框,缓存服务器不会缓存POST请求返回内容。
简而言之,就是
GET可以被缓存,POST不能。
GET可收藏为书签,POST不可收藏为书签。
GET请求的URL,参数会被浏览器保留在历史中,POST参数不会。

[参考资料] 关于HTTP协议,一篇就够了 http://www.cnblogs.com/ranyonsue/p/5984001.html

2017-3-29/HTTP协议1的更多相关文章

  1. 2017.6.29 java读取.properties配置文件的几种方法

    参考来自:http://www.cnblogs.com/s3189454231s/p/5626557.html 关于路径的解释:http://blog.csdn.net/bluishglc/artic ...

  2. MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)

    本文原创,未经同意,谢绝转载!(转载请告知本人并且经过本人同意--By Pacific-hong) 本人小硕一枚,因为专业方向图像相关,所以用到opencv,然后网上MAC下Xcode配置opencv ...

  3. Work 2(演讲类) (2017.06.29)

  4. SpringMvc 这篇文章写得不错 多多学习2017.6.29

    http://www.cnblogs.com/bigdataZJ/p/springmvc1.html  博客园链接

  5. MAC下Xcode配置opencv(2017.3.29最新实践,亲测可行)(转)

    本文原创,未经同意,谢绝转载!(转载请告知本人并且经过本人同意--By Pacific-hong) 本人小硕一枚,因为专业方向图像相关,所以用到opencv,然后网上MAC下Xcode配置opencv ...

  6. Natural Language Processing, 2017, Mar.29, Weekly Report

    Distributed Representations of Words and Phrases and their Compositionality T Mikolov, I Sutskever, ...

  7. ssm框架整合之Spring4+SpringMVC+Mybaties3之配置文件如何配置及内容解释--可直接拷贝使用--不定时更改之2017/4/29

    经测试,需注意以下几点: 1,controller的自动扫描不能放在applicationContext.xml中,要放在spring-mvc.xml中.同样是<context:componen ...

  8. 2017.11.29 JSP+Servlet 中功能验证码及验证的实现

    源代码如下: validate.jsp <%@ page language="java" import="java.util.*" pageEncodin ...

  9. 2017.10.29 C/C++/C#程序如何打成DLL动态库

    C/C++程序如何打成DLL动态库: **1.在VS中新建main.h,添加如下内容:** extern "C" _declspec(dllexport) int onLoad() ...

  10. 2017.9.29 web网上答题及其自动评测系统

    1. 设计计一个网上答题及其自动评测系统,首先是试题页面的设计及其解答的提交, 其次是当提交解答之后,系统自动评阅并给出结果. 分析:需要两个jsp页面:一个是提交信息的页面,另一个是获取提交信息的页 ...

随机推荐

  1. Hyper-v虚拟机

    Hyper-V1:创建和管理虚拟机 Hyper-V2:向VM增加虚拟硬盘 Hyper-V3:虚拟机的配置 使用Hyper-V创建虚拟机 Hyper-v 安装CentOS 7 (其他虚拟机一样参考)

  2. Python GIL(Global Interpreter Lock)

    一.介绍 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threa ...

  3. URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)

    https://vjudge.net/problem/URAL-1004 题意:求路径最小的环(至少三个点),并且输出路径. 思路: 一开始INF开大了...无限wa,原来相加时会爆int... 路径 ...

  4. struct和typedef struct用法和区别

    1 首先://注意在C和C++里不同 1.1 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu ...

  5. spring读取bean有几种方式

    bean加载到spring的方式: 第一种:xml 第二种:注释「一定要配合包扫描」: <context:component-scan base-package="Cristin.Co ...

  6. rtrim

    <?php $str = '14岁'; $new_str = rtrim($str, '岁'); echo $new_str; 如果右边是'岁',就过滤掉.

  7. 前端阶段_html部分2后台frame的初始构架案例

    1.<frameset cols="25%,75%">          把页面分为1:3,并且使用frame的同时应该删除body标签 2.<frame src ...

  8. Spring重要注解@ControllerAdvice

    @ControllerAdvice是一个@Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMa ...

  9. 力扣(LeetCode) 217. 存在重复元素

    给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3,1] 输出: true ...

  10. Django框架中,使用celery实现异步

    作用:在使用框架时,在视图函数中实现异步构成: 任务task:一段耗时并与响应结果无关的代码,如发短信 工人worker:新进程,用于执行任务代码 代理人broker:调用任务时,将任务添加到队列中, ...