今天说些什么呢?

说说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. ES6学习笔记(三)字符串的扩展

    ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 1.字符的Unicode表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码 ...

  2. C# 之 继承

    继承     继承是OOP最重要的特性之中的一个.不论什么类都能够从还有一个类中继承,这就是说,这个类拥有它继承的类的全部成员. 在OOP中,被继承的类称为父类. 在C#中的对象仅能直接派生于一个基类 ...

  3. Http post提交和get提交

    public string  PostParameter(string url)         {  string message="";             GetOrde ...

  4. 目标决定人生——没有目标就失去一切 (没有目标的奋斗是浪费青春,比如交了钱却不去参加考试、让时间白白溜走。根据目标与定位来选择最合适的企业。人生要算总账)good

    没有目标就失去一切 刚毕业那会儿,幼稚得可笑,老跟同学打电话,明面上聊聊近况,暗地里比较.你要比我工资多一百块,心里特不平衡,凭什么呀,在学校那会儿公认的我比你强.你要带个头衔,而我啥也不是,普通员工 ...

  5. layer:web弹出层解决方案

    layer:web弹出层解决方案 一.总结 一句话总结:http://layer.layui.com/ 1.layer中弹出层tips的使用(代码)是怎样的? 使用还是比较简单方便的 //tips层- ...

  6. 5.cocos2d锚点

    创建一个层T1LayerAnchorPoint AppDelegate.cpp bool AppDelegate::applicationDidFinishLaunching() { // initi ...

  7. 项目: 更新(二) python 实现大概FTP的功能

    服务器利用 socketserver 模块 构造, 实现了 多进程. 客户端仍然利用的是底层的 socket模块. 只不过进行了更深度的 解耦, 新加或者删除 某些功能 更方便 在上一个版本的基础上, ...

  8. CentOS6.5下的Nagios安装配置详解(图文)

    最近因为,科研需要,接触上了Nagios,这里,我将安装笔记做个详解.为自己后续需要和博友们学习! VMware workstation 11 的下载 VMWare Workstation 11的安装 ...

  9. google dataflow model 论文

    http://www.chinacloud.cn/show.aspx?id=24446&cid=17

  10. 欧拉回路&欧拉路径学习笔记

    基础性质(用来判定): 1.无向图欧拉回路没有奇数点 (有向图所有点入度等于出度) 2.无向图欧拉路径只有两个奇数点 (有向图有一个顶点入度比出度大1,有一个顶点出度比入度大1,其他的全相等) 3.图 ...