Http 协议见闻

Http 协议见闻

一、HTTP协议的8种请求类型介绍

HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式,具体介绍如下:

  • GET:向特定的资源发出请求。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除Request-URI所标识的资源。
  • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
  • HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

虽然HTTP的请求方式有8种,但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接的来实现。

二、Http请求返回状态码的简单说明

  1. 客户方错误
    100 : 继续
    101 : 交换协议
  2. 成功
    200 : OK
    201 : 已创建
    202 : 接收
    203 : 非认证信息
    204 : 无内容
    205 : 重置内容
    206 : 部分内容
  3. 重定向
    300 : 多路选择
    301 : 永久转移
    302 : 暂时转移
    303 : 参见其它
    304 : 未修改(Not Modified)
    305 : 使用代理
  4. 客户方错误
    400 : 错误请求(Bad Request)
    401 : 未认证
    402 : 需要付费
    403 : 禁止(Forbidden)
    404 : 未找到(Not Found)
    405 : 方法不允许
    406 : 不接受
    407 : 需要代理认证
    408 : 请求超时
    409 : 冲突
    410 : 失败
    411 : 需要长度
    412 : 条件失败
    413 : 请求实体太大
    414 : 请求URI太长
    415 : 不支持媒体类型
  5. 服务器错误
    500 : 服务器内部错误
    501 : 未实现(Not Implemented)
    502 : 网关失败
    504 : 网关超时
    505 : HTTP版本不支持

THE END.

评论

Print all sub-array with 0 sum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Given an array of integers, print all subarrays having 0 sum.

For example,

Input: { 4, 2, -3, -1, 0, 4 }
Sub-arrays with 0 sum are
{ -3, -1, 0, 4 }
{ 0 }

Input: { 3, 4, -7, 3, 1, 3, 1, -4, -2, -2 }
Sub-arrays with 0 sum are
{ 3, 4, -7 }
{ 4, -7, 3 }
{ -7, 3, 1, 3 }
{ 3, 1, -4 }
{ 3, 1, 3, 1, -4, -2, -2 }
{ 3, 4, -7, 3, 1, 3, 1, -4, -2, -2 }

查看更多

评论

Sunday 算法

KMP算法和BM算法,这两个算法在最坏情况下均具有线性的查找时间。但实际上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法虽然通常比KMP算法快,但BM算法也还不是现有字符串查找算法中最快的算法,有一种比BM算法更快的查找算法即Sunday算法。

查看更多

评论

Android Service相关问题

一、Service里面的 onStartCommand() 方法详解

通过 startService() 多次启动service的时候,onCreate方法只有第一次会调用,onStartCommand和onStart每次都被调用。onStartCommand会告诉系统如何重启服务, 比如会判断是否异常终止后重新启动,以及在何种情况下异常终止Service。

查看更多

评论

Java静态多态和动态多态

静态分派

所有依赖静态类型来定位方法执行版本的分派动作,都称为静态分派,静态分派的最典型应用就是多态性中的方法重载。

动态分派

根据变量的实际类型来分派方法的执行版本的。而实际类型的确定需要在程序运行时才能确定下来,这种在运行期根据实际类型确定方法执行版本的分派过程称为动态分派。

查看更多

评论

Alarm实现机制分析

alarm的使用这里就不说了,来看看alarm是怎么实现提醒的。

查看更多

评论

RxAndroid

Observer

创建Observer :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Observer observer = new Observer<Model>() {
@Override
public void onComplete() {
......
}

@Ovrride
public void onError(Throwable e) {
......
}

@Override
public void onNext(Model model) {
......
}
};

查看更多

评论

Java 中的 IncompatibleClassChangeError 错误

最近发现了一个从来没遇到过的崩溃 IncompatibleClassChangeError ,出现这种错误的原因可能是因为jar包的代码发生了一些无法执行 二进制兼容 的变化。最有可能的是将非静态的成员变量或者方法变成了静态的,还有将私有的成员变量和方法变成了共有的。并且引用jar包的客户端没有重新编译源码。

IncompatibleClassChangeError 这个错误只是二进制兼容问题其中的一种错误。

查看更多

评论

Android ANR 分析的几个要点

一、找到trace.txt中的ANR

1
2
3
4
----- pid 23835 at 2017-02-21 20:11:48 -----
Cmd line: com.wisim.example

......

trace.txt中,上面这种形式就是一个ANR日志的开始标志了。一个trace.txt中会有好多ANR,有的可能在界面上弹出提示框,有的没有。

查看更多

评论

Mac安装Python3并将其作为默认的Python版本

Mac安装Python3并将其作为默认的Python版本

Mac OS上自带的Python版本是2.7。可以直接在命令行输入 python 查看。如果不想删除系统自带的Python2.7,又想使用最新的版本,可以试试如下方法。

查看更多

评论

Android ViewDragHelper

ViewDragHelper 作为处理手势滑动,实现复杂滑动效果很有一套。一起来看看它的实现原理。

查看更多

评论

Java中 a=a+b 和 a+=b 的区别

千万不要放过任何一个小的知识点(一个这么小的点也可以拿来写一篇文章 哈?)

查看更多

评论

Java多线程-ThreadLocal的使用

ThreadLocal的设计不是为了解决多线程之间的数据共享问题,而是为了实现了线程间的数据隔离。ThreadLocal 很残暴的在每个线程内部自己维护一个变量,你别的线程的数据我不要,我只管我自己的数据。
这样的结果是降低了线程的同步的复杂度,但是内存使用也就上去了。是一种“以控件换空间”的方式。而已 “synchronized” 为代表的一系列线程同步方式,则是“以时间换空间”的方式。那就来看看ThreadLocal要怎么使用吧。

查看更多

评论

Java多线程-static synchronized 和 synchronized 修饰的方法的区别

一晃眼居然两个多月没写博客了,那这两个月究竟忙什么了呢。仔细想想好像也没干啥。大概是忙着灌药了吧。唉,以后还是多写点博客吧,不然感觉虚度光阴了。🙏

查看更多

评论

Android Hook getDeviceId方法篡改设备id

学习一下如何使用动态代理来Hook Android中Java层的方法,这里拿TelephoneManager的getDeviceId方法来做练手,先来看看如何使用TelephoneManager获取deviceId:

1
2
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
tm.getDeviceId()

查看更多

评论

Java并发-读写锁ReadWriteLock

读写锁是为了帮助解决多线程中读操作和写操作分离而设计的。想象一下,如果在系统中,读操作远远大于写操作,而每一次写操作进行时,别的写操作也要等待,这样对系统的性能会有很大的影响。ReadWriteLock是JDK5开始提供的读写分离锁。

查看更多

评论

Java并发-CyclicBarrier

CyclicBarrier是一种多线程并发控制实用工具。可以实现线程间的计数等待。CyclicBarrier翻译过来就是循环栅栏,可以用来阻止线程继续执行,要求线程在栅栏处等待。

查看更多

评论

LeetCode:70. Climbing Stairs

LeetCode:70. Climbing Stairs

1
2
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

查看更多

评论

LeetCode:377. Combination Sum IV

LeetCode:377. Combination Sum IV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.

Example:

nums = [1, 2, 3]
target = 4

The possible combination ways are:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)

Note that different sequences are counted as different combinations.

Therefore the output is 7.

查看更多

评论

LeetCode:385. Mini Parser

LeetCode:385. Mini Parser

1
2
3
4
5
6
7
8
9
Given a nested list of integers represented as a string, implement a parser to deserialize it.

Each element is either an integer, or a list -- whose elements may also be integers or other lists.

Note: You may assume that the string is well-formed:

String is non-empty.
String does not contain white spaces.
String contains only digits 0-9, [, - ,, ].

查看更多

评论