日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HTTP 方法

發(fā)布時(shí)間:2024/9/30 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP 方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HTTP協(xié)議 所有的方法

方法說明支持的HTTP協(xié)議版本
GET獲得資源1.0、 1.1
POST傳輸實(shí)體主體1.0、 1.1
PUT傳輸文件1.0、 1.1
DELETE刪除文件1.0、 1.1
HEAD獲得HTTP協(xié)議首部1.0、 1.1
OPTIONS詢問HTTP服務(wù)器支持的HTTP協(xié)議的方法1.1
TRACE追蹤路徑1.1
CONNECT要求用隧道協(xié)議連接代理1.1
LINK建立和資源之間的關(guān)系1.0
UNLINK斷開連接關(guān)系1.0

下面我們通過tomcat所支持的HTTP方法來詳解每個(gè)方法。
tomcat默認(rèn)支持 GET、POST、HEAD、OPTIONS方法,而不支持PUT、DELETE、TRACE方法。
下面我們配置tomcat,讓tomcat支持PUT、DELETE、TRACE方法。

配置Tomcat

配置tomcat支持 PUT、DELETE方法

打開tomcat/conf/web.xml配置文件

從說明中可以看出,如果要支持PUT、DELETE方法,需要將readonly設(shè)置為true。

在DefaultServlet的初始化參數(shù)中配置readonly=true。

配置tomcat支持TRACE方法

打開tomcat/conf/server.xml配置文件

在連接器中添加 allowTrace=true, 使tomcat支持TRACE方法。

Servlet 實(shí)現(xiàn) Http 方法

import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class ServletTest extends HttpServlet {private static final long serialVersionUID = 1L;public ServletTest() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("<html><body>Http Method : GET</body></html>");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("<html><body>Http Method : POST<br>").append("name : ").append(request.getParameter("name")).append("</body></html>");}@Overrideprotected void doHead(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}@Overrideprotected void doPut(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("<html><body>Http Method : PUT</body></html>");}@Overrideprotected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().append("<html><body>Http Method : DELETE</body></html>");}@Overrideprotected void doTrace(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.getWriter().append("TANCE "+request.getRequestURI()+" HTTP/1.1\r\n");Enumeration<String> enumer = request.getHeaderNames();while (enumer.hasMoreElements()) {String name = enumer.nextElement();response.getWriter().append(name+":"+request.getHeader(name)+"\r\n");}} }

通過下面代碼,使用不同的Method進(jìn)行請(qǐng)求http服務(wù)。

import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import java.util.Map;public class Options {public static void main(String[] args) {try {args = new String[]{"http://localhost:9999/webDemo/test"};URL u = new URL(args[0]);HttpURLConnection http = (HttpURLConnection) u.openConnection();//GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACEhttp.setRequestMethod("GET");//POST方法需要使用OutputStream提交參數(shù) // http.setDoOutput(true); // Writer w = new OutputStreamWriter(http.getOutputStream()); // w.write("name=jijs"); // w.flush(); // w.close();Map<String, List<String>> headers = http.getHeaderFields();for (Map.Entry<String, List<String>> header : headers.entrySet()) {if(header.getKey()!=null){System.out.println(header.getKey() + ": " + join(header.getValue()));}else{System.out.println(join(header.getValue()));}}} catch (MalformedURLException ex) {System.err.println(args[0] + " is not a parseable URL");} catch (IOException ex) {System.err.println(ex);}System.out.println();}private static String join(List<String> list) {StringBuilder builder = new StringBuilder();Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {builder.append(iterator.next());if (iterator.hasNext())builder.append(", ");}return builder.toString();} }

HTTP 協(xié)議格式

Http協(xié)議格式分為客戶端請(qǐng)求格式和服務(wù)端響應(yīng)格式。
客戶端請(qǐng)求:
1. 請(qǐng)求行 (Http方法 空格 請(qǐng)求路徑 空格 協(xié)議版本 \r\n)
2. 請(qǐng)求首部 (key : value 可以多個(gè)以回車換行結(jié)束)
3. 請(qǐng)求實(shí)體 (與請(qǐng)求首部中間有一空行, 請(qǐng)求的實(shí)體內(nèi)容)

服務(wù)器端響應(yīng)
1. 響應(yīng)行 (協(xié)議版本 空格 狀態(tài)碼 空格 狀態(tài)碼說明)
2. 響應(yīng)首部 (key : value 可以多個(gè)以回車換行結(jié)束)
3. 響應(yīng)實(shí)體 (與請(qǐng)求首部中間有一空行,響應(yīng)的內(nèi)容)

通過抓包分析7種方法

通過上面代碼示例,請(qǐng)求http的7種方法,然后使用抓包工具查看7中HTTP請(qǐng)求,每種HTTP協(xié)議發(fā)送的內(nèi)容如下:

GET方法

GET方法用來請(qǐng)求訪問已被URI識(shí)別的資源。指定的資源經(jīng)服務(wù)器解析后返回的內(nèi)容。

請(qǐng)求信息:

GET /webDemo/test HTTP/1.1 User-Agent: Java/1.8.0_77 Host: localhost:9999 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

響應(yīng)信息:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 43 Date: Thu, 03 Aug 2017 10:02:00 GMT<html><body>Http Method : GET</body></html>

POST方法

POST方法用來傳輸實(shí)體的主體。提交表單的信息存放在請(qǐng)求實(shí)體中。例如下面的例子name=jijs存放在請(qǐng)求實(shí)體中。
請(qǐng)求信息:

POST /webDemo/test HTTP/1.1 User-Agent: Java/1.8.0_77 Host: localhost:9999 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Content-type: application/x-www-form-urlencoded Content-Length: 9name=jijs

響應(yīng)信息:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 59 Date: Thu, 03 Aug 2017 10:50:31 GMT<html><body>Http Method : POST<br>name : jijs</body></html>

PUT方法

PUT 方法用來傳輸文件的。就想FTP協(xié)議的文件上傳一樣,要求在請(qǐng)求報(bào)文的主體中包含文件內(nèi)容,然后保存到請(qǐng)求URL指定的位置。
HTTP1.1的PUT方法自身不帶驗(yàn)證機(jī)制,任何人都可能上傳文件,存在安全問題,因此一般的Web網(wǎng)站都不使用該方法。如果使用REST,一般就會(huì)使用該方法。

請(qǐng)求信息:

PUT /webDemo/test HTTP/1.1 User-Agent: Java/1.8.0_77 Host: localhost:9999 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

響應(yīng)信息:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 43 Date: Thu, 03 Aug 2017 10:51:24 GMT<html><body>Http Method : PUT</body></html>

DELETE方法

DELETE 方法用來刪除一個(gè)文檔,與PUT方法相反。DELETE方法也存在PUT存在問題,沒有自帶安全機(jī)制,如果采用REST,一般會(huì)使用該方法。

請(qǐng)求信息:

DELETE /webDemo/test HTTP/1.1 User-Agent: Java/1.8.0_77 Host: localhost:9999 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

響應(yīng)信息:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 46 Date: Thu, 03 Aug 2017 14:56:30 GMT<html><body>Http Method : DELETE</body></html>

OPTIONS方法

OPTIONS 方法用來詢問HTTP服務(wù)器支持那些方法。

請(qǐng)求信息:

OPTIONS /webDemo/test HTTP/1.1 User-Agent: Java/1.8.0_77 Host: localhost:9999 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

響應(yīng)信息:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS Content-Length: 0 Date: Thu, 03 Aug 2017 09:07:18 GMT

TRACE方法

TRACE方法是讓W(xué)eb服務(wù)器端將之前的請(qǐng)求通信(服務(wù)器接收到的請(qǐng)求頭)返回給客戶端的方法。
通過TRACE方法,我們就可以知道用戶訪問到服務(wù)器之間是否有人(代理服務(wù)器 等)修改過HTTP請(qǐng)求頭信息。
請(qǐng)求信息:

TRACE /webDemo/test HTTP/1.1 User-Agent: Java/1.8.0_77 Host: localhost:9999 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

響應(yīng)信息:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 161 Date: Thu, 03 Aug 2017 10:38:43 GMTTANCE /webDemo/test HTTP/1.1 user-agent:Java/1.8.0_77 host:localhost:9999 accept:text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 connection:keep-alive

本人簡(jiǎn)書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點(diǎn)擊這里快速進(jìn)入簡(jiǎn)書

GIT地址:http://git.oschina.net/brucekankan/
點(diǎn)擊這里快速進(jìn)入GIT

總結(jié)

以上是生活随笔為你收集整理的HTTP 方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。