Http

原创 2018年04月15日 17:53:32

1.HTTP简介

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

HTTP协议的主要特点

1、支持C/S(客户/服务器)模式。

2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5、无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

 

HTTP URL 的格式如下

http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用默认端口80;abs_path指定请求资源的URI(Web上任意的可用资源)。

HTTP有两种报文分别是请求报文和响应报文,让我们先来看看请求报文。

 

2.HTTP请求报文

先来看看请求报文的一般格式:

 

通常来说一个HTTP请求报文由请求行、请求报头、空行、和请求数据4个部分组成。

请求行

请求行由请求方法,URL字段和HTTP协议的版本组成,格式如下:

Method Request-URI HTTP-Version CRLF

其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

HTTP请求方法有8种,分别是GET、POST、DELETE、PUT、HEAD、TRACE、CONNECT 、OPTIONS。其中PUT、DELETE、POST、GET分别对应着增删改查,对于移动开发最常用的就是POST和GET了。

例如访问一个CSDN博客之星的地址请求行是:

GET http://blog.csdn.net/itachi85HTTP/1.1

请求报头

在请求行之后会有0个或者多个请求报头,每个请求报头都包含一个名字和一个值,它们之间用“:”分割。请求头部会以一个空行,发送回车符和换行符,通知服务器以下不会有请求头。关于请求报头,会在后面的消息报头一节做统一的解释。

请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合,与请求数据相关的最常用的请求头是Content-Type和Content-Length。

3.HTTP的响应报文

先来看看响应报文的一般格式:

 

HTTP的响应报文由状态行、消息报头、空行、响应正文组成。响应报头后面会讲到,响应正文是服务器返回的资源的内容,先来看看状态行。

状态行

1、状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

 

100~199:指示信息,表示请求已接收,继续处理

200~299:请求成功,表示请求已被成功接收、理解、接受

300~399:重定向,要完成请求必须进行更进一步的操作

400~499:客户端错误,请求有语法错误或请求无法实现

500~599:服务器端错误,服务器未能实现合法的请求

常见的状态码如下:

200 OK:客户端请求成功

400 Bad Request:客户端请求有语法错误,不能被服务器所理解

401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden:服务器收到请求,但是拒绝提供服务

500 Internal Server Error:服务器发生不可预期的错误

503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

例如访问我的CSDN博客地址响应的状态行是:

HTTP/1.1 200 OK

 

 

 

2、Java 线程池
Java
通过Executors提供四种线程池,分别为:
CachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。在线程空闲60秒后终止线程。
FixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
ScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
SingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

 

public static HttpURLConnectiongetHttpURLConnection(String url){

   HttpURLConnection mHttpURLConnection=null;

    try {

        URLmUrl=new URL(url);

       mHttpURLConnection=(HttpURLConnection)mUrl.openConnection();

        //设置链接超时时间

        mHttpURLConnection.setConnectTimeout(15000);

        //设置读取超时时间

       mHttpURLConnection.setReadTimeout(15000);

        //设置请求参数

       mHttpURLConnection.setRequestMethod("POST");

        //添加Header

       mHttpURLConnection.setRequestProperty("Connection","Keep-Alive");

        //接收输入流

       mHttpURLConnection.setDoInput(true);

        //传递参数时需要开启

       mHttpURLConnection.setDoOutput(true);

    } catch(IOException e) {

       e.printStackTrace();

    }

    returnmHttpURLConnection ;

}

 

 

 

1.    从请求处理开始分析

OkHttpClient.newCall(request)进行execute或者enqueue操作,当我们调用newCall时:

@Override public Call newCall(Request request) {

  return newRealCall(this, request);

}

实际返回的是一个RealCall类,我们调用enqueue异步请求网络实际上是调用了RealCall的enqueue方法:

void enqueue(Callback responseCallback, boolean forWebSocket) {

  synchronized (this) {

    if (executed) throw newIllegalStateException("Already Executed");

    executed = true;

  }

  client.dispatcher().enqueue(newAsyncCall(responseCallback, forWebSocket));

}

 

可以看到最终的请求是dispatcher来完成的。

 

 

HTTP

当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We...
  • tanglanting12
  • tanglanting12
  • 2013-10-26 19:24:25
  • 549

$http

$http是angularjs的一个核心服务!用于读取远程服务器的数据。 举例子     $http                                 ...
  • csdncsdn9876
  • csdncsdn9876
  • 2016-06-01 19:09:56
  • 192

http

1. HTTP简介          HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高...
  • xubaoguo
  • xubaoguo
  • 2013-09-13 18:17:57
  • 463

--http

http
  • qq_36376555
  • qq_36376555
  • 2017-11-14 10:07:18
  • 104

No Http

https://github.com/cmh-Android/NoHttp
  • csdndouniwan
  • csdndouniwan
  • 2016-10-19 17:31:34
  • 150

HTTP请求——HTTP方法

HTTP/1.1中可使用的方法: GET:获取资源(获取服务器的某个资源) GET方法用来请求访问已经被URI识别的资源。制定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那...
  • xiaos76
  • xiaos76
  • 2015-01-19 09:07:50
  • 153

HTTP学习笔记:HTTP报文

http://raytaylorlin.com/Tech/web/HTTP/HTTP-message/ 如果说HTTP是因特网的信使,那么HTTP报文就是运送的包裹。所有的HTTP程序都是通...
  • red9941
  • red9941
  • 2014-12-13 18:36:00
  • 236

http server http server

  • 2008年12月27日 16:27
  • 73KB
  • 下载

HTTP/http解析器

  • 2014年04月18日 09:36
  • 48KB
  • 下载

【HTTP】HTTP通信步骤

HTTP通信机制是在一次完整的HTTP 通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤 建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立...
  • wang_zun_ren
  • wang_zun_ren
  • 2010-05-04 11:08:00
  • 551
收藏助手
不良信息举报
您举报文章:Http
举报原因:
原因补充:

(最多只允许输入30个字)