今天说些什么呢?

说说Request吧!

Request是什么:

请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号

request这个对象不用事先宣告,就可以在JSP网页中使用,在转译为Servlet之后,它会转换为javax.servlet.http.HttpServletRequest型态的对象,HttpServletRequest对象是有关于客户端所发出的请求之对象,只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头、请求方法、请求参数、使用者IP等等信息。

标准的请求头:

Accept:浏览器(或者其他基于HTTP的客户端程序)可以接收的内容类型(Content-types),例如 Accept: text/plain

Accept-Charset:浏览器能识别的字符集,例如 Accept-Charset: utf-8

Accept-Encoding:浏览器可以处理的编码方式,注意这里的编码方式有别于字符集,这里的编码方式通常指gzip,deflate等。例如 Accept-Encoding: gzip, deflate

Accept-Language:浏览器接收的语言,其实也就是用户在什么语言地区,例如简体中文的就是 Accept-Language: zh-CN

Authorization:在HTTP中,服务器可以对一些资源进行认证保护,如果你要访问这些资源,就要提供用户名和密码,这个用户名和密码就是在Authorization头中附带的,格式是“username:password”字符串的base64编码,例如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==中,basic指使用basic认证方式, QWxhZGRpbjpvcGVuIHNlc2FtZQ==使用base64解码就是“Aladdin:open sesame”

Cache-Control:这个指令在request和response中都有,用来指示缓存系统(服务器上的,或者浏览器上的)应该怎样处理缓存,因为这个头域比较重要,特别是希望使用缓 存改善性能的时候,内容也较多,所以我想在下一篇博文中主要介绍一下。

Connection:告诉服务器这个user agent(通常就是浏览器)想要使用怎样的连接方式。值有keep-alive和close。http1.1默认是keep-alive。keep-alive就是浏览器和服务器 的通信连接会被持续保存,不会马上关闭,而close就会在response后马上关闭。但这里要注意一点,我们说HTTP是无状态的,跟这个是否keep-alive没有关系,不要认为keep-alive是对HTTP无状态的特性的改进。

Cookie:浏览器向服务器发送请求时发送cookie,或者服务器向浏览器附加cookie,就是将cookie附近在这里的。例如:Cookie:user=admin

Content-Length:一个请求的请求体的内存长度,单位为字节(byte)。请求体是指在HTTP头结束后,两个CR-LF字符组之后的内容,常见的有POST提交的表单数据,这个Content-Length并不包含请求行和HTTP头的数据长度。

Content-MD5:使用base64进行了编码的请求体的MD5校验和。例如:Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Type:请求体中的内容的mime类型。通常只会用在POST和PUT方法的请求中。例如:Content-Type: application/x-www-form-urlencoded

Date:发送请求时的GMT时间。例如:Date: Tue, 15 Nov 1994 08:12:31 GMT

From:发送这个请求的用户的email地址。例如:From: user@example.com

Host:被服务器的域名或IP地址,如果不是通用端口,还包含该端口号,例如:Host: www.some.com:182

If-Match:通常用在使用PUT方法对服务器资源进行更新的请求中,意思就是,询问服务器,现在正在请求的资源的tag和这个If-Match的tag相不相同,如果相同,则证明服务器上的这个资源还是旧的,现在可以被更新,如果不相同,则证明该资源被更新过,现在就不用再更新了(否则有可能覆盖掉其他人所做的更改)。

If-Modified-Since:询问服务器现在正在请求的资源在某个时间以来有没有被修改过,如果没有,服务器则返回304状态来告诉浏览器使用浏览器自己本地的缓存,如果有修改过,则返回200,并发送新的资源(当然如果资源不存在,则返回404。)

If-None-Match:和If-Modified-Since用意差不多,不过不是根据时间来确定,而是根据一个叫ETag的东西来确定。

If-Range:告诉服务器如果这个资源没有更改过(根据If-Range后面给出的Etag判断),就发送这个资源中在浏览器缺少了的某些部分给浏览器,如果该资源以及被修改过,则将整个资源重新发送一份给浏览器。

If-Unmodified-Since:询问服务器现在正在请求的资源在某个时刻以来是否没有被修改过。

Max-Forwards:限制请求信息在代理服务器或网关中向前传递的次数。

Pragma:好像只有一个值,就是:no-cache。Pragma:no-cache 与cache-control:no-cache相同,只不过cache-control:no-cache是http1.1专门指定的,而Pragma:no-cache可以在http1.0和1.1中使用

Proxy-Authorization:连接到某个代理时使用的身份认证信息,跟Authorization头差不多。例如:Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Range:在HTTP头中,"Range"字眼都表示“资源的byte形式数据的顺序排列,并且取其某一段数据”的意思。Range头就是表示请求资源的从某个数值到某个数值间的数据,例如:Range: bytes=500-999 就是表示请求资源从500到999byte的数据。数据的分段下载和多线程下载就是利用这个实现的。

Referer:指当前请求的URL是在什么地址引用的。例如在www.xxx.com/index.html页面中点击一个指向www.yyy.com的超链接,那么,这个www.yyy.com的请求中的Referer就是www.xxx.com/index.html。通常我们见到的图片防盗链就是用这个实现的。

Upgrade:请求服务器更新至另外一个协议,例如:Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

User-Agent:通常就是用户的浏览器相关信息。例如:User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0

Via:用来记录一个请求经过了哪些代理或网关才被送到目标服务器上。例如一个请求从浏览器出发(假设使用http/1.0),发送给名为 SomeProxy的内部代理,然后被转发至www.somenet.com的公共代理(使用http/1.1),最后被转发至目标服务器www.someweb.com,那么在someweb.com中收到的via 头应该是:via:1.0 someProxy 1.1 www.someweb.com(apache 1.1)

Warning:记录一些警告信息。

通用但非标准的HTTP头(通常,非标准的头域都是用“X-”开头,例如"x-powered-by"):

X-Requested-With:主要是用来识别ajax请求,很多javascript框架会发送这个头域(值为XMLHttpRequest)

DNT:DO NOT TRACK的缩写,要求服务器程序不要跟踪记录用户信息。DNT: 1 (开启DNT) DNT: 0 (关闭DNT)火狐,safari,IE9都支持这个头域,并且于2011年3月7日被提交至IETF组织实现标准化

X-Forwarded-For:记录一个请求从客户端出发到目标服务器过程中经历的代理,或者负载平衡设备的IP。

X-Forwarded-Proto:记录一个请求一个请求最初从浏览器发出时候,是使用什么协议。因为有可能当一个请求最初和反向代理通信时,是使用https,但反向代理和服务器通信时改变成http协议,这个时候,X-Forwarded-Proto的值应该是https

Front-End-Https:微软使用与其负载平衡的一个头域。

X-ATT-DeviceId:AT&A的产品中使用的头域,不过不是很清楚用途。

Java 的 Http 请求调用方法总结:

UrlConnection:

  1. <span style="font-size: 12px; font-family: SimSun, 宋体, tahoma, arial, helvetica, sans-serif;">import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. /**
  8. * Http Request Test
  9. *
  10. * @author ljw
  11. *
  12. */
  13. public class HttpTest {
  14. public static void main(String args[]) throws IOException {
  15. URL url = new URL("http://www.zuoche.com");
  16. // 请求配置,可根据实际情况采用灵活配置
  17. HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  18. connection.setReadTimeout(1000 * 10);
  19. connection.setConnectTimeout(1000 * 10);
  20. // 请求的方法 Get or Post
  21. connection.setRequestMethod("GET");
  22. connection.setDoOutput(true);
  23. connection.setDoInput(true);
  24. connection.setUseCaches(false);
  25. // 相关请求头
  26. connection.setRequestProperty("Charsert", "UTF-8");
  27. connection.setRequestProperty("Content-Type", "text/plain");
  28. // 写入请求实体
  29. StringBuilder params = new StringBuilder();
  30. // json 格式的键值对
  31. params.append("{");
  32. params.append("\"key\"").append(":\"").append("value");
  33. // "\"key\"" \标识强转"号,因为参数传递时需要使用""
  34. params.append("\"}");
  35. connection.getOutputStream().write(params.toString().getBytes());
  36. connection.getOutputStream().flush();
  37. connection.getOutputStream().close();
  38. // 进去连接
  39. connection.connect();
  40. // 响应
  41. try {
  42. InputStream in = connection.getInputStream();
  43. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
  44. StringBuffer temp = new StringBuffer();
  45. String line = bufferedReader.readLine();
  46. while (line != null) {
  47. temp.append(line);
  48. line = bufferedReader.readLine();
  49. }
  50. bufferedReader.close();
  51. System.out.println(temp);
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. } finally {
  55. if (connection != null)
  56. connection.disconnect();
  57. }
  58. }
  59. }
  60. </span>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; /**
  • Http Request Test
  • @author ljw
*/

public class HttpTest {
public static void main(String args[]) throws IOException {
URL url = new URL("http://www.zuoche.com");
// 请求配置,可根据实际情况采用灵活配置
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setReadTimeout(1000 * 10);
connection.setConnectTimeout(1000 * 10);
// 请求的方法 Get or Post
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
// 相关请求头
connection.setRequestProperty("Charsert", "UTF-8");
connection.setRequestProperty("Content-Type", "text/plain");
// 写入请求实体
StringBuilder params = new StringBuilder();
// json 格式的键值对
params.append("{");
params.append("\"key\"").append(":\"").append("value");
// "\"key\"" \标识强转"号,因为参数传递时需要使用""
params.append("\"}");
connection.getOutputStream().write(params.toString().getBytes());
connection.getOutputStream().flush();
connection.getOutputStream().close();
// 进去连接
connection.connect(); // 响应
try {
InputStream in = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
StringBuffer temp = new StringBuffer();
String line = bufferedReader.readLine();
while (line != null) {
temp.append(line);
line = bufferedReader.readLine();
}
bufferedReader.close();
System.out.println(temp);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null)
connection.disconnect();
}
}

}

 HttpClient:

  1. <span style="font-size: 14px; font-family: SimSun, 宋体, tahoma, arial, helvetica, sans-serif;">import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.concurrent.TimeUnit;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.NameValuePair;
  7. import org.apache.http.client.ClientProtocolException;
  8. import org.apache.http.client.HttpClient;
  9. import org.apache.http.client.entity.UrlEncodedFormEntity;
  10. import org.apache.http.client.methods.HttpGet;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.conn.ClientConnectionManager;
  13. import org.apache.http.impl.client.DefaultHttpClient;
  14. import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
  15. import org.apache.http.message.BasicNameValuePair;
  16. import org.apache.http.params.BasicHttpParams;
  17. import org.apache.http.params.HttpConnectionParams;
  18. import org.apache.http.params.HttpParams;
  19. import org.apache.http.protocol.HTTP;
  20. import org.apache.http.util.EntityUtils;
  21. /**
  22. * Http Request Test
  23. *
  24. * @author ljw
  25. *
  26. */
  27. public class HttpTest {
  28. public static void main(String args[]) {
  29. HttpTest test = new HttpTest();
  30. test.clientconnection("http://www.zuoche.com");
  31. }
  32. public String clientconnection(String url) {
  33. HttpClient client = getClient();
  34. // Get方式
  35. HttpGet get = new HttpGet(url);
  36. try {
  37. HttpResponse response = client.execute(get);
  38. String result = EntityUtils.toString(response.getEntity());
  39. System.out.println(result);
  40. return result;
  41. } catch (ClientProtocolException e) {
  42. e.printStackTrace();
  43. } catch (IOException e) {
  44. e.printStackTrace();
  45. }
  46. // Post方式
  47. HttpPost post = new HttpPost("http://www.zuoche.com");
  48. try {
  49. /* 添加请求参数到请求对象*/
  50. List<NameValuePair> params = new ArrayList<NameValuePair>();
  51. params.add(new BasicNameValuePair("key", "value"));
  52. post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
  53. HttpResponse response = client.execute(post);
  54. String result = EntityUtils.toString(response.getEntity());
  55. System.out.println(result);
  56. return result;
  57. } catch (Exception e) {
  58. e.printStackTrace();
  59. }
  60. return null;
  61. }
  62. static ClientConnectionManager _ClientConnectionManager = new ThreadSafeClientConnManager();
  63. static HttpParams _HttpParams;
  64. static {
  65. _HttpParams = new BasicHttpParams();
  66. HttpConnectionParams.setConnectionTimeout(_HttpParams, 10 * 1000);
  67. HttpConnectionParams.setSoTimeout(_HttpParams, 10 * 1000);
  68. _ClientConnectionManager = new ThreadSafeClientConnManager();
  69. }
  70. public HttpClient getClient() {
  71. _ClientConnectionManager.closeExpiredConnections();
  72. _ClientConnectionManager.closeIdleConnections(1, TimeUnit.HOURS);
  73. return new DefaultHttpClient(_ClientConnectionManager, _HttpParams);
  74. }
  75. }</span>
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit; import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.conn.ClientConnectionManager;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.params.BasicHttpParams;

import org.apache.http.params.HttpConnectionParams;

import org.apache.http.params.HttpParams;

import org.apache.http.protocol.HTTP;

import org.apache.http.util.EntityUtils; /**
  • Http Request Test
  • @author ljw
*/

public class HttpTest {
public static void main(String args[]) {
HttpTest test = new HttpTest();
test.clientconnection("http://www.zuoche.com");
} public String clientconnection(String url) { HttpClient client = getClient();
// Get方式
HttpGet get = new HttpGet(url);
try {
HttpResponse response = client.execute(get);
String result = EntityUtils.toString(response.getEntity());
System.out.println(result);
return result;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// Post方式
HttpPost post = new HttpPost("http://www.zuoche.com");
try {
/* 添加请求参数到请求对象*/
List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
params.add(new BasicNameValuePair("key", "value"));
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse response = client.execute(post);
String result = EntityUtils.toString(response.getEntity());
System.out.println(result);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} static ClientConnectionManager _ClientConnectionManager = new ThreadSafeClientConnManager();
static HttpParams _HttpParams; static {
_HttpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(_HttpParams, 10 * 1000);
HttpConnectionParams.setSoTimeout(_HttpParams, 10 * 1000);
_ClientConnectionManager = new ThreadSafeClientConnManager();
} public HttpClient getClient() {
_ClientConnectionManager.closeExpiredConnections();
_ClientConnectionManager.closeIdleConnections(1, TimeUnit.HOURS);
return new DefaultHttpClient(_ClientConnectionManager, _HttpParams);
}

}

 相关依赖的jar包见附件: httpclient-4.1.3.jar ; httpcore-4.1.4.jar

Request、Response 之 Http 请求的更多相关文章

  1. javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

    先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...

  2. tomcat启动(Ⅷ)--请求最终目的地 getContainer().getPipeline().getFirst().invoke(request, response)

    当tomcat的Conector保存着StandardService实例,而StandardService保存着Container的实例 当Http11NioProcessor.process()方法 ...

  3. 【JavaWeb】请求和响应Request&Response

    请求 请求对象 关于请求 顾名思义,意思就是请求一个"对象" 请求不到的,别想了 请求,就是使用者希望从服务器端索取一些资源,向服务器发出询问.在B/S架构中,就是客户浏览器向服务 ...

  4. request response

    request 和 response 这两个对象是出现在service方法中.service方法是用来接收请求处理请求,完成响应的.     接受请求指的就是request对象     完成响应指的就 ...

  5. request \response 总结

    request&response request 1.获得信息的方法     1> 获得请求首行信息的方法         *getMethod         *getContextP ...

  6. 09 Request/Response

         Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象      request和response对象即然代表 ...

  7. 过滤器中的chain.doFilter(request,response)

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...

  8. 对chain.doFilter(request,response)的理解

    他的作用是将请求转发给过滤器链上下一个对象.这里的“下”指的是哪里 ? 指的是下一个filter,如果没有filter那就是你请求的资源. 一般filter都是一个链,web.xml 里面配置了几个就 ...

  9. chain.doFilter(request,response)含义

    过滤器的生命周期一般都要经过下面三个阶段: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Config 对象的引用.我们的过滤器实际上并 ...

随机推荐

  1. window.location.href和window.top.location.href的区别

    if (window.location.href == window.top.location.href) {     window.top.location.href = "/index. ...

  2. 51nod 更难的矩阵取数问题 + 滚动数组优化

    这里要求要走到终点再走回来,可以转化为两个人走. 那么我们可以先粗暴的设f[x1][y1][x2][y2]为第一个人走到(x1, y1), 第二个人走到(x2, y2)的最大价值. 那么这样空间会很大 ...

  3. 紫书 例题 9-14 UVa 1218 (树形dp)

    这道题有个初始值设成1e9, 然后这个值是要加很多次的,然后就会溢出变成负数, 然后就一直WA, 找这个bug找了一个小时--以后不能随便这样设那么大, 要考虑会不会加很多次然后溢出. 讲一下思路. ...

  4. 洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two

    https://www.luogu.org/problem/show?pid=1518 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为( ...

  5. sparkR处理Gb级数据集

    spark集群搭建及介绍:敬请关注 数据集:http://pan.baidu.com/s/1sjYN7lF 总结:使用sparkR进行数据分析建模相比R大致有3-5倍的提升 查看原始数据集:通过iri ...

  6. 你如何理解 HTML5 的 section?会在什么场景使用?为什么这些场景使用 section 而不是 div?

    section元素表示文档或应用的一个部分.所谓“部分”,这里是指按照主题分组的内容区域,通常会带有标题.[也就是每个section对应不同的主题.注意是内容本身的主题,而不是其他人为设定的划分标准. ...

  7. 79.QT解决迷宫问题(面向过程与面向对象)

    面向过程: 创建一个类继承dialog,mydialog,添加两个变量 #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog>&g ...

  8. 兼容MIUI5和MIUI6的开启悬浮窗设置界面

    前一段时间项目中需要对MIUI的悬浮窗开启设置界面进行了引导和跳转,MIUI6中又改变了开启悬浮窗设置的位置,在苦苦寻觅之后,找到了解决的方法,贴出来以方便大家参考和使用. @Override pub ...

  9. webclient类学习

    (HttpWebRequest模拟请求登录):当一些硬件设备接口 或需要调用其他地方的接口时,模拟请求登录获取接口的数据就很有必要. webclient类:只想从特定的URI请求文件,则使用WebCl ...

  10. 【JEECG技术博文】JEECG 简单实例解说权限控制

    JEECG简单实例解说权限控制 请大家点击这里为我们投票.2015博客之星.很多其他分享敬请期待 博文地址:http://blog.itpub.net/30066956/viewspace-18687 ...