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. Docker1之Container

    Document An image is a lightweight, stand-alone, executable package that includes everything needed ...

  2. javascript创建函数的20种方式汇总

    http://www.jb51.net/article/68285.htm 工作中常常会创建一个函数来解决一些需求问题,以下是个人在工作中总结出来的创建函数20种方式,你知道多少? function ...

  3. Leetcode88_Merge Sorted Array_Easy

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...

  4. UVA12558 埃及分数

    #include<iostream> #include<cstdio> #include<set> #include<memory.h> using n ...

  5. Gson的fromJson()方法把json字符创转为实体

    直接上代码: 1.先看Person实体类 import lombok.Data; @Data public class Person { private String name; private in ...

  6. linux系统下各类软件安装笔记

    安装环境: linux版本:ubuntu 16.04 安装python3.6 sudo add-apt-repository ppa:jonathonf/python-3.6              ...

  7. js中setTimeout和clearTimeout的使用

    setTimeout,延迟n秒后执行指定代码 clearTimeout,清除计时器 <html> <head> <script type="text/javas ...

  8. np.split()和np.array_split()

    来自:爱抠脚的coder np.split(): 该函数的参数要么按照数字划分(int),要么是按列表list划分:如果仅是输入一个int类型的数字,你的数组必须是均等的分割,否则会报错. np.ar ...

  9. idea 启动时报 error:java 无效的源发行版

    说白了就是编译的版本不符合,有的地方是jdk1.7 有的地方是jdk1.8 所以你只要每个地方都保持一致就行. 每个地方!! 每个地方!! 每个地方!! 重要的设置说三遍! 以jdk1.7为例 fil ...

  10. 导入dmp文件时,需要删除原有ORACLE数据库实例

    导入dmp文件时,对于已存在的数据库实例及表处理方式:删除实例. 1.以管理员身份登录 sqlplus / as sysdba 2.停止实例 shutdown abort; 执行结果:ORACLE i ...