Tag: http

“找不到物品”错误页面的最合适的HTTP状态码是什么?

我很好奇什么是“不存在”项目的最合适的HTTP状态码。 如果页面本身不存在,我显然会使用404.但是,我的一个页面有一个userid参数(这是一个“编辑用户”页面),如果没有给定用户ID的用户存在,我正在显示一个错误页面,但我也想发送一个4xx状态头(因为“200 OK”不适合)。 我猜404会好,因为它是“没有find”,而不是“找不到文件”,但我不知道是否有一个更好的代码为这种情况。

用Delphi调用Http GET url最简单的方法是什么?

在我的应用程序中有一个Web服务需要调用,我可以在导入WSDL时使用它,或者只使用带有URL和参数的“HTTP GET”,所以我更喜欢后面的,因为它很简单。 我知道我可以使用indy idhttp.get来完成这项工作,但这是非常简单的事情,我不想将复杂的indy代码添加到我的应用程序中。 更新 :对不起,如果我不清楚,我的意思是“不添加复杂的indy代码”,我不想为这个简单的任务添加indy组件,而更喜欢更轻的方式。

从https页面转到http页面时是否发送了HTTP标头Referer?

经过几次testing,我开始得出结论:浏览器不会发送Referer HTTP标头,只要点击https页面上的http页面即可。 这是什么安全原因? 是在标准的某个地方定义的?

创build一个文本文件供即时下载

更新#1 下面发布的内容是让它输出文件的地方。 它所做的是输出string数据,然后是HTML格式的其余部分。 有没有什么方法可以阻止放入文件的内容以及刚刚显示给浏览器的内容。 更新#2 刚刚添加exit()和一切正常工作。 谢谢! EOU 嗨, 我一直在环顾四周,看到了一些类似的东西,但还没有完全掌握我需要做什么来完成任务。 目前我有一个表格,用户提供一些细节。 在提交时,会将其发回到自身,并处理POSTvariables。 我有一个预制的HTML网页模板的信息被放置到哪里工作正常,做一个str_replace和丹迪。 我现在要做的是将其作为下载文件导出到纯文本文件中。 所以最终的结果是用户点击表单上的提交,然后打开一个下载popup窗口,将修改的网页作为一个.txt文件。 据我所知,我需要做一些使用HTTP头function。 什么,虽然达到我想要的,我不知道。 我只想要文件可用一次,但我认为它必须存储在某个地方初始为用户下载,然后需要手动清理后? 任何帮助或点将是伟大的! 谢谢。

为什么主要的网站使用gzip?

我刚刚search了gzip和Deflate ,发现Deflate更好。 GZip或Deflate用于HTTP压缩 为什么使用deflate而不是gzip来处理Apache提供的文本文件? selectgzip over deflate来压缩http压缩是否有任何性能问题? 通过GZIP压缩浏览器的兼容性和优势 但是当我检查Google,Facebook和StackExchange的响应头时,他们都使用GZIP。 为什么他们使用gzip而不是Deflate?

如何将HTTPredirect到MVC应用程序中的HTTPS(IIS7.5)

我需要将我的HTTP站点redirect到HTTPS,添加了以下规则,但是当使用http://www.example.com尝试时出现了403错误,在浏览器中inputhttps://www.example.com时它工作正常。 <system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer>

HTTP规范:代理授权和授权标头

所以我试图实现以下scheme: 应用程序受基本身份validation保护。 假设它在app.com上app.com 应用程序前面的HTTP代理也需要身份validation。 它在proxy.com上proxy.com 因此,用户必须为同一请求中的代理和应用程序提供凭证,因此他具有不同的用户名/密码对:一对用于对该应用程序进行身份validation,另一个用户名/密码对以对代理进行身份validation。 在阅读规范后,我不太确定我应该如何实现这一点。 我想要做的是: 用户在没有任何authentication的情况下向代理发出HTTP请求。 代理服务器应答“ 407 Proxy Authentication Required并以"Proxy-Authenticate: Basic realm="proxy.com"的格式返回Proxy-Authenticate标头。 问题 :这个Proxy-Authenticate头是否正确设置? 客户端然后使用Proxy-Authorization标头重试请求,即代理username:password的Base64表示。 这次代理validation请求,但是应用程序回答401 Unauthorized头。 用户由代理进行了身份validation,但不是由应用程序进行身份validation。 该应用程序将WWW-Authenticate头添加到响应中,如WWW-Authenticate: Basic realm="app.com" 。 问题 :这个头值是正确的吗? 客户端再次重试该请求,同时使用Proxy-Authorization标头和Authorization标头,该应用程序的username:password使用Base64表示。 此时,代理成功validation请求,并将请求转发给validation用户的应用程序。 客户终于得到回应。 整个工作stream程是否正确?

同一资源的不同RESTful表示

我的应用程序在/foo有一个资源。 通常情况下,它是这样的HTTP响应负载: {"a": "some text", "b": "some text", "c": "some text", "d": "some text"} 客户端并不总是需要这个对象的全部四个成员。 什么是RESTfully语义的方式让客户告诉服务器在表示中需要什么? 如果它想要: {"a": "some text", "b": "some text", "d": "some text"} 它应该如何GET它? 一些可能性(如果我误解了REST,我正在寻找更正): GET /foo?sections=a,b,d 。 查询string(毕竟称为查询string)似乎意味着“查找与此条件匹配的资源并告诉我有关它们”,而不是“根据此自定义向我表示此资源”。 GET /foo/a+b+d我最喜欢的是REST语义不包含这个问题 ,因为它的简单性。 打破URI不透明,违反HATEOAS。 似乎打破资源(URI的唯一含义是识别一个资源)和表示之间的区别。 但这是值得商榷的,因为它与代表/widget/<id>资源的可视列表/widget/<id>一致,这是我从来没有遇到的问题。 松开我的约束,对GET /foo/a等做出响应,并让客户端对每个/foo组件的请求进行请求。 如果/foo有数百个组件,而客户端需要100个组件,那么开销就会增加,这可能会变成一场噩梦。 如果我想支持/foo的HTML表示,我必须使用Ajax,如果我只想要一个可以被抓取,由极简主义浏览器渲染的HTML页面,这是有问题的。 为了维护HATEOAS,它还需要指向其他表示中存在的那些“子资源”的链接,可能在/foo : {"a": {"url": "/foo/a", "content": "some text"}, …} GET /foo , Content-Type: […]

在HTTP URL的path部分中,斜杠(“/”)等同于编码的斜杠(“%2F”)

我有一个网站,不同的URL的path部分(而不是查询string)中的“/”和“%2F”。 根据RFC或现实世界,这是一件坏事吗? 我问,因为我一直使用我正在使用的Web框架(Ruby on Rails)以及下面的层(Passenger,Apache,例如,我必须为Apache启用“ALLOW_ENCODED_SLASHES”)时遇到一些小惊喜。 我现在倾向于彻底摆脱编码的斜杠,但是我不知道是否应该提交错误报告,在那里我看到涉及编码斜杠的奇怪行为。 至于为什么我首先有编码的斜线,基本上我有这样的路线: :controller/:foo/:bar 其中:foo类似于可以包含斜杠的path。 我认为最简单的事情就是只要URL转义foo所以斜杠被路由机制忽略。 现在我有疑问了,很明显,这个框架并不是真的支持这个,但根据RFC,这样做是错误的吗? 以下是我收集的一些信息: RFC 1738(URL): 当一个八位字节由一个字符表示并且被编码时,通常一个URL具有相同的解释。 但是,对于保留字符而言,这不是真的:对为特定scheme保留的字符进行编码可能会改变URL的语义。 RFC 2396(URI): 这些字符被称为“保留”,因为它们在URI组件中的使用仅限于其保留的用途。 如果URI组件的数据与保留目的冲突,那么冲突的数据必须在形成URI之前转义。 (在这里转义意味着除了编码保留字符之外的东西吗?) RFC 2616(HTTP / 1.1): 除“保留”和“不安全”集以外的字符(见RFC 2396 [42])等同于其“”HEX HEX“%”编码。 还有Rails的这个错误报告 ,他们似乎期望编码的斜线行为不同: 对,我期望不同的结果,因为他们指着不同的资源。 它正在寻找根目录中的文字文件“foo / bar”。 非转义版本正在寻找目录foo中的文件栏。 从RFC中可以清楚的看到,原始编码和未编码的字符是相同的,但是保留字符的故事是什么?

什么字符必须转义HTTP查询string?

这个问题涉及URL的查询string部分中的字符,它出现在? 标记字符。 根据维基百科 ,某些字符保持不变 ,其他字符被编码(通常使用%转义序列)。 我一直在试图追踪到实际的规格,所以我理解维基百科页面中的每一个重点的理由。 矛盾例1: HTML规范说将空间编码为+然后将其余部分推迟到RFC1738 。 但是,这个RFC表示~是不安全的,而且“不安全的字符必须始终在URL中进行编码”。 这似乎与维基百科矛盾。 实际上,IE8在它生成的查询string中编码~ ,而FF3保持原样。 矛盾例2: 维基百科指出,所有未提及的字符都必须进行编码。 ! 没有在维基百科中提及。 但RFC1738指出! 是一个“特殊”字符和“可以使用未编码”。 这似乎与维基百科相矛盾,说它必须被编码。 实际上,IE8编码! 在它生成的查询string中,而FF3保持原样。 我明白,这个道德可能会被编码在维基百科和规范之间的疑问字符。 也许甚至会编码一切不是[A-ZA-Z0-9]的东西。 我只想知道这方面的实际标准。 结论 维基百科上描述的algorithm精确地对那些不是RFC3986非保留字符的字符进行编码。 也就是说,它编码除了字母数字和-._~以外的所有字符。 作为特殊情况,空间被编码为+而不是每个RFC3986的%20 。 某些应用程序使用较旧的RFC。 为了比较, RFC2396未保留的字符是字母数字和!'()*-._~ 。 为了比较, HTML5工作草案algorithm对除字母数字和*-._之外的所有字符进行编码。 编码空间的特殊情况仍然是+ 。 值得注意的区别是*不是编码,而是编码。 (从技术上讲, *处理与RFC3986兼容,即使*因为处于query生产允许的sub-delims而被reserved )。