http协议

http访问的几个步骤

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 

1. 建立TCP连接

在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

2. Web浏览器向Web服务器发送请求命令 

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。

3. Web浏览器发送请求头信息 

浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 

4. Web服务器应答 

客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

5. Web服务器发送应答头信息 

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 

6. Web服务器向浏览器发送数据 

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

7. Web服务器关闭TCP连接 

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:

Connection:keep-alive 

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

TCP/IP协议相关概念

https://blog.csdn.net/changyourmind/article/details/53127100

相关概念:

一、简介:

  1. Apache开源项目:
  2. 基于HTTP协议提供强大的支持,构建HTTP客户端应用程序
  3. 执行HTTP协议时,包含了HTTP请求和响应不同状态,可以对关键参数设置和获取

二、HTTP协议

  1. HTTP请求包含三部分,分别由请求行(请求方法)、请求头(消息报文)、请求正文组成。
  2. HTTP请求详解:

     

  1. HTTP 响应详解

三、URI URL和URN区别:

  1. URI(Uniform Resource Identifier) 统一资源标识符
  2. URL(Uniform Resource Locator)  统一资源定位符
  3. URN(Uniform Resource Name)    统一资源名称
  4. 整体关系:

          

  1. URL是URI的一个子集,告诉我们访问网络位置的方式,
  1. URN是URI的子集,包括名字(给定的命名空间内),但不包括访问方式

总结:

四、调用步骤:

1. 使用帮助类HttpClients创建CloseableHttpClient对象.

CloseableHttpClient httpClient= HttpClients.createDefault();

2. 基于要发送的HTTP请求类型创建HttpGet或者HttpPost实例.

HttpPost httpPost=new HttpPost(SERVER_URL);

3. 使用addHeader方法添加请求头部,诸如User-Agent, Accept-Encoding等参数.

httpPost.addHeader("AppKey", APP_KEY);

4. 对于POST请求,创建NameValuePair列表,并添加所有的表单参数.然后把它填充进HttpPost实体.

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

nameValuePairs.add(new BasicNameValuePair("mobile", phone));

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));

5. 通过执行此HttpGet或者HttpPost请求获取CloseableHttpResponse实例

CloseableHttpResponse response = httpClient.execute(httpPost);

6. 从此CloseableHttpResponse实例中获取状态码,错误信息,以及响应页面等等.

String responseEntity = EntityUtils.toString(response.getEntity(),"utf-8");

7. 最后关闭HttpClient资源.

五、调用细节:

  1. HttpClient提供了URIBuilder类来简化和修改请求URI

     可以有如下写法:

  1. 在Response中几个关键参数获取:
  1. 获取给定类型的所有头部信息最有效的方式是使用HeaderIterator接口:
  1. 为了保证系统资源被正确地释放,我们要么管理HTTP实体流,要么关闭http响应。
  2. 关闭HTTP实体内容流和关闭HTTP响应的区别,前者通过消耗掉HTTP实体内容来保持相关HTTP连接,然而后者会立即关闭,丢弃HTTP连接。
  3. HttpClient 推荐使用 HttpEntity 的 getContent() 方法或者 HttpEntity 的 writeTo(OutputStream) 方法读取Http实体内容。
  4. EntityUtils 提供的方法可以以字符串或者字节数组的形式读取 Http 实体,但是一般不建议,确保相应的实体长度不大。
  5. 希望把 Http 实体内容缓存在内存或者磁盘上,最简单方法就是把 Http Entity 转化为 BufferedHttpEntity,
  1. HttpClient 提供了一些类,这些类可以通过http连接高效地输出Http实体内容。
  2. HttpClient 提供的这几个类涵盖的常见的数据类型,如String,byte 数组,输入流,和文件类型:StringEntity,ByteArrayEntity,InputStreamEntity,FileEntity。
  1. 请注意由于 InputStreamEntity 只能从下层的数据流中读取一次,所以它是不能重复的。推荐,通过继承 HttpEntity 这个自包含的类来自定义HttpEntity 类,而不是直接使用 InputStreamEntity 这个类。FileEntity 就是一个很好的起点(FileEntity 就是继承的 HttpEntity)。
  2. 模拟 HTML 表单提交
  1. 设置传输编码方式(1.0不支持)
  1. 处理http响应的方法就是使用ResponseHandler接口,这个接口中有handleResponse(HttpResponse response)方法。使用这个方法,用户完全不用关心http连接管理器。当使用ResponseHandler时,HttpClient会自动地将Http连接释放给Http管理器,即使http请求失败了或者抛出了异常。
原文地址:https://www.cnblogs.com/ycq-qiang/p/11150802.html