T t
http リクエスト メッセージ:
HTTP リクエスト メッセージは、リクエスト バンク、リクエスト ヘッド、エア ライン、リクエスト データ
1 の 3 つのフィールドで構成されます。フィールド、URL フィールド、および HTTP プロトコル バージョン フィールド。これらはスペースで区切られます。例: GET /data/info.html HTTP/1.1 メソッド フィールドは、一般的な GET/POST など、HTTP で使用されるリクエスト メソッドです
HTTP プロトコルのバージョンは 2 つあります: HTTP1.0/HTTP1.1これは次のように区別できます。
HTTP1.0 は接続ごとに接続を確立し、一度に 1 つのリクエストと応答のみを送信できます。HTTP1.0 には Host フィールドがありません。 .1 は同じ接続で複数のリクエストを送信でき、複数のリクエストを重複して同時に実行できます。HTTP1.1 には Host フィールドが必要です。
2. リクエスト ヘッダー
リクエスト ヘッダーはフィールド名です: 値の形式表示
は HTTP リクエストの一般的なリクエスト ヘッダー フィールドに使用されます
Accept: サポートされるデータ型 Accept-Charset: クライアントが使用するエンコード形式をサーバーに伝えるために使用されます Accept-Encoding: クライアントがサポートするデータ圧縮形式をサーバーに伝えるために使用されます
Accept-Language: クライアントの言語環境Host:クライアントは、このヘッダーを使用して、アクセスしたいホスト名をサーバーに伝えます。クライアントは、このヘッダーを使用して、サーバーにリソースのキャッシュ時間を伝えます。サーバーの (アンチホットリンク) ユーザーエージェント: クライアントはこのヘッダーを通じてサーバーにクライアントのソフトウェア環境を伝えます Cookie: クライアントはこのヘッダーを通じてサーバーにデータを送信できます
接続: 切断するかどうかこのリクエストを処理した後、または接続を維持し続けます
Date: 現在の時間値
例えば、Baidu の GET 特定の画像 - 対応するリクエストヘッダーを通して
3. 空行
空行 式は非常に直接的で、単なる空行です
その機能は、空行を通してリクエストヘッダーがここで終わることをサーバーに伝えることです
4
.リクエストデータ
メソッドフィールドの場合が GET の場合、この項目は空であり、データはありません
メソッドフィールドが POST の場合、通常、送信されるデータはここに配置されます
たとえば、POST メソッドを使用してフォームを送信したい場合は、名前フィールドのデータは "xiaoming"、年齢 フィールドは 17 です ここでのリクエスト データは name=xiaoming&age=17 を使用して各フィールドを接続します
一般に、HTTP リクエスト メッセージは次のようになりますこの図では-->
わずかに完成した HTTP リクエスト メッセージ:
上記は POST メソッドです。通常、リクエスト ラインの URL セグメントにはパラメータがありません。
Connect GET メソッドを見てみましょう。パラメータはリクエスト行 URL に直接配置され、メッセージ本文は空です
を介して生成されると仮定します。 getメソッド:
rrree
対応するリクエストメッセージ: <a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=</a>
HTTPレスポンスメッセージ:
, HTTP 応答メッセージも、応答行、応答ヘッダーの 3 つの部分で構成されます。 、応答本文
1. 応答行
応答行は通常、プロトコル バージョン、ステータス コード、およびその説明で構成されます例: HTTP/1.1 200 OK
プロトコル バージョン HTTP/1.1 または HTTP/1.0200 はステータス コード、OK はその説明です
-----------------------一般的なステータス コード ------- --------
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-FxlRugatx63JLv7CWMD6UB_O_r
w3school の説明からも引用
100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。 200~299:表示成功接收请求并已完成整个处理过程。常用200 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存) 400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够) 500~599:服务器端出现错误,常用500
より詳細で包括的なステータス コード:
【1xx: 信息】100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。101 Switching Protocols 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。【2xx: 成功】200 OK 请求成功(其后是对GET和POST请求的应答文档。)201 Created 请求被创建完成,同时新的资源被创建。202 Accepted 供处理的请求已被接受,但是处理未完成。203 Non-authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。204 No Content 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。205 Reset Content 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它。【3xx: 重定向】300 Multiple Choices 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。301 Moved Permanently 所请求的页面已经转移至新的url。302 Found 所请求的页面已经临时转移至新的url。303 See Other 所请求的页面可在别的url下被找到。304 Not Modified 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取。306 Unused 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。307 Temporary Redirect 被请求的页面已经临时移至新的url。【4xx: 客户端错误】400 Bad Request 服务器未能理解请求。401 Unauthorized 被请求的页面需要用户名和密码。402 Payment Required 此代码尚无法使用。403 Forbidden 对被请求页面的访问被禁止。404 Not Found 服务器无法找到被请求的页面。405 Method Not Allowed 请求中指定的方法不被允许。406 Not Acceptable 服务器生成的响应无法被客户端所接受。407 Proxy Authentication Required 用户必须首先使用代理服务器进行验证,这样请求才会被处理。408 Request Timeout 请求超出了服务器的等待时间。409 Conflict 由于冲突,请求无法被完成。410 Gone 被请求的页面不可用。411 Length Required "Content-Length" 未被定义。如果无此内容,服务器不会接受请求。412 Precondition Failed 请求中的前提条件被服务器评估为失败。413 Request Entity Too Large 由于所请求的实体的太大,服务器不会接受请求。414 Request-url Too Long 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。415 Unsupported Media Type 由于媒介类型不被支持,服务器不会接受请求。416 服务器不能满足客户在请求中指定的Range头。417 Expectation Failed 【5xx: 服务器错误】500 Internal Server Error 请求未完成。服务器遇到不可预知的情况。501 Not Implemented 请求未完成。服务器不支持所请求的功能。502 Bad Gateway 请求未完成。服务器从上游服务器收到一个无效的响应。503 Service Unavailable 请求未完成。服务器临时过载或当机。504 Gateway Timeout 网关超时。505 HTTP Version Not Supported 服务器不支持请求中指明的HTTP协议版本。
2.レスポンス ヘッダー
レスポンス ヘッダーは、通常、
フィールド名でも構成されます。値 は、で構成されます。レスポンス ヘッダーは、サーバーの基本情報とデータの説明情報を記述するために使用されます。 、サーバーは、しばらくしてから送り返されるデータの処理方法をクライアントに通知できます。
共通の応答ヘッダー フィールド:
Location: 这个头配合302状态码使用,用于告诉客户找谁。
Server: 服务器通过这个头告诉浏览器服务器的类型。
Content-Encoding: 服务器通过这个头告诉浏览器数据的压缩格式。
Content-Length: 服务器通过这个头告诉浏览器回送数据的长度
Content-Type: 服务器通过这个头告诉浏览器回送数据的类型
Last-Modified: 告诉浏览器当前资源的最后缓存时间
Refresh: 告诉浏览器隔多久刷新一次
Content-Disposition:告诉浏览器以下载方式打开数据
Transfer-Encoding: 告诉浏览器数据的传送格式
ETag: 缓存相关的头
其中三种禁止浏览器缓存的头字段:
Expires:告诉浏览器把回送的资源缓存多长时间 -1或0则是不缓存
Cache-Control:no-cache
Pragma:no-cache
服务器通过以上两个头,也就是控制浏览器不要缓存数据
比如通过百度的GET某张图片--其相应响应头
1 Cache-Control max-age=3153600002 Connection keep-alive3 Date Fri, 20 Mar 2015 06:05:22 GMT4 Etag "2c1-4a6473f6030c0"5 Expires Mon, 17 Mar 2025 06:05:23 GMT6 Server bfe/1.0.5.387 Set-Cookie __bsi=16929409652610129136_00_122_R_N_1_0303_C02F_N_I_I; expires=Fri, 20-Mar-15 06:05:27 GMT; domain=www.baidu.com; path=/
3.响应体
响应体就是响应的消息体
如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
一个稍微完整的HTTP响应报文:
Http定义了与服务器交互的不同方法,最基本的方法有4种:GET、POST、PUT、DELETE
而HTTP中的GET,POST,PUT,DELETE就对应着对URL资源的查,改,增,删4个操作。
所以说:GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
主要区分一下get和post
1.提交数据的形式:
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),会直接展现在地址栏中,以?分割URL和传输数据,参数之间以&相连
如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5 %A5%BD。
如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,
得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
而POST方法则会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数
2.提交数据的大小
get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,
限制URL长度的是客户端或服务器的支持的不同所影响:
比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的处理能力。
所以大小的限制还是得受各个web服务器配置的不同而影响着。
3.提交数据的安全
POST比GET方式的安全性要高
通过GET提交数据,用户名和密码将明文出现在URL上,因为一下几个原因get方式安全性会比post弱:
(1)登录页面有可能被浏览器缓存
(2)其他人查看浏览器的历史纪录,那么别人就可 以拿到你的账号和密码了
(3)当遇上跨站的攻击时,安全性的表现更差了
4.提交数据的安全(1)
tip:这里的安全,不是上诉所述的安全。而是只数据是否会被修改,完整性是否会被破坏的意思。
" 在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。
在JSP中,用 request.getParameter(\"XXXX\")来获取,虽然jsp中也有request.getQueryString()方法,但使用 起来比较麻烦
比如:传一个test.jsp?name=hyddd&password=hyddd,
用 request.getQueryString()得到的是:name=hyddd&password=hyddd。
PHP では、$_GET と $_POST を使用してそれぞれ GET と POST でデータを取得できますが、$_REQUEST は GET リクエストと POST リクエストの両方でデータを取得できます。
JSP での request と PHP での $_REQUEST の使用には隠れた危険があることに注意してください。