1、http请求的基本过程是什么?
http请求的基本过程是连接、请求、应答、关闭连接。
2、如何给http服务器发送post请求
1、HTTP请求概述
在前面有一篇文章对HTTP协议有详细的描述,这里就不再过多的做说明,只是简单的作为这篇文章的引子。
HTTP协议又被称为超文本传输协议,它的的设计目的是保证客户机与服务器之间的通信。HTTP 的工作方式是客户端与服务器之间的请求-应答协议。在客户端和服务器之间进行请求-响应时,有两个最基本的请求方式:GET 和 POST。
其中,GET请求表示从指定的资源请求数据,POST请求表示向指定的资源提交要被处理的数据。
2、HTTP请求格式
在HTTP请求中,首先是请求行,注意这里的请求行一定要放在最前面;其次,是请求头,英文表示为header;然后会空一行,紧接着就可以是请求的具体内容了,一般称之为请求体,request-body。给出一个图示如下:
3、GET请求与POST请求对比
GET请求与POST请求有一些异同点,主要有以下几点问题:
(1)、GET请求和POST请求都是客户端与服务器之间交互,请求--应答模式的协议
(2)、GET请求是通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;而POST请求是放在请求头中的,我们是无法直接看到的;
(3)、GET提交有数据大小的限制,一般是不超过1024个字节,而这种说法也不完全准确,HTTP协议并没有设定URL字节长度的上限,而是浏
览器做了些处理,所以长度依据浏览器的不同有所不同;POST请求在HTTP协议中也没有做说明,一般来说是没有设置限制的,但是实际上浏览器也有默认
值。总体来说,少量的数据使用GET,大量的数据使用POST。
(4)、GET请求因为数据参数是暴露在URL中的,所以安全性比较低,比如密码是不能暴露的,就不能使用GET请求;POST请求中,请求参数信息是放在请求头的,所以安全性较高,可以使用。在实际中,涉及到登录操作的时候,尽量使用HTTPS请求,安全性更好。
下面给出一副图示,说明一下HTTP中GET与POST请求的差异:
4、使用步骤:
在Android中使用HTTP请求,主要步骤如下:
(1)、实例化一个HttpGet(或HttpPost)对象,将请求的URL地址通过构造方法传给HttpGet(或HttpPost)对象;
(2)、使用DefaultHttpClient类的execute方法发送GET或POST 请求,并返回HttpResponse对象;
(3)、通过HttpResponse接口的getEntity方法返回响应信息。
5、实例代码
给出一个在实际应用中的一个POST请求的代码片段:
[java] view plain copy print?
params = new LinkedList();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二个参数"));
try {
HttpPost post = new HttpPost(baseUrl);
post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //将参数填入POST Entity中
HttpResponse response = httpClient.execute(post); //执行POST方法
resCode = response.getStatusLine().getStatusCode()); //获取响应码
result = EntityUtils.toString(response.getEntity(), "utf-8")); //获取响应内容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6、HTTP请求状态码意义
HTTP请求中,主要有这样几个类型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客户端请求错误,5XX:表示服务器错误。常见的几个HTTP请求状态码意义如下:
200 OK: 找到了该资源,并且一切正常。
304 NOT MODIFIED: 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
401 UNAUTHORIZED: 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
403 FORBIDDEN: 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
404 NOT FOUND: 在指定的位置不存在所申请的资源。
505 NOT SUPPORTED:服务器不支持请求中所指明的HTTP版本
3、HTTP 的请求处理过程是什么?
那个叫名称解析过程:
当客户端向DNS服务器发送请求,要求解析地址地址www.baidu.com时,将执行如下步骤:
1.为了查询www.baidu.com的IP地址,客户端发出请求并向所设置的DNS服务器发送递归查询。
2.若所设DNS服务器无法在其数据库中找到www.baidu.com的匹配项,则向根目录域的权威DNS发送迭代查询。
3.若根目录域权威DNS服务器也找不到www.baidu.com的匹配项,则以com域的权威DNS服务器的IP地址返回给1中的服务器。
4.1中的DNS服务器收到根目录域返回信息后,向com域的权威DNS服务器发送迭代查询。
5.若com域的权威DNS服务器也找不到www.baidu.com的匹配项,则以web.com域的权威DNS服务器的IP地址返回给1中的服务器。
6.1中的DNS服务器收到com域返回信息后,向web.com域的权威DNS服务器发送迭代查询。
7.若web.com域的权威DNS服务器在其数据库中找到了www.baidu.com的匹配项,则以www.baidu.com的IP地址返回给1中的服务器。
8.1中的DNS服务器收到web.com域返回信息后,将www.baidu.com的IP地址作为响应发送给客户端。
4、如何对 HTTP 请求中的字符编码进行正确的处理
1. 什么是URL编码。
URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。
2. URL编码规则。
每对name/value由&分开,每对来自表单的name/value用=分开。如果用户没有输入值的那个name依旧会出现不过就是没有值。
URL编码是在字符ASCII码的十六进制数的前面加上%。例如\(她的十六进制数表示为5c)的URL编码就是%5c。
3. 简单介绍乱码和http请求
其实做web开发乱码问题是经常出现的,有了上面编码的基础之后下面来看看乱码。
1) 乱码问题是web开发过程中经常遇到的问题,主要原因就是URL中使用了非ASCII码造成服务器后台程序解析出现乱码的问题。
2) URL中最容易出现中文的地方就是在QueryString的参数值还有Servletpath中。
3) 简单用一个图来说明一下http请求的流程:
第一步:浏览器把URL经过编码送给服务器;
第二步:服务器把这些请求解码处理完毕之后将显示的内容进行编码发送给客户端浏览器;
第三步:浏览器按照指定的编码显示网页
4) 详细剖析GET提交如何编码以及服务器如何解码以及乱码解决方案
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。
当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。
这里详细说一下encode的过程中容易出现的问题,在这个过程中我们要明白需要URL encode的字符一般都是非ASCII码字符,所以我们就能知道出现乱码主要是URL中附加了中文或特殊字符做成的,另一个要知道URL encode到底是以什么样的编码方式对字符进行编码的,其实这个编码方式是由浏览器决定的,不同的浏览器和同一浏览器的不同设置影响了URL的编码,所以为了避免我们不需要的编码,我们可以通过java代码或javaspcript代码统一进行控制。
完成了URL encode之后URL就成了ASCII范围内的字符了,然后就以iso-8859-1的编码方式转换为二进制随着请求头一起发送出去。
到了服务器之后,首先服务器会先用iso-8859-1进行解码,服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中卫或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过request.setCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder显然不行。
这里的解决方式有两种,
一种:是通过String类的getBytes方法进行编码转换,具体java代码是:
new String(request.getParameter(“name”).getBytes(“iso-8859-1”),“客户端编码方式”)
第二种:在服务器xml代码中改配置信息:
<Connector port="8080"protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000"
redirectPort="8443"URIEncoding="客户端编码"/>
5) 详细剖析POST提交如何编码以及服务器如何解码以及乱码解决方案
对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。
在服务器端的程序中我们可以通过
Request.setCharacterEncoding()设置编码,然后通过
request.getParameter获得正确的数据。
这里出现乱码可以通过Request.setCharacterEncoding()直接解决。
5、java 使用HttpURLConnection请求服务器,如果发送请求时没有问题,但返回结果时网络断了,如何处理?
.setConnectTimeout() 指的是与请求网址的服务器建立连接的超时时间。
setReadTimeout() 指的是建立连接后如果指定时间内内服务器没有返回数据容的后超时。
503是错误码,能返回就说明服务器返回了response。超时指的是你指定的时间没有收到服务器的response。
不管哪种超时都不有状态码返回。因为返回是在response响应中的,而就是在设定的时间内没有收到响应,才会超时。如果出现超时的话会抛出一个异常。你可以catch超时异常,然后根据需要处理就行了。
6、HTTP请求方法有哪些
http请求方法的话,有很多,比如get、post,这两个用的是最多的,还有很多比如patch、delete、put等等,如果你要做restful接口的可能需要使用。
7、http请求到a服务器,可以在请求中添加一些数据并转发到b服务器吗
Web service一般就是用SOAP协议通过HTTP来调用它,其实他就是一个WSDL文档,客户都可以阅读WSDL文档来用这个Web service。客户根据WSDL描述文档,会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。个人以为就把webservice当成是Http这种请求和响应方式就可以处理大部分问题了。 SOAP 使用 HTTP 传送 XML,尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 SOAP。为了更好的理解SOAP,HTTP,XML如何工作的,不妨先考虑一下COM/DCOM的运行机制,DCOM处理网络协议的低层次的细节问题,如PROXY/STUB间的通讯,生命周期的管理,对象的标识。在客户端与服务器端进行交互的时候,DCOM采用NDR(Network Data Representation)作为数据表示,它是低层次的与平台无关的数据表现形式。
8、如何实现HTTP请求
参数:url:目标地址data:要post的数据比如a=1&b=2publicstringGetPostString(stringurl,stringdata){try{byte[]postBytes=Encoding.GetEncoding("utf-8").GetBytes(data);HttpWebRequestmyRequest=(HttpWebRequest)WebRequest.Create(url);myRequest.Method="POST";myRequest.ContentType="text/html";myRequest.ContentLength=postBytes.Length;myRequest.Proxy=null;StreamnewStream=myRequest.GetRequestStream();newStream.Write(postBytes,0,postBytes.Length);newStream.Close();//=(HttpWebResponse)myRequest.GetResponse();using(StreamReaderreader=newStreamReader(myResponse.GetResponseStream(),Encoding.GetEncoding("utf-8"))){stringcontent=reader.ReadToEnd();returncontent;}}catch(System.Exceptionex){returnex.Message;}}
9、使用Java开发一个HTTP服务器,能够处理POST,GET,PUT,DELETE请求。
使用Java开发一个HTTP服务器,能够处理POST,GET,PUT,DELETE请求。
1. 监听端口可以配置;
2. 可以配置的一个工作目录;
3. GET请求可以获得相对于该工作目录的静态文件的内容,内容格式限定为html,css,js,json,xml,txt,jpg,gif,png,ico;
a) 例如 GET /f/test1.html返回工作目录下f文件夹下test1.html内容;
b) 在GET请求的的应答中尽可能多的在HTTP头中返回些能获得的到的标准的头信息;
4. POST请求可以在工作目录中创建请求路径对应的文件,文件内容为POST请求的内容;
a) 例如 POST /f/test2.html,在工作目录下f文件夹下创建test2.html文件,并将POST内容作为test2.html的内容。
5. PUT请求可以替换对应路径的文件,修改的内容为PUT请求的内容。注意与POST不同。
a) 例如 PUT /f/test2.html,在工作目录下f文件夹替换test2.html文件的内容,并将PUT内容作为test2.html的内容。
6. DELET请求可以删除对应路径的文件。
a) 例如 PUT /f/test2.html,在工作目录下f文件夹删除test2.html文件。
7. POST,PUT,DELETE成功后返回200,出现找不到文件的情况返回404错误,出现读写文件错误返回500错误。
8. 特别的处理~路径下的GET请求,其包含2个参数,一个是类名,一个是方法名,这些方法都是些无参数并且以字符串为返回值的方法,GET请求应返回这些方法的返回值。
a) 例如 GET /~?class=com.test.Test&method=getTIme,则调用com.test.Test类中String getTIme()方法,将返回值作为GET请求的返回;
b) 若找不到类或方法返回404错误;
c) 若出错返回500错误;
9. 特别的处理$路径下的GET请求,能够为浏览器添加cookie,key为sid,值为UUID的随机字符串。
注意:不是在tomcat之类servlet容器上开发,而是要开发个类似servlet容器的东西。
10、http请求返回200,对方服务器一定是收到请求了吗
200响应码表示服务器已经正确的处理了请求,所以返回200表示服务器一定是收到了请求。如果没收到请求服务器是不会返回任何状态码的,包括表示错误的状态码也不会有。